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