Data Transmission Service (DTS) は、ApsaraDB RDS for MySQL や自己管理型 MySQL など、2 つの MySQL データベース間のリアルタイム双方向データ同期をサポートします。この機能は、アクティブ地理的冗長性やジオディザスタリカバリなど、さまざまなシナリオに適しています。このトピックでは、ApsaraDB RDS for MySQL インスタンスを例に、設定手順を説明します。他のデータソースの手順も同様です。
前提条件
ソースとターゲットの RDS MySQL インスタンスが必要です。まだ存在しない場合は、RDS インスタンスを作成してください。
注意事項
DTS が初期完全データ同期を実行すると、ソースデータベースとターゲットデータベースの読み取りおよび書き込みリソースを消費し、データベースの負荷が増加する可能性があります。データベースのパフォーマンスが低い、仕様が低い、またはサービストラフィックが多い場合、データベースの負荷が大幅に増加することがあります。このような状況の例としては、ソースデータベースに低速な SQL 文やプライマリキーのないテーブルが多い場合や、ターゲットデータベースにデッドロックがある場合などが挙げられます。これにより、データベースサービスが利用できなくなることさえあります。したがって、データを同期する前に、ソースデータベースとターゲットデータベースのパフォーマンスを評価する必要があります。両方のデータベースの CPU 負荷が 30% 未満の場合など、オフピーク時間帯にデータ同期を実行することを推奨します。
データ同期中は、gh-ost や pt-online-schema-change などのツールを使用して、ソースデータベースの同期オブジェクトに対してオンライン DDL 操作を実行しないでください。実行した場合、同期タスクは失敗します。
DTS からのデータ以外にターゲットデータベースに書き込まれるデータがない場合は、Data Management (DMS) を使用してオンライン DDL 操作を実行できます。詳細については、「テーブルをロックせずにテーブルスキーマを変更する」をご参照ください。
ターゲットデータベースが ApsaraDB RDS for MySQL インスタンス (バージョン 5.7 および 8.0 を除く) の場合、DTS はターゲットデータベースに dtssyncwriter という名前のデータ同期アカウントを作成します。このアカウントは書き込み権限を持ち、DTS によってのみ使用されます。
双方向同期インスタンスには、正方向タスクと逆方向タスクが含まれます。双方向同期インスタンスを設定またはリセットする際に、一方のタスクのターゲットオブジェクトがもう一方のタスクの同期対象オブジェクトである場合:
完全データと増分データを同期できるのは一方のタスクのみです。もう一方のタスクは増分データのみを同期できます。
現在のタスクのソースデータは、現在のタスクのターゲットにのみ同期できます。同期されたデータは、もう一方のタスクのソースデータとして使用されません。
課金
| 同期タイプ | タスク設定料金 |
| スキーマ同期と完全データ同期 | 無料。 |
| 増分データ同期 | 有料です。詳細については、「課金の概要」をご参照ください。 |
サポートされる同期トポロジ
DTS は、2 つの MySQL データベース間の双方向同期のみをサポートします。複数の MySQL データベース間の双方向同期はサポートされていません。

サポートされるデータソース
MySQL データベース間の双方向データ同期は、以下のデータソースをサポートします。このトピックでは、ApsaraDB RDS for MySQL インスタンスを例に設定手順を説明しますが、他のデータソースでも手順は同様です。
ソースデータベース | ターゲットデータベース |
|
|
同期でサポートされる SQL 操作
操作タイプ | SQL 文 |
DML | INSERT、UPDATE、DELETE、REPLACE |
DDL |
|
DDL 操作は、ソースデータベースからターゲットデータベースへの正方向タスクでのみ同期できます。DDL 操作は、ターゲットデータベースからソースデータベースへの逆方向タスクではサポートされておらず、自動的に除外されます。
サポートされる競合検出
データの整合性を確保するため、同じプライマリキー、ビジネスプライマリキー、または一意キーを持つレコードが 1 つのノードでのみ更新されるようにしてください。レコードが両方のノードで同時に更新されると、DTS はデータ同期タスクに設定した競合解決ポリシーに基づいて競合を処理します。
DTS は、競合検出と解決を使用して、双方向同期インスタンスの安定性を最大限に高めます。DTS は、次の種類の競合を検出できます。
INSERT 文による一意性競合
INSERT 文が同期される際に一意性制約に違反します。たとえば、同じプライマリキー値を持つレコードが両方のノードに同時に挿入されると、同じプライマリキー値を持つレコードがすでに存在するため、ピアノードで INSERT 文が失敗します。
UPDATE 文のレコードの不一致
UPDATE 文で更新されるレコードがターゲットインスタンスに存在しない場合、DTS は自動的にその文を INSERT 文に変換します。これにより、一意キーの一意性競合が発生する可能性があります。
UPDATE 文で更新されるレコードに、プライマリキーまたは一意キーの競合があります。
削除するレコードが存在しない
DELETE 文で削除するレコードがターゲットインスタンスに存在しません。この種の競合が発生した場合、DTS は設定された競合解決ポリシーに関係なく、DELETE 操作を自動的に無視します。
2 つのデータベース間のシステム時刻の違いや同期遅延などの要因により、DTS の競合検出メカニズムはデータ競合を完全に防ぐことを保証できません。双方向同期を使用する場合、同じプライマリキー、ビジネスプライマリキー、または一意キーを持つレコードが 1 つのノードでのみ更新されるように、アプリケーションロジックを変更する必要があります。
DTS は、前述のデータ同期競合に対する解決ポリシーを提供します。双方向同期を設定する際にポリシーを選択できます。
機能制限
トリガーとの非互換性
同期オブジェクトが、同期されたテーブルのコンテンツを更新するトリガーを含むデータベース全体である場合、データ不整合が発生する可能性があります。たとえば、データベースにテーブル A とテーブル B の 2 つのテーブルが含まれているとします。テーブル A には、テーブル A にデータ行が挿入された後、テーブル B にデータ行を挿入するトリガーがあります。この場合、同期中にソースインスタンスのテーブル A で INSERT 操作が実行されると、テーブル B のデータはソースインスタンスとターゲットインスタンス間で不整合になります。
このような場合は、ターゲットインスタンスで対応するトリガーを削除する必要があります。テーブル B のデータはソースインスタンスから同期されます。詳細については、「ソースデータベースにトリガーが含まれている場合、同期または移行タスクをどのように設定すればよいですか?」をご参照ください。
RENAME TABLE の制限
RENAME TABLE 操作は、データ不整合を引き起こす可能性があります。たとえば、同期オブジェクトが単一のテーブルであり、同期中にソースインスタンスでテーブルの名前を変更すると、そのテーブルのデータはターゲットデータベースに同期されません。この問題を回避するには、テーブルが属するデータベース全体を同期オブジェクトとして選択します。
DDL 同期方向の制限
双方向同期リンクの安定性を確保するため、DDL 更新は一方向でのみ同期できます。つまり、一方向で DDL 同期が設定されている場合、逆方向では DDL 同期はサポートされません。逆方向では DML 同期のみが実行されます。
操作手順
双方向データ同期インスタンスを購入します。詳細については、「データ同期タスクの購入」をご参照ください。
重要インスタンスを購入する際、ソースとターゲットの両方のインスタンスタイプを MySQL に設定し、同期トポロジを 双方向同期 に設定します。
Data Transmission Service コンソールにログインします。
説明Data Management (DMS) コンソールにリダイレクトされた場合は、右下隅の
アイコンをクリックし、次に
アイコンをクリックして、以前のバージョンの DTS コンソールに戻ることができます。左側のナビゲーションウィンドウで、データ同期 をクリックします。
同期タスク ページの上部で、ターゲットインスタンスが存在するリージョンを選択します。
購入したデータ同期インスタンスを見つけ、最初の同期タスクの 同期チャネルの設定 をクリックします。
重要双方向データ同期インスタンスは 2 つの同期タスクで構成されており、それぞれ個別に設定する必要があります。

同期チャネルのソースインスタンスとターゲットインスタンスを設定します。

カテゴリ
設定
説明
N/A
同期タスク名
DTS は同期タスクの名前を自動的に生成します。識別しやすいように、分かりやすい名前を指定してください。名前は一意である必要はありません。
ソースインスタンス情報
インスタンスタイプ
RDS インスタンス を選択します。
インスタンスリージョン
データ同期インスタンスを購入する際に選択したソースインスタンスのリージョンです。このパラメーターは変更できません。
インスタンス ID
データ同期ソースとして使用する RDS インスタンスの ID を選択します。
データベースアカウント
ソース RDS インスタンスのデータベースアカウントを入力します。
重要ソース RDS インスタンスのデータベースタイプが MySQL 5.5 または MySQL 5.6 の場合、データベースアカウント と データベースパスワード の設定項目は利用できません。
データベースパスワード
データベースアカウントに対応するパスワードを入力します。
暗号化
必要に応じて 非暗号化 または SSL 暗号化 を選択します。SSL 暗号化 を選択する場合は、事前に RDS インスタンスで SSL 暗号化を有効にする必要があります。詳細については、「SSL 暗号化の設定」をご参照ください。
重要現在、暗号化 は中国本土および中国 (香港) リージョンでのみ設定できます。
ターゲットインスタンス情報
インスタンスタイプ
RDS インスタンス を選択します。
インスタンスリージョン
データ同期インスタンスを購入する際に選択したターゲットインスタンスのリージョンです。このパラメーターは変更できません。
インスタンス ID
データ同期のターゲットとして使用する RDS インスタンスの ID を選択します。
データベースアカウント
ターゲット RDS インスタンスのデータベースアカウントを入力します。
重要ターゲット RDS インスタンスのデータベースタイプが MySQL 5.5 または MySQL 5.6 の場合、データベースアカウント と データベースパスワード の設定項目は利用できません。
データベースパスワード
データベースアカウントに対応するパスワードを入力します。
暗号化
必要に応じて 非暗号化 または SSL 暗号化 を選択します。SSL 暗号化 を選択する場合は、事前に RDS インスタンスで SSL 暗号化を有効にする必要があります。詳細については、「SSL 暗号化の設定」をご参照ください。
重要現在、暗号化 は中国本土および中国 (香港) リージョンでのみ設定できます。
ページ右下の ホワイトリストの設定と次へ をクリックします。
ソースまたはターゲットデータベースが Alibaba Cloud データベースインスタンス (ApsaraDB RDS for MySQL や ApsaraDB for MongoDB など) の場合、DTS は対応するリージョンの DTS サーバーの CIDR ブロックを Alibaba Cloud データベースインスタンスのホワイトリストに自動的に追加します。ソースまたはターゲットデータベースが ECS インスタンスでホストされている自己管理データベースの場合、DTS は対応するリージョンの DTS サーバーの CIDR ブロックを ECS インスタンスのセキュリティルールに自動的に追加します。また、自己管理データベースが ECS インスタンスからのアクセスを許可していることを確認する必要もあります。データベースが複数の ECS インスタンス上のクラスターにデプロイされている場合は、対応するリージョンの DTS サーバーの CIDR ブロックを各 ECS インスタンスのセキュリティルールに手動で追加する必要があります。ソースまたはターゲットデータベースがオンプレミスのデータセンターにある自己管理データベース、または他のクラウドプロバイダーのデータベースである場合は、DTS サーバーからのアクセスを許可するために、対応するリージョンの DTS サーバーの CIDR ブロックを手動で追加する必要があります。DTS サーバーの CIDR ブロックについては、「DTS サーバーの CIDR ブロック」をご参照ください。
警告DTS サービスのパブリック IP アドレスブロックを自動または手動で追加すると、セキュリティリスクが生じる可能性があります。この製品を使用することにより、潜在的なセキュリティリスクを理解し、受け入れること、および基本的なセキュリティ対策を講じる必要があることを承認したものとみなされます。これらの対策には、パスワードセキュリティの強化、各 CIDR ブロックに開かれているポートの制限、内部 API 呼び出しでの認証の使用、不要な CIDR ブロックの定期的な確認と制限などが含まれますが、これらに限定されません。または、専用線、VPN Gateway、または Smart Access Gateway を使用してプライベートネットワーク経由で接続することもできます。
同期ポリシーとオブジェクトを設定します。

カテゴリ
設定
説明
同期ポリシーの設定
DDL 文を除外
はい を選択して、DDL 操作を同期しないようにします。
DDL 操作を同期するには、[いいえ] を選択します。
重要DDL 構文の同期方向には制限があります。双方向同期リンクの安定性を確保するため、DDL 同期は正方向でのみサポートされ、逆方向ではサポートされません。
同期する DML 文
同期する DML タイプを選択します。デフォルトでは、挿入、更新、削除 が選択されています。必要に応じて選択を調整できます。
競合解決ポリシー
同期の競合に対する解決ポリシーを選択します。デフォルト値は [TaskFailed] です。必要に応じて適切なポリシーを選択できます。
タスク失敗 (競合が発生した場合、タスクはエラーを報告して終了します)
これはデフォルトの競合解決ポリシーです。データ同期タスクが前述の競合タイプのいずれかに遭遇すると、タスクはエラーを報告して終了します。タスクは失敗状態になり、ユーザーの介入が必要です。
無視 (競合が発生した場合、ターゲットインスタンスの競合レコードを使用します)
データ同期タスクが前述の競合タイプのいずれかに遭遇すると、現在の同期文をスキップして次に進みます。ターゲットデータベースの競合レコードが使用されます。
上書き (競合が発生した場合、ターゲットインスタンスの競合レコードを上書きします)
データ同期タスクが前述の競合タイプのいずれかに遭遇すると、ターゲットデータベースの競合レコードを上書きします。
同期するオブジェクトの選択
N/A
利用可能 ボックスで、同期したいオブジェクト (データベースまたはテーブルレベル) をクリックし、
アイコンをクリックして 選択済み ボックスに移動します。重要データベース全体を同期オブジェクトとして選択した場合、そのデータベース内のオブジェクトに対するすべてのスキーマ変更がターゲットデータベースに同期されます。
デフォルトでは、同期オブジェクトの名前は変更されません。ターゲットデータベースで同期オブジェクトの名前を変更するには、オブジェクト名マッピング機能を使用します。詳細については、「同期オブジェクトの名前をターゲットインスタンスの新しい名前にマッピングする」をご参照ください。
データベースとテーブルの名前変更
N/A
オブジェクト名マッピング機能を使用して、ターゲットインスタンスに同期されるオブジェクトの名前を変更できます。詳細については、「オブジェクト名マッピング」をご参照ください。
ソーステーブル DMS_ ONLINE_ DDL 中に一時テーブルをターゲットデータベースにコピーしますか
N/A
DMS を使用してソースデータベースでオンライン DDL 操作を実行する場合、オンライン DDL 操作によって生成された一時テーブルを同期するかどうかを指定できます。
はい:DTS は、オンライン DDL 操作によって生成された一時テーブルのデータを同期します。
説明オンライン DDL 操作で大量のデータが生成されると、データ同期タスクが遅延する可能性があります。
いいえ:DTS は、オンライン DDL 操作によって生成された一時テーブルのデータを同期しません。ソースデータベースの元の DDL データのみが同期されます。
説明「いいえ」を選択すると、ターゲットデータベースのテーブルがロックされる可能性があります。
接続失敗時のリトライ時間
N/A
デフォルトでは、DTS がソースまたはターゲットデータベースへの接続に失敗した場合、DTS は次の 720 分 (12 時間) 以内にリトライします。必要に応じてリトライ時間を指定できます。指定された時間内に DTS がソースおよびターゲットデータベースに再接続した場合、DTS はデータ同期タスクを再開します。それ以外の場合、データ同期タスクは失敗します。
説明DTS が接続をリトライしている間、DTS インスタンスの料金が発生します。ビジネスニーズに基づいてリトライ時間を指定することを推奨します。また、ソースおよびターゲットインスタンスがリリースされた後、できるだけ早く DTS インスタンスをリリースすることもできます。
上記の設定が完了したら、ページ右下の 次へ をクリックします。
初期同期の高度な設定を行います。

このステップでは、ソースインスタンスの同期オブジェクトのスキーマとデータがターゲットインスタンスで初期化されます。これは、後続の増分データ同期のベースラインデータとして機能します。初期同期には、初期スキーマ同期 と 初期完全データ同期 が含まれます。デフォルトでは、初期スキーマ同期 と 初期完全データ同期 が選択されています。
重要逆方向でも同期オブジェクトであるテーブルは初期化されません。
上記の設定が完了したら、ページ右下の 事前チェック をクリックします。
重要データ同期タスクが開始される前に、事前チェックが実行されます。タスクは、すべてのチェック項目に合格した後にのみ開始できます。
事前チェックが失敗した場合は、失敗したチェック項目の横にある
アイコンをクリックして詳細を表示します。原因に基づいて問題を修正し、事前チェックを再実行できます。
アラートを無視したい場合は、シールドの確認 をクリックし、次に アラームを無視して再チェック をクリックして、アラート項目をスキップし、事前チェックを再実行します。
事前チェック ダイアログボックスに 事前チェックに合格しました と表示されたら、事前チェック ダイアログボックスを閉じて同期タスクを開始します。
同期タスクが初期化されるのを待ちます。タスクのステータスが 同期中 に変わると、初期化は完了です。
同期タスク ページでデータ同期のステータスを表示できます。
2 番目の同期タスクを見つけ、タスクの設定 をクリックします。ステップ 5 からステップ 12 を繰り返してタスクを設定します。

2 番目の同期タスクが設定された後、両方の同期タスクのステータスが 同期中 に変わるまで待ちます。これで双方向データ同期の設定は完了です。
