mcpField
M
molt-fetch

molt-fetch

github.com/cockroachlabsデータ・データベース23118 回インストール14 週間前に更新
リポジトリ

molt-fetch について

molt-fetchは、PostgreSQL、MySQL、Oracle、MSSQLからCockroachDBへの一括移行に使うコマンドラインスキルです。複数の保存先やテーブル処理方式に対応し、失敗したロードを再開できます。

主な機能

  1. 01CockroachDBへの一括データベース移行
  2. 02クラウド、直接転送、ローカル保存
  3. 03テーブルのフィルタリングと処理方式
  4. 04オンラインのCOPY FROMインポート
  5. 05fetch 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 から 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 を実行してデータの整合性を確認してください

すべてのフラグについては、フラグのリファレンスを参照してください。

コメント