シャーディングされたテーブルからのデータのマージと移行
このドキュメントでは、データ移行(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操作がダウンストリームに移行されるため、検出前にアップストリームデータとダウンストリームデータの間に不整合が生じる可能性があります |