シャードテーブルからのデータのマージと移行
このドキュメントでは、データ移行(DM)が提供するシャーディングサポート機能について紹介します。この機能を使用すると、上流のMySQLまたはMariaDBインスタンスにある、同一または異なるテーブルスキーマを持つテーブルのデータを、下流のTiDBの同じテーブルにマージして移行できます。上流のDMLステートメントの移行だけでなく、複数の上流シャードテーブルにおけるDDLステートメントを使用したテーブルスキーマ変更の移行もサポートします。
概要
DMは、複数の上流シャードテーブルのデータをTiDB内の1つのテーブルにマージして移行する機能をサポートしています。移行中は、各シャードテーブルのDDLと、その前後のDMLを調整する必要があります。DMは、これらの使用シナリオに合わせて、悲観的モードと楽観的モードの2つのモードをサポートしています。
注記:
- シャード化されたテーブルからデータをマージして移行するには、タスク構成ファイルで
shard-mode設定する必要があります。- DM は、シャーディングサポート機能のマージに、デフォルトで悲観的モードを使用します。(ドキュメントに特別な記述がない場合は、デフォルトで悲観的モードを使用します。)
- 楽観的モードの原理と制限事項を理解していない場合は、このモードの使用は推奨されません。理解していない場合は、移行の中断やデータの不整合など、深刻な結果を招く可能性があります。
悲観的モード
上流のシャードテーブルがDDL文を実行すると、そのシャードテーブルの移行は一時停止されます。他のすべてのシャードテーブルが同じDDL文を実行すると、下流のシャードテーブルでDDLが実行され、データ移行タスクが再開されます。このモードの利点は、下流に移行されたデータに問題がないことを保証できることです。詳細は悲観的モードでのシャードマージを参照してください。
楽観的モード
DMは、シャードテーブルで実行されたDDLを他のシャードテーブルと互換性のある文に自動的に修正し、下流のテーブルに移行します。これにより、シャードテーブルのDML移行がブロックされることはありません。このモードの利点は、DDL処理中にデータ移行がブロックされないことです。ただし、不適切な使用は移行の中断やデータの不整合を引き起こす可能性があります。詳細については、 楽観的モードでのシャードマージを参照してください。
対比
| 悲観モード | 楽観モード |
|---|---|
| DDL を実行するシャードテーブルは DML 移行を中断します | DDLを実行するシャードテーブルはDML移行を継続します |
| 各シャードテーブルのDDL実行順序とステートメントは同じである必要があります | 各シャードテーブルは、テーブルスキーマの互換性を維持するだけでよい。 |
| シャードグループ全体の一貫性が確保された後、DDLはダウンストリームに移行されます。 | 各シャードテーブルのDDLはすぐに下流に影響します。 |
| 不正なDDL操作は検出後に傍受される可能性がある | 間違ったDDL操作は下流に移行され、検出前に上流と下流のデータに不整合が生じる可能性があります。 |