mcpField
M
molt-fetch

molt-fetch

github.com/cockroachlabs数据与数据库23118 次安装14 周前更新
代码仓库

关于 molt-fetch

molt-fetch 是用于将 PostgreSQL、MySQL、Oracle 和 MSSQL 批量迁移到 CockroachDB 的命令行技能,支持多种存储路径、表处理模式及失败后续传。

主要功能

  1. 01批量迁移数据库至 CockroachDB
  2. 02支持云存储、直传或本地存储
  3. 03表筛选与处理模式
  4. 04在线 COPY FROM 导入
  5. 05使用 fetch ID 恢复失败任务

适用场景

  1. 01从源数据库迁移指定表
  2. 02创建架构并执行完整迁移
  3. 03失败后继续迁移未完成的表

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/cockroachlabs/cockroachdb-skills --skill molt-fetch

安装后在 Claude Code 中输入/molt-fetch确认已加载。

附带文件references/flags.md

详细介绍

molt fetch

将数据从源数据库(PostgreSQL、MySQL、Oracle、MSSQL)批量迁移到 CockroachDB。

基本结构

molt fetch \
  --source "<source-conn>" \
  --target "<crdb-conn>" \
  --bucket-path "s3://bucket/prefix"   # or --direct-copy or --local-path
  [options]

存储后端(任选其一)

选项适用场景
--bucket-path "s3://..."AWS S3(GCS 使用 gs://,Azure 使用 azure://)
--direct-copy不使用中间存储;适用于网络可访问的场景,速度最快
--local-path "/tmp/molt" + --local-path-listen-addr "0.0.0.0:9005"CRDB 必须能够访问监听地址

云身份验证:传入 --use-implicit-auth,使用 IAM/ADC/托管身份;或者设置 AWS_ACCESS_KEY_ID/GOOGLE_APPLICATION_CREDENTIALS 环境变量。

表处理方式(--table-handling)

值行为
none(默认)追加到现有表
drop-on-target-and-recreate删除目标表并根据源架构重新创建;启用自动架构创建。会销毁现有目标表及其数据,因此仅用于全新或空目标
truncate-if-exists加载前清空表;如果表不存在则报错

导入模式

IMPORT INTO(默认):加载期间表会处于离线状态。吞吐量最高。

COPY FROM(--use-copy):表保持在线。与 --direct-copy 搭配使用。不能使用压缩。

# Zero-downtime load
molt fetch --source "..." --target "..." --direct-copy --use-copy

重要标志

# Filtering
--table-filter "customers|orders"      # POSIX regex for tables to include
--table-exclusion-filter "temp_.*"     # exclude pattern
--schema-filter "public"               # PostgreSQL only

# Performance
--table-concurrency 4                  # parallel tables (default: 4)
--export-concurrency 4                 # export threads (default: 4)
--row-batch-size 100000                # rows per SELECT (default: 100k)

# Schema
--type-map-file "types.json"           # custom type mappings
--transformations-file "transforms.json"  # column exclusions, table aliases

# Logging
--log-file "migration.log"             # or "stdout"
--logging debug                        # info (default), debug, trace
--metrics-listen-addr "0.0.0.0:3030"  # Prometheus scrape endpoint

特定源数据库的先决条件

MySQL:必须启用 GTID 模式(gtid_mode=ON、enforce_gtid_consistency=ON)。必须关闭 ONLY_FULL_GROUP_BY。或者使用 --ignore-replication-check。

Oracle:二进制文件必须使用 CGO_ENABLED=1 -tags="cgo source_all" 构建。Oracle Instant Client 必须位于 LD_LIBRARY_PATH 中。

PostgreSQL:需要复制权限,或者使用 --ignore-replication-check。

常见工作流

1. 创建架构并执行完整迁移

drop-on-target-and-recreate 会先删除所有现有目标表;仅对全新或空目标执行此操作。

molt fetch \
  --source "postgresql://<user>:<password>@pg:5432/db" \
  --target "postgresql://root@crdb:26257/db" \
  --bucket-path "s3://mybucket/migration" \
  --table-handling drop-on-target-and-recreate \
  --table-filter "customers|orders|payments" \
  --log-file migration.log
2. 失败后恢复
# List available continuation tokens
molt fetch tokens --fetch-id "abc-123" --target "postgresql://root@crdb:26257/db"

# Resume all failed tables
molt fetch \
  --source "..." --target "..." \
  --bucket-path "s3://mybucket/migration" \
  --fetch-id "abc-123" \
  --non-interactive

错误恢复

错误原因解决方法
"GTID-based replication not enabled"MySQL 未启用 GTID启用 gtid_mode=ON,或添加 --ignore-replication-check
"Column mismatch"架构不一致手动修复目标架构,或使用 --type-map-file
IMPORT INTO 未显示任何信息CockroachDB 正在执行导入在 CRDB 上运行 SHOW JOBS 检查进度
"timestamp in the future"Docker/Mac 时钟偏差同步主机之间的时钟

注意事项

  • COPY 模式:不能使用 --compression gzip;必须使用 --compression none(或者省略该选项,COPY 模式的默认值为 none)
  • IMPORT INTO 期间表会处于离线状态——如需零停机,请使用 --use-copy
  • 运行之间发生架构更改时,必须从头开始
  • --fetch-id 续传令牌保存在目标端的异常表中
  • 对于 MySQL,--ignore-replication-check 会跳过 GTID 验证,但依赖复制的功能将无法使用
  • fetch 完成后,运行 molt verify 确认数据完整性

完整标志列表请参阅标志参考。

评论

支持 Markdown