すべてのプロダクト
Search
ドキュメントセンター

Data Transmission Service:データ同期タスクの作成

最終更新日:Mar 19, 2020

このドキュメントでは、DTS コンソールでデータ同期タスクを作成する方法を紹介します。2 つの RDS for MySQL インスタンス間の同期リンク構築を例として手順を使用します。

前提条件

データ同期機能では、インスタンスタイプ、同期アーキテクチャおよびトリガーオブジェクトに、次に示す制限が適用されます。設定を開始する前に、次の制限が満たされていることを確認してください。

インスタンスタイプ

現在、RDS for MySQL インスタンスのリアルタイム同期が利用可能です。

  • ターゲットインスタンスは、標準アクセスモードとインターネットアドレスを使用する RDS インスタンスをサポートしていません。
  • 中国香港のゾーン A の RDS インスタンスは使用できません。

同期アーキテクチャ

リアルタイム同期は、次のタイプの同期アーキテクチャをサポートします。

  • A → B: 2 つのインスタンス間の単方向同期

    1-to-1 Unidirectional architecture

    B 上の同期オブジェクトには、読み取り専用アクセス権のみを付与する必要があります。そうしないと、同期リンク例外が発生する可能性があります。

  • A → B/C/D: 1 対 N の分散同期アーキテクチャ

    1-to-N Distributed architecture

    ターゲット RDS インスタンスの数は、必要に応じて設定できます。ターゲットインスタンスの同期オブジェクトには読み取り専用のアクセス権のみを付与する必要があります。そうしないと、同期リンク例外が発生する可能性があります。

  • B/C/D → A: N 対 1 データ集中アーキテクチャ

    N-to-1 Convergence architecture

    各同期インスタンス上の同期オブジェクトは、重複を避けるため、全て違うものである必要があります。

次のアーキテクチャは利用できません

  • A → B → C: カスケードアーキテクチャ

    Cascade architecture

  • A → B → A: インスタンス A とインスタンス B の間の双方向同期

    Bidirectional architecture

サポートされていないアーキテクチャが同期設定で検出された場合、事前チェックは複雑なトポロジーエラーを返します。

矛盾を引き起こすトリガー

データベース全体を同期する場合、ソースデータベースに、同じデータベース内のテーブルの内容を更新するトリガーが含まれていると、ソースインスタンスとターゲットインスタンスの間にデータの矛盾が発生する可能性があります。

例えば、ソースインスタンスにテーブル A とテーブル B が含まれているとします。テーブル A に行が挿入されると、テーブル A のトリガーがテーブル B に行を挿入します。同期タスクは、ソースインスタンスをターゲットインスタンスに同期させます。ここで、ターゲットのテーブル A およびテーブル B を、それぞれテーブル A’ およびテーブル B’ と呼ぶことにします。

同期中、ターゲットインスタンスは、テーブル A およびテーブル B を含むソースインスタンスからの全データを継続的にレプリケートします。テーブル A に行 (1) が挿入されると、A のトリガーがテーブル B に行 (2) を挿入します。挿入された行 (1) とトリガーによって挿入された行 (2) は、それぞれターゲットインスタンスのテーブル A’ とテーブル B’ に同期されます。挿入された行 (1) がテーブル A’ に反映されると、A’ のトリガーがテーブル B’ に行 (2’) を挿入します。

その結果、ソースのテーブル A への 1 行の挿入 (1) が、ターゲットのテーブル B の 2 つの行挿入 (2 および 2’) をトリガーすることになります。したがって、ソースとターゲットの間のデータには整合性がなくなります。

この問題を回避するには、ターゲットインスタンスのトリガーを削除し、ソースインスタンスからテーブル B を同期させます。

手順

先に進む前に、少なくとも 1 つの同期インスタンスを使用できることを確認してください。あるいは、Data Transmission Service 購入ページで購入します。具体的な手順については、DTS インスタンスの購入を参照してください。

DTS コンソールに同期タスクを作成するには、次の手順に従います。

  1. DTS コンソールにログインし、データ同期ページに入ります。

  2. 設定する同期インスタンスを選び、[操作] リストの [同期インスタンスの設定] をクリックします。

  3. ソースインスタンスとターゲットインスタンスを選択します。パラメーターは次のとおりです。

    • 同期タスク名: 同期タスクの名前を入力します。名前は一意である必要はありません。
    • ソースインスタンス情報: ソースの [インスタンス ID] を選択し、[接続方法] を指定します。
    • ターゲットインスタンス情報: ターゲットの [インスタンス ID] を選択し、[接続方法] を指定します。

    注意:

    • ソースインスタンスとターゲットインスタンスは異なるインスタンスでなければなりません。
    • 接続方法には、[非暗号化接続] および [SSL セキュア接続] があります。セキュア接続は、より多くの CPU リソースを消費します。
  4. 設定後、[ホワイトリストを承認して次のステップに進む] をクリックしてください。

  5. バックエンドプロセスが指定された RDS インスタンスのホワイトリストに DTS サーバーの IP アドレスを追加し、ターゲット RDS インスタンスに同期アカウントを作成するまで待機します。この手順が完了したら、[次へ] をクリックします。

    • RDS インスタンスのホワイトリスト更新により、DTS サーバーにアクセス許可が与えられます。これにより、RDS ホワイトリストの制限による接続エラーを避けることができます。同期中は、RDS インスタンスのホワイトリストからサーバーの IP アドレスを削除しないことをお勧めします。
    • DTS は、ターゲット RDS インスタンスに dtssyncwriter という名前の同期アカウントを自動的に作成します。同期中にこのアカウントを削除しないことをお勧めします。削除した場合、同期タスクが中断する可能性があります。
  6. 同期オブジェクト (データベースまたはテーブル) を選択します。複数のデータベースまたはテーブルを指定できます。

    • データベース全体を指定した場合、データベース内のすべての DDL 文 (create table、drop view など) がターゲットデータベースにレプリケートされます。
    • テーブルを指定した場合、テーブルに対する drop/alter/truncate/rename table と create/drop index 文のみがターゲットデータベースにレプリケートされます。

    注意: テーブルの名前を変更する操作によって、同期後にデータが不整合になる可能性があります。

    たとえば、同期オブジェクトにテーブル A が含まれているが、テーブル B は含まれていないとします。ソースインスタンスが同期中に A から B に名前を変更すると、ソーステーブル B のすべてのデータ変更はターゲットインスタンスにレプリケートされません。このような問題を回避するには、データベース全体の同期化を選択すれば、テーブル A とテーブル B の両方が含まれることになります。

  7. [次へ] をクリックします。

  8. [高度なセットアップ] を実行します。DTS はベースラインデータとしてターゲットインスタンスに同期オブジェクトのレプリカを作成します。

    セットアップには、スキーマ初期化と既存データ初期化の 2 種類があります。通常、両方の初期化タイプが必要です。

  9. [事前チェック] を実行します。DTS は、エラーになる可能性のある事象について、事前定義されたチェックリストを調べます。

  10. [開始] をクリックして同期リンクを開始します。起動後、同期タスクが同期リストに追加されます。

    初期化が完了すると、同期インスタンスのステータスは [同期中] になり、ソースとターゲットのインスタンス間で同期リンクが確立されます。