molt-fetch について
molt-fetchは、PostgreSQL、MySQL、Oracle、MSSQLからCockroachDBへの一括移行に使うコマンドラインスキルです。複数の保存先やテーブル処理方式に対応し、失敗したロードを再開できます。
主な機能
- 01CockroachDBへの一括データベース移行
- 02クラウド、直接転送、ローカル保存
- 03テーブルのフィルタリングと処理方式
- 04オンラインのCOPY FROMインポート
- 05fetch IDによる失敗ロードの再開
活用シーン
- 01ソースデータベースから指定テーブルを移行
- 02スキーマ作成を伴う全体移行
- 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 から listen addr に接続できる必要があります |
クラウド認証:IAM/ADC/マネージド ID を使用する場合は --use-implicit-auth を指定するか、AWS_ACCESS_KEY_ID/GOOGLE_APPLICATION_CREDENTIALS 環境変数を設定します。
テーブルの処理(--table-handling)
| 値 | 動作 |
|---|---|
none(デフォルト) | 既存のテーブルに追加します |
drop-on-target-and-recreate | ソーススキーマから再作成するために、テーブルを削除します。スキーマの自動作成が有効になります。既存のターゲットテーブルとそのデータは削除されるため、新規または空のターゲットでのみ使用してください |
truncate-if-exists | 読み込み前に切り捨てます。テーブルが存在しない場合はエラーになります |
インポートモード
IMPORT INTO(デフォルト):読み込み中、テーブルは OFFLINE になります。スループットが最も高くなります。
COPY FROM(--use-copy):テーブルは ONLINE のままです。--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 の実行中、テーブルは offline になります。ダウンタイムをゼロにするには
--use-copyを使用してください - 実行間にスキーマを変更した場合は、最初からやり直す必要があります
--fetch-idの継続トークンはターゲットの exceptions テーブルに保存されます- MySQL で
--ignore-replication-checkを指定すると GTID の検証は省略されますが、レプリケーションに依存する機能は動作しません - fetch の後、
molt verifyを実行してデータの整合性を確認してください
すべてのフラグについては、フラグのリファレンスを参照してください。