Data Transmission Service (DTS) は、PolarDB for MySQLクラスター間の双方向データ同期をサポートしています。 この機能は、アクティブな地理的冗長性や地理的災害復旧などのシナリオに適しています。 このトピックでは、PolarDB for MySQLクラスター間の双方向データ同期を設定する方法について説明します。
前提条件
- ソースおよびターゲットApsara PolarDB for MySQLクラスターが作成されます。 詳細については、以下をご参照ください。 従量課金クラスターの購入
- バイナリログ機能は、ソースおよび宛先Apsara PolarDB for MySQLクラスターに対して有効になっています。 詳細については、以下をご参照ください。 バイナリログの有効化
注意事項
DTSは、最初の完全データ同期中に、ソースRDSインスタンスとターゲットRDSインスタンスの読み取りおよび書き込みリソースを使用します。 これにより、RDSインスタンスの負荷が増加する可能性があります。 インスタンスのパフォーマンスが悪い場合、仕様が低い場合、またはデータ量が多い場合、データベースサービスが利用できなくなる可能性があります。 たとえば、ソースRDSインスタンスで多数の低速SQLクエリが実行されている場合、テーブルにプライマリキーがない場合、またはターゲットRDSインスタンスでデッドロックが発生する場合、DTSは大量の読み取りおよび書き込みリソースを占有します。 データ同期の前に、ソースRDSインスタンスとターゲットRDSインスタンスのパフォーマンスに対するデータ同期の影響を評価します。 オフピーク時にデータを同期することを推奨します。 たとえば、ソースRDSインスタンスとターゲットRDSインスタンスのCPU使用率が30% 未満の場合にデータを同期できます。
- 最初の完全データ同期中に、同時INSERT操作により、宛先クラスターのテーブルが断片化されます。 最初のフルデータ同期が完了すると、ターゲットクラスターのテーブルスペースはソースクラスターのテーブルスペースよりも大きくなります。
- ソースクラスターにはPRIMARY KEYまたはUNIQUE制約が必要で、すべてのフィールドが一意である必要があります。 そうでない場合、宛先クラスターに重複データレコードが含まれる可能性があります。
- ソースインスタンスまたはターゲットインスタンスが中国本土以外のリージョンにある場合、同じリージョン内にあるインスタンス間でのみ双方向データ同期がサポートされます。 たとえば、日本 (東京) リージョン内のインスタンス間で双方向データ同期がサポートされています。 日本 (東京) リージョンのインスタンスとドイツ (フランクフルト) リージョンのインスタンス間の双方向データ同期はサポートされていません。
課金
同期タイプ | タスク設定料金 |
スキーマ同期と完全データ同期 | 無料です。 |
増分データ同期 | 有料。 詳細については、「課金の概要」をご参照ください。 |
制限事項
- DTSは、2つのPolarDBクラスター間の双方向データ同期をサポートしますが、複数のPolarDBクラスター間ではサポートしません。
データ同期中にオブジェクトに対してDDL操作を実行するために、gh-ostまたはpt-online-schema-changeを使用しないことを推奨します。 そうしないと、データ同期が失敗する可能性があります。
- トリガーとの非互換性
同期するオブジェクトとしてデータベースを選択し、そのデータベースにテーブルを更新するトリガーが含まれている場合、データの不整合が発生する可能性があります。 この問題を解決する方法の詳細については、「トリガーを含むソースデータベースのデータ同期タスクの構成」をご参照ください。
RENAME TABLE操作の制限
RENAME TABLE操作は、ソースデータベースと宛先データベースの間にデータの不一致を引き起こす可能性があります。 たとえば、オブジェクトとしてテーブルを選択し、データ同期中にテーブルの名前を変更した場合、このテーブルのデータはターゲットデータベースに同期されません。 この状況を回避するには、データ同期タスクを構成するときに、このテーブルが属するデータベースをオブジェクトとして選択します。
DDL同期方向の制限
双方向データ同期の安定性を確保するために、DDL操作を一方向にのみ同期できます。 方向のDDL同期が設定されている場合、逆方向のDDL同期はサポートされません。 逆方向に同期できるのはDML操作だけです。
同期可能なSQL操作
操作タイプ | SQL文 |
DML | INSERT、UPDATE、DELETE、および REPLACE |
DDL |
|
競合の検出
データの一貫性を確保するために、同じプライマリキー、ビジネスプライマリキー、または一意のキーを持つデータレコードが、単一のPolarDBクラスターでのみ更新されるようにしてください。 2つのPolarDBクラスターの両方でデータレコードが更新されると、同期の競合が発生します。
DTS は競合をチェックして修正し、双方向同期インスタンスの安定性を最大化します。 DTS は以下のタイプの競合を検出できます。
- INSERT 操作による一意性の競合
UNIQUE制約に準拠しないINSERT操作は同期できません。 たとえば、同じ主キーを持つデータレコードがほぼ同時に2つの同期ノードに挿入された場合、挿入されたレコードの1つは同期されません。 同じプライマリキーを持つレコードが他のノードに既に存在するため、同期は失敗します。
- UPDATE 操作が原因の整合性のないレコード
- 更新するレコードがターゲットクラスターに存在しない場合、DTSはupdate操作をINSERT操作に変換します。 ただし、一意性の競合が発生する可能性があります。
- 挿入するレコードの主キーまたは一意キーは、宛先インスタンス内の既存のレコードの主キーまたは一意キーと競合する場合があります。
- 存在しないレコードの削除
削除するレコードは、移行先クラスターに存在しません。 この場合、指定した競合解決ポリシーに関係なく、DTSはDELETE操作を無視します。
- 双方向同期時に、同期元インスタンスと同期先インスタンスのシステム時刻が異なる場合があります。 同期レイテンシが発生する可能性があります。 これらの理由により、DTSは、競合検出メカニズムがすべてのデータ競合を防ぐことができることを保証しません。 双方向同期を実行するには、同じプライマリキー、ビジネスプライマリキー、または一意のキーを持つレコードが、いずれかの同期ノードでのみ更新されるようにします。
- DTS は、データの同期中に発生する可能性のある競合を防止するための競合解決ポリシーが用意されています。 双方向データ同期を設定するときに、競合解決ポリシーを選択できます。
手順
- データ同期インスタンスを購入します。 詳細については、「DTSインスタンスの購入」をご参照ください。 重要 購入ページで、ソースインスタンスと宛先インスタンスの両方をPolarDBに設定し、同期トポロジを双方向同期に設定します。
にログインします。
DTSコンソール。説明 Data Management (DMS) コンソールにリダイレクトされている場合は、右下隅にあるアイコンをクリックして、以前のバージョンのDTSコンソールに移動します。左側のナビゲーションウィンドウで、[データ同期] をクリックします。
[同期タスク] ページの上部で、ターゲットインスタンスが存在するリージョンを選択します。
- データ同期タスクを順方向に設定します。
- データ同期インスタンスを検索し、最初のデータ同期タスクの [操作] 列で [タスクの設定] をクリックします。 重要 双方向データ同期インスタンスには、2 つのデータ同期タスクがあります。 タスクごとにパラメーターを設定する必要があります。 2番目のデータ同期タスクを設定するときに、タスクを見つけて、[操作] 列の [タスクの設定] をクリックします。
- ソースクラスターとターゲットクラスターを設定します。
セクション パラメーター 説明 なし 同期タスク名 DTSが生成するタスク名。 わかりやすい名前を指定することをお勧めします。 一意のタスク名を使用する必要はありません。 ソースインスタンスの詳細 インスタンスタイプ ソースインスタンスのインスタンスタイプ。 このパラメーターの値はPolarDB Instanceに設定されており、変更することはできません。 インスタンスリージョン 購入ページで選択したソースリージョン。 このパラメーターの値は変更できません。 PolarDBインスタンスID ソースPolarDB for MySQLクラスターのID。 重要 データ同期タスクを逆方向に設定する場合は、順方向同期のターゲットPolarDBクラスターのIDを選択します。データベースアカウント ソースPolarDBクラスターのデータベースアカウント。 アカウントには、同期するオブジェクトに対する読み取りおよび書き込み権限が必要です。 データベースパスワード データベースアカウントのパスワードを設定します。 ターゲットインスタンスの詳細 インスタンスタイプ ターゲットインスタンスのインスタンスタイプ。 このパラメーターの値はPolarDB Instanceに設定されており、変更することはできません。 インスタンスリージョン 購入ページで選択したターゲットリージョン。 このパラメーターの値は変更できません。 PolarDBインスタンスID ターゲットPolarDB for MySQLクラスターのID。 重要 データ同期タスクを逆方向に設定する場合は、順方向同期のソースPolarDBクラスターのIDを選択します。データベースアカウント ターゲットPolarDBクラスターのデータベースアカウント。 アカウントには、同期するオブジェクトに対する読み取りおよび書き込み権限が必要です。 データベースパスワード データベースアカウントのパスワードを設定します。 - ページの右下隅にある [ホワイトリストと次への設定] をクリックします。 説明
- ソースまたはターゲットデータベースがApsaraDB RDS for MySQLまたはApsaraDB for MongoDBインスタンスなどのAlibaba Cloudデータベースインスタンスの場合、DTSは自動的にDTSサーバーのCIDRブロックをインスタンスのホワイトリストに追加します。 ソースまたはターゲットデータベースがElastic Compute Service (ECS) インスタンスでホストされている自己管理型データベースの場合、DTSは自動的にDTSサーバーのCIDRブロックをECSインスタンスのセキュリティグループルールに追加します。 詳細については、「DTSサーバーのCIDRブロックをオンプレミスデータベースのセキュリティ設定に追加する」をご参照ください。
- データ同期が完了したら、DTSサーバーのCIDRブロックをホワイトリストまたはセキュリティグループから削除することを推奨します。
- 同期ポリシーと同期するオブジェクトを設定します。
設定
パラメーター
説明
同期ポリシーの設定
DDL操作の除外
Yes: DDL操作を同期しません。
No: DDL操作を同期します。
重要DDL同期方向の制限: 双方向データ同期の安定性を確保するために、DDL操作を順方向でのみ同期できます。
同期用のDMLステートメント
同期するDML操作の種類。 デフォルトでは、INSERT、UPDATE、およびDELETE操作が選択されています。 ビジネス要件に基づいてDML操作タイプを選択できます。
紛争解決ポリシー
同期競合の解決ポリシー。 デフォルトでは、TaskFailedが選択されています。 ビジネス要件に基づいて競合解決ポリシーを選択できます。
TaskFailed (競合が発生すると、エラーが報告され、タスクが終了します。)
デフォルトの競合解決ポリシー。 データ同期中に競合が発生した場合、同期タスクはエラーを報告して終了します。 タスクが失敗状態になり、競合を手動で解決する必要があります。
無視 (競合が発生すると、ターゲットインスタンスの競合レコードが使用されます)
データ同期中に競合が発生した場合、同期タスクは現在のステートメントを無視して続行します。 宛先データベース内の競合するレコードが使用されます。
上書き (ターゲットインスタンスの競合レコードが上書きされます)
データ同期中に競合が発生した場合、ターゲットデータベース内の競合するレコードは上書きされます。
同期するオブジェクトの選択
N/A
[ソースオブジェクト] セクションから1つ以上のオブジェクト (テーブルまたはデータベース) を選択し、アイコンをクリックして [選択済みオブジェクト] セクションにオブジェクトを追加します。
重要同期するオブジェクトとしてデータベースを選択した場合、データベース内のすべてのスキーマ変更が同期先データベースに同期されます。
デフォルトでは、オブジェクトがターゲットインスタンスに同期された後、オブジェクトの名前は変更されません。 オブジェクト名マッピング機能を使用して、ターゲットインスタンスに同期されるオブジェクトの名前を変更できます。 詳細については、「同期するオブジェクトの名前変更」をご参照ください。
データベースとテーブルの名前変更
N/A
オブジェクト名マッピング機能を使用して、ターゲットインスタンスに同期されるオブジェクトの名前を変更できます。 詳細は、オブジェクト名のマッピングをご参照ください。
DMSがDDL操作を実行するときの一時テーブルのレプリケート
N/A
DMSを使用してソースデータベースでオンラインDDL操作を実行する場合、オンラインDDL操作によって生成された一時テーブルを同期するかどうかを指定できます。
Yes: DTSは、オンラインDDL操作によって生成された一時テーブルのデータを同期します。
説明オンラインDDL操作が大量のデータを生成する場合、データ同期タスクが遅延する可能性があります。
No: DTSは、オンラインDDL操作によって生成された一時テーブルのデータを同期しません。 ソースデータベースの元のDDLデータのみが同期されます。
説明[いいえ] を選択すると、ターゲットデータベースのテーブルがロックされる可能性があります。
失敗した接続の再試行時間
N/A
既定では、DTSがソースデータベースまたはターゲットデータベースへの接続に失敗した場合、DTSは次の720分 (12時間) 以内に再試行します。 必要に応じて再試行時間を指定できます。 DTSが指定された時間内にソースデータベースとターゲットデータベースに再接続すると、DTSはデータ同期タスクを再開します。 それ以外の場合、データ同期タスクは失敗します。
説明DTSが接続を再試行すると、DTSインスタンスに対して課金されます。 ビジネスニーズに基づいて再試行時間を指定することを推奨します。 ソースインスタンスとターゲットインスタンスがリリースされた後、できるだけ早くDTSインスタンスをリリースすることもできます。
- ページの右下隅にある [次へ] をクリックします。
- 初期同期タイプを選択します。 重要
- 初期同期中に、DTSは選択したオブジェクトのスキーマとデータをソースクラスターからターゲットクラスターに同期します。 スキーマとデータは、後続の増分同期のベースラインとなります。 初期同期には、初期スキーマ同期と初期完全データ同期が含まれます。 ほとんどの場合、[初期スキーマ同期] と [初期フルデータ同期] の両方を選択する必要があります。
- 選択したすべてのオブジェクトがソースクラスターからターゲットクラスターに同期されている場合、逆方向のデータ同期タスクは増分データのみを同期します。
- ページの右下隅にある [事前チェック] をクリックします。 説明
データ同期タスクを開始する前に、DTSは事前チェックを実行します。 データ同期タスクは、タスクが事前チェックに合格した後にのみ開始できます。
タスクが事前チェックに合格しなかった場合は、失敗した各項目の横にあるアイコンをクリックして詳細を表示できます。
詳細に基づいて問題をトラブルシューティングした後、新しい事前チェックを開始します。
問題をトラブルシューティングする必要がない場合は、失敗した項目を無視して新しい事前チェックを開始してください。
- 次のメッセージが表示されたら、[事前チェック] ダイアログボックスを閉じます。[事前チェックの合格] そして、順方向のデータ同期タスクが開始される。
- データ同期インスタンスを検索し、最初のデータ同期タスクの [操作] 列で [タスクの設定] をクリックします。
- 初期同期が完了し、データ同期タスクが同期状態になるまで待ちます。 データ同期タスクのステータスは、[同期タスク] ページで確認できます。
- データ同期タスクを逆方向に設定します。
- 2つ目のデータ同期タスクを検索し、[操作] 列の [タスクの設定] をクリックします。
- ステップ5で説明したサブステップiiからviiiを繰り返す。