gh-ostまたはpt-oscを使用するデータベースからの継続的なレプリケーション
本番シナリオでは、DDL実行中のテーブルロックにより、データベースからの読み取りまたはデータベースへの書き込みがある程度ブロックされる可能性があります。したがって、オンラインDDLツールは、読み取りと書き込みへの影響を最小限に抑えるためにDDLを実行するためによく使用されます。一般的なDDLツールは幽霊とpt-oscです。
DMを使用してMySQLからTiDBにデータを移行する場合、DMとgh-ostまたはpt-oscのコラボレーションを可能にするためにonline-ddl
をエンベールできます。
詳細なレプリケーション手順については、シナリオごとに次のドキュメントを参照してください。
- 小さなデータセットのMySQLをTiDBに移行する
- 大規模なデータセットのMySQLをTiDBに移行する
- 小さなデータセットのMySQLシャードをTiDBに移行およびマージする
- 大規模なデータセットのMySQLシャードをTiDBに移行およびマージする
DMでonline-ddlを有効にする
DMのタスク構成ファイルで、以下に示すように、グローバルパラメーターonline-ddl
をtrue
に設定します。
# ----------- Global configuration -----------
## ********* Basic configuration *********
name: test # The name of the task. Should be globally unique.
task-mode: all # The task mode. Can be set to `full`, `incremental`, or `all`.
shard-mode: "pessimistic" # The shard merge mode. Optional modes are `pessimistic` and `optimistic`. The `pessimistic` mode is used by default. After understanding the principles and restrictions of the "optimistic" mode, you can set it to the "optimistic" mode.
meta-schema: "dm_meta" # The downstream database that stores the `meta` information.
online-ddl: true # Enable online-ddl support on DM to support automatic processing of "gh-ost" and "pt-osc" for the upstream database.
online-ddlを有効にした後のワークフロー
DMでonline-ddlを有効にすると、DMがgh-ostまたはpt-oscを複製することによって生成されるDDLステートメントが変更されます。
gh-ostまたはpt-oscのワークフロー:
DDL実テーブルのテーブルスキーマに従ってゴーストテーブルを作成します。
ゴーストテーブルにDDLを適用します。
DDL実表のデータをゴースト表に複製します。
2つのテーブル間でデータの整合性が取れたら、renameステートメントを使用して、実際のテーブルをゴーストテーブルに置き換えます。
DMのワークフロー:
ダウンストリームのゴーストテーブルの作成をスキップします。
ゴーストテーブルに適用されたDDLを記録します。
ゴーストテーブルからのみデータを複製します。
ダウンストリームで記録されたDDLを適用します。
ワークフローの変更により、次の利点がもたらされます。
ダウンストリームTiDBは、ゴーストテーブルを作成して複製する必要がないため、ストレージスペースとネットワーク伝送のオーバーヘッドを節約できます。
シャーディングされたテーブルからデータを移行およびマージする場合、レプリケーションの正確性を確保するために、シャーディングされたゴーストテーブルごとにRENAME操作は無視されます。