TiDB Data Migrationの互換性カタログ
DMは、さまざまなソースからTiDBクラスタへのデータ移行をサポートしています。データソースの種類に基づいて、DMには4つの互換性レベルがあります。
- 一般提供開始(GA) :アプリケーションシナリオが検証され、GAテストに合格しました。
- Experimental:一般的なアプリケーションシナリオは検証済みですが、対象範囲は限定的であるか、ごく少数のユーザーのみが対象となっています。まれに問題が発生する可能性があるため、ご使用のシナリオにおける互換性を確認する必要があります。
- 未テスト:DMはMySQLプロトコルおよびbinlogとの互換性を目指していますが、DMのテストマトリックスにはすべてのMySQLフォークやバージョンが含まれているわけではありません。フォークやバージョンがMySQL互換のプロトコルとbinlogフォーマットを使用している場合は動作するはずですが、使用前にご自身の環境で互換性を確認する必要があります。
- 互換性なし:DMには既知のブロッキング問題があるため、本番での使用は推奨されません。
データソース
外部キーのCASCADE操作
バージョン8.5.6以降、DMは外部キー制約を使用するテーブルのレプリケーションに関する実験的サポートを提供します。このサポートには、以下の改善点が含まれます。
- セーフモード: セーフモード実行中、DM は各バッチに対して
foreign_key_checks=0を設定し、主キーまたは一意キーの値を変更しないDELETEステートメントの冗長なUPDATE} ステップをスキップします。これにより、REPLACE INTO(内部でDELETE+INSERTを実行) が子行に意図しないON DELETE CASCADE効果を引き起こすのを防ぎます。詳細については、 DMセーフモードを参照してください。 - マルチワーカー因果関係:
foreign_key_checks=1かつworker-count > 1の場合、DM はタスク開始時にダウンストリーム スキーマから外部キー関係を読み取り、因果関係キーを挿入します。これにより、親行に対する DML 操作が依存する子行に対する操作よりも先に完了し、ワーカー間でBinlogの順序が維持されます。v8.5.7 以降、このモードでは、スキーマ名またはテーブル名の変更など、静的な 1 対 1 のテーブルルーティングをサポートします。
外部キーのレプリケーションには、以下の制限事項が適用されます。
- セーフモードで
foreign_key_checks=1を有効にすると、DM は主キーまたは一意キーの値を変更するUPDATEステートメントをサポートしていません。DM はエラーsafe-mode update with foreign_key_checks=1 and PK/UK changes is not supportedでタスクを一時停止します。このようなステートメントを再現するには、safe-modeをfalseに設定してください。 foreign_key_checks=1の場合、DM はレプリケーション中に外部キー制約を作成、変更、または削除する DDL ステートメントをサポートしません。- v8.5.7 以降、
foreign_key_checks=1かつworker-count > 1の場合、DM は外部キーを持つテーブルに対して静的な 1 対 1 のルーティングルールのみをサポートします。このモードでは、DM はタスク内の複数のソーステーブルを同じターゲットテーブルにマッピングするルーティングルールを引き続き拒否します。1 対 1 でないルーティングの場合は、worker-countを1に設定するか、ルーティングルールを変更してください。 foreign_key_checks=1の場合、これらのオプションは DML ステートメントの境界と外部キー実行のセマンティクスを変更する可能性があるため、DM はsyncer.compactまたはsyncer.multiple-rowsをサポートしません。foreign_key_checks=1かつworker-count > 1の場合、DM は、worker-count、case-sensitive、ルーティングルール、block-allow-listまたはblack-white-listルール、Binlog イベントフィルタリングルール、およびforeign_key_checksの更新を含む、外部キー因果関係のセマンティクスを変更する可能性があるホット設定更新を拒否します。これらの設定を変更するには、タスクを停止し、変更した設定で再起動してください。foreign_key_checks=1の場合、block-allow-listには、外部キー依存関係チェーン内のすべての祖先テーブルを含める必要があります。祖先テーブルを除外すると、増分レプリケーション中にエラーが発生し、DM はタスクを一時停止します。foreign_key_checks=1の場合、外部キーのメタデータは、ソースとダウンストリーム間で一貫している必要があります。DM が不整合を検出した場合は、binlog-schema update --from-targetを実行してメタデータを再同期してください。- セーフモードで
foreign_key_checks=1を有効にすると、UPDATEが主キーまたは一意キーの値を変更する場合、DM はON UPDATE CASCADEを正しく複製しません。DM は、このようなステートメントをDELETE+REPLACEに書き換え、ON DELETEアクションではなくON UPDATEアクションをトリガーします。この場合、DM はステートメントを拒否し、タスクを一時停止します。DM はキー値を変更しないUPDATEステートメントを正しく複製します。
バージョン8.5.6より前のバージョンでは、DMはダウンストリームに外部キー制約を作成しますが、セッション変数foreign_key_checks=OFF設定するため、制約を適用しません。その結果、カスケード操作はダウンストリームに複製されません。
MariaDBに関する注記
- MariaDB 10.5.11 以降では、権限名の変更(例:
BINLOG MONITOR、REPLICATION SLAVE ADMIN、REPLICATION MASTER ADMIN) により、DM の事前チェックが失敗します。このエラーは、レプリケーション権限、ダンプ権限、およびダンプ接続番号のチェッカーで[code=26005] fail to check synchronization configurationとして表示されます。 - DM タスクに
ignore-checking-items: ["all"]を追加すると、事前チェックをバイパスできます。詳細はDM事前チェックをご覧ください。