TiDBデータ移行の互換性カタログ
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セーフモードを参照してください。 - マルチワーカー因果関係:
worker-count > 1の場合、DM はタスク開始時にダウンストリーム スキーマから外部キー関係を読み取り、因果関係キーを挿入します。これにより、親行に対する DML 操作が依存する子行に対する操作よりも先に完了し、ワーカー間でbinlogの順序が維持されます。
外部キーのレプリケーションには、以下の制限事項が適用されます。
- セーフモードでは、DM は主キーまたは一意キーの値を変更する
UPDATEステートメントをサポートしていません。タスクはエラーsafe-mode update with foreign_key_checks=1 and PK/UK changes is not supportedで一時停止します。このようなステートメントを再現するには、safe-mode: falseを設定してください。 foreign_key_checks=1の場合、DM はレプリケーション中に外部キー制約を作成、変更、または削除する DDL ステートメントをサポートしません。worker-count > 1の場合、テーブルルーティングはサポートされません。外部キーを含むテーブルでテーブルルーティングを使用する場合は、worker-countを1に設定してください。- ブロック許可リストには、外部キー依存関係チェーン内のすべての祖先テーブルを含める必要があります。祖先テーブルが除外されている場合、増分レプリケーション中にエラーが発生し、タスクが一時停止します。
- 外部キーのメタデータは、ソースとダウンストリーム間で一貫している必要があります。不整合が検出された場合は、
binlog-schema update --from-targetを実行してメタデータを再同期してください。 ON UPDATE CASCADEが主キーまたは一意キーの値を変更する場合、UPDATEはセーフ モードで正しく複製されません。DM は、このようなステートメントをDELETE+REPLACEに書き換え、ON DELETEアクションではなくON UPDATEアクションをトリガーします。この場合、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事前チェックをご覧ください。