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