Data Transmission Service (DTS) は、MySQL データベース間の双方向データ同期をサポートしています。このトピックでは、ApsaraDB RDS for MySQL インスタンス間の双方向データ同期を設定する手順を例として説明します。
前提条件
ソースとターゲットには、同じストレージ容量の ApsaraDB RDS for MySQL インスタンスを使用することを推奨します。
制限事項
スキーマ同期中、DTS は外部キーをソースデータベースからターゲットデータベースに同期します。
完全データ同期と増分データ同期中、DTS はセッションレベルで外部キーの制約チェックとカスケード操作を一時的に無効にします。同期中にソースデータベースでカスケード更新または削除が発生した場合、データ不整合が発生する可能性があります。
タイプ | 説明 |
ソースおよびターゲットデータベースの制限事項 |
|
その他の制限事項 |
|
特殊なケース |
|
課金
同期タイプ | 料金 |
スキーマ同期と完全データ同期 | 無料。 |
増分データ同期 | 有料です。詳細については、「課金の概要」をご参照ください。 |
競合検出
データ整合性を確保するために、双方向同期において、同じ主キー、ビジネス主キー、または一意キーを持つデータレコードがデータベースインスタンスのいずれか 1 つでのみ更新されるようにしてください。データレコードが両方のデータベースインスタンスで更新された場合、DTS システムはタスクで設定された競合解決ポリシーを適用します。
DTS は、双方向同期タスクの安定性を最大限に高めるために、競合をチェックして修正します。DTS は、次の種類の競合を検出できます:
INSERT 操作による一意性競合
双方向同期では、同じ主キーを持つレコードが両方のデータベースインスタンスに同時に (またはほぼ同時に) 挿入されると、一意性制約の競合がトリガーされます。INSERT 文がピアインスタンスに同期されると、同じ主キー値を持つレコードがすでに存在するため、失敗します。
UPDATE 操作でのレコードの不一致
更新するレコードが宛先インスタンスに存在しない場合、DTS は UPDATE 操作を INSERT 操作に変換します。ただし、一意性競合が発生する可能性があります。
UPDATE 操作によって更新されるレコードが、主キーまたは一意キーの競合を引き起こします。
削除対象のレコードが存在しない
削除するレコードが宛先インスタンスに存在しません。この場合、DTS は指定した競合解決ポリシーに関係なく、DELETE 操作を無視します。
時間差や遅延のため、DTS は 100% の競合防止を保証できません。整合性を確保するために、同じ主キーまたは一意キーを持つレコードは、一度に 1 つのデータベースインスタンスでのみ更新してください。
DTS は、前述のデータ競合に対してさまざまな競合解決戦略を提供しており、双方向データ同期を設定する際に選択できます。
サポートされる SQL
操作タイプ | SQL 文 |
DML | INSERT、UPDATE、DELETE |
DDL |
|
DDL 操作は、ソースデータベースからターゲットデータベースへの正方向タスクでのみ同期できます。DDL 操作は、ターゲットデータベースからソースデータベースへの逆方向タスクではサポートされておらず、自動的に除外されます。
データベースアカウントの権限
データベース | 必要な権限 | 作成と権限付与 |
ソース ApsaraDB RDS for MySQL | ソースおよびターゲットデータベースに対する読み取りおよび書き込み権限。ApsaraDB RDS for MySQL インスタンスの特権アカウントは要件を満たしています。 | アカウントの作成 および 特権アカウントの権限のリセット。 |
ターゲット ApsaraDB RDS for MySQL |
操作手順
ターゲットリージョンのデータ同期タスクリストページに移動します。これには 2 つの方法があります。
DTS コンソール
DTS コンソールにログインします。
左側のナビゲーションウィンドウで、データ同期 をクリックします。
ページの左上隅で、同期インスタンスが配置されているリージョンを選択します。
DMS コンソール
説明実際の手順は、DMS コンソールのモードとレイアウトによって異なる場合があります。詳細については、「シンプルモードコンソール」および「DMS コンソールのレイアウトとスタイルをカスタマイズする」をご参照ください。
DMS コンソールにログインします。
トップメニューバーで、 を選択します。
データ同期タスク の右側で、同期インスタンスのリージョンを選択します。
タスクの作成 をクリックして、タスク設定ページを開きます。
ソースデータベースとターゲットデータベースを設定します。
警告ソースインスタンスと宛先インスタンスを選択した後、ページ上部の 制限事項 を確認してください。そうしないと、タスクが失敗したり、データ不整合が発生したりする可能性があります。
カテゴリ
パラメーター
説明
N/A
タスク名
DTS は自動的にタスク名を生成します。識別しやすいように、わかりやすい名前を指定することを推奨します。名前は一意である必要はありません。
移行元データベース
既存の接続情報の選択
ドロップダウンリストから DTS に登録されたデータベースインスタンス を選択します。以下のデータベース情報は自動的に設定されます。
説明DMS コンソールでは、この設定項目は DMS データベースインスタンスの選択 です。
データベースインスタンスを登録していない場合、または登録済みのインスタンスを使用する必要がない場合は、以下のデータベース情報を手動で設定します。
データベースタイプ
MySQL を選択します。
アクセス方法
Alibaba Cloud インスタンス を選択します。
インスタンスリージョン
ソース RDS MySQL インスタンスが存在するリージョンを選択します。
Alibaba Cloud アカウント間でデータを複製
この例では、データベースインスタンスが現在の Alibaba Cloud アカウントに属しているため、× を選択します。
RDS インスタンス ID
ソース RDS MySQL インスタンスの ID を選択します。
説明ソースとターゲットの RDS MySQL インスタンスは同じでも異なっていてもかまいません。DTS を使用して、2 つの RDS MySQL インスタンス間、または同じ RDS MySQL インスタンス内でデータを移行できます。
データベースアカウント
ソース RDS MySQL インスタンスの特権アカウントを入力します。
データベースパスワード
指定したデータベースアカウントのパスワードを入力します。
暗号化
必要に応じて 非暗号化 または SSL 暗号化 を選択します。これを SSL 暗号化 に設定する場合は、事前に RDS for MySQL インスタンスで SSL 暗号化を有効にする必要があります。詳細については、「クラウド証明書を使用して SSL リンク暗号化を迅速に有効にする」をご参照ください。
移行先データベース
既存の接続情報の選択
ドロップダウンリストから DTS に登録されたデータベースインスタンス を選択します。以下のデータベース情報は自動的に設定されます。
説明DMS コンソールでは、この設定項目は DMS データベースインスタンスの選択 です。
データベースインスタンスを登録していない場合、または登録済みのインスタンスを使用する必要がない場合は、以下のデータベース情報を手動で設定します。
データベースタイプ
MySQL を選択します。
アクセス方法
Alibaba Cloud インスタンス を選択します。
インスタンスリージョン
ターゲット RDS MySQL インスタンスが存在するリージョンを選択します。
Alibaba Cloud アカウント間でデータを複製
この例では、データベースインスタンスが現在の Alibaba Cloud アカウントに属しているため、× を選択します。
RDS インスタンス ID
ターゲット RDS MySQL インスタンスの ID を選択します。
データベースアカウント
ターゲット RDS MySQL インスタンスの特権アカウントを入力します。
データベースパスワード
指定したデータベースアカウントのパスワードを入力します。
暗号化
必要に応じて 非暗号化 または SSL 暗号化 を選択します。これを SSL 暗号化 に設定する場合は、事前に RDS for MySQL インスタンスで SSL 暗号化を有効にする必要があります。詳細については、「クラウド証明書を使用して SSL リンク暗号化を迅速に有効にする」をご参照ください。
設定が完了したら、ページ下部の 接続をテストして続行 をクリックします。
説明アクセスを許可するために、DTS サーバーの CIDR ブロックを (自動または手動で) ソースとターゲットの両方のデータベースのセキュリティ設定に追加してください。詳細については、「DTS サーバーの IP アドレスホワイトリストを追加する」をご参照ください。
ソースまたはターゲットが自己管理データベースである場合 (つまり、アクセス方法 が Alibaba Cloud インスタンス ではない場合)、DTS サーバーの CIDR ブロック ダイアログボックスで 接続テスト をクリックする必要もあります。
タスクオブジェクトを設定します。
オブジェクト設定 ページで、同期するオブジェクトを指定します。
パラメーター
説明
同期タイプ
DTS は常に 増分データ同期 を選択します。デフォルトでは、スキーマ同期 と 完全データ同期 も選択する必要があります。事前チェック後、DTS は選択したソースオブジェクトの完全データでターゲットクラスターを初期化し、これが後続の増分同期のベースラインとして機能します。
移行元データベースのトリガーを移行する方法
必要に応じてトリガーを同期する方法を選択します。同期しているオブジェクトにトリガーが含まれていない場合、このパラメーターを設定する必要はありません。詳細については、「トリガーの同期または移行方法の設定」をご参照ください。
説明このパラメーターは、同期タイプ で スキーマ同期 が選択されている場合にのみ使用できます。
移行評価の有効化
ソースデータベースとターゲットデータベースのスキーマ (インデックス長、ストアドプロシージャ、依存テーブルなど) が要件を満たしているかどうかを評価するかどうかを指定します。
説明このパラメーターは、同期タイプ で スキーマ同期 が選択されている場合にのみ使用できます。
○ を選択すると、事前チェック時間が増加する可能性があります。事前チェックフェーズ中に 評価結果 を表示できます。評価結果は事前チェック結果に影響しません。
同期トポロジ
双方向同期 を選択します。
[Exactly-Once] を有効化し書き込みを実行するかどうか
同期するオブジェクトに主キーまたは UNIQUE 制約のないテーブルが含まれている場合は、○ を選択します。詳細については、「主キーまたは UNIQUE 制約のないテーブルの同期」をご参照ください。
DDL 操作を除外
○:DDL 操作を同期から除外します。
×:DDL 操作を同期します。
重要双方向同期リンクの安定性を確保するために、ソースデータベースからターゲットデータベースへの正方向タスクに対して DDL 操作を同期するかどうかのみを選択できます。ターゲットデータベースからソースデータベースへの逆方向タスクは、DDL 操作を自動的に除外します。
グローバルな競合修復ポリシー
前述の 競合タイプ に遭遇した場合は、必要に応じて競合解決ポリシーを選択します。
TaskFailed (競合時に失敗してエラーを報告)
競合が発生すると、タスクはエラーを出して停止します。タスクは失敗状態になり、回復には手動での介入が必要です。
Ignore (宛先インスタンスの既存のレコードを保持)
システムは競合する文をスキップして同期を続行します。宛先インスタンスの既存のレコードが保持されます。
Overwrite (宛先インスタンスの競合するレコードを上書き)
競合が発生した場合、システムは宛先インスタンスの競合するレコードをソースからのデータで上書きします。
説明同期タスクが一時停止または再起動され、遅延が発生した場合、遅延期間中は競合解決ポリシーは有効になりません。デフォルトでは、宛先インスタンスのデータは上書きされます。
競合するテーブルの処理モード
エラーの事前チェックと報告:ターゲットデータベースに同じ名前のテーブルがあるかどうかをチェックします。同じ名前のテーブルが見つかった場合、事前チェック中にエラーが報告され、データ同期タスクは開始されません。それ以外の場合、事前チェックは成功します。
説明ターゲットデータベースで同じ名前のテーブルを削除または名前変更できない場合は、ターゲットで別の名前にマッピングできます。詳細については、「オブジェクト名のマッピング」をご参照ください。
エラーを無視して続行:ターゲットデータベースで同じ名前のテーブルのチェックをスキップします。
警告エラーを無視して続行 を選択すると、データ不整合が発生し、ビジネスにリスクをもたらす可能性があります。例:
テーブルスキーマが一致し、ターゲットデータベースのレコードがソースデータベースのレコードと同じ主キーまたは一意キーの値を持つ場合:
完全データ同期中、DTS はターゲットレコードを保持し、ソースレコードをスキップします。
増分同期中、DTS はターゲットレコードをソースレコードで上書きします。
テーブルスキーマが一致しない場合、データ初期化が失敗する可能性があります。これにより、部分的なデータ同期のみ、または完全な同期失敗が発生する可能性があります。注意して使用してください。
イベントを移行するかどうか
ソースデータベースのイベントを同期するかどうかを指定します。ビジネス要件に基づいてこのパラメーターを設定できます。はい を選択した場合は、関連する要件を満たし、後続の操作を完了する必要があります。詳細については、「イベントの同期または移行」をご参照ください。
移行先インスタンスでのオブジェクト名の大文字化
宛先インスタンスのデータベース、テーブル、および列名の大文字と小文字の区別ポリシーを設定します。デフォルトでは、DTS のデフォルトポリシー が選択されています。ソースまたはターゲットデータベースのデフォルトポリシーを使用することも選択できます。詳細については、「宛先オブジェクト名の大文字/小文字ポリシー」をご参照ください。
ソースオブジェクト
ソースオブジェクト ボックスでオブジェクトをクリックし、
をクリックして 選択中のオブジェクト ボックスに移動します。説明データベース、テーブル、または列レベルでオブジェクトを選択できます。テーブルまたは列のみを選択した場合、DTS は他のオブジェクトタイプ (ビュー、トリガー、ストアドプロシージャなど) を同期しません。
選択中のオブジェクト
宛先インスタンスで単一のオブジェクトの名前を変更するには、選択中のオブジェクト ボックスでオブジェクトを右クリックします。詳細については、「単一のオブジェクト名のマッピング」をご参照ください。
複数のオブジェクトをまとめて名前変更するには、選択中のオブジェクト ボックスの右上隅にある 一括編集 をクリックします。詳細については、「複数のオブジェクト名を一括でマッピングする」をご参照ください。
説明SQL 操作:選択中のオブジェクト でオブジェクトを右クリックして SQL 操作を選択します。
データフィルター:選択中のオブジェクト でテーブルを右クリックして WHERE 条件を設定します。このパラメーターの設定方法の詳細については、「フィルター条件の設定」をご参照ください。
オブジェクト名マッピング機能を使用すると、マッピングされたオブジェクトに依存する他のオブジェクトが同期に失敗する可能性があります。
増分同期のための 個別の競合修復ポリシー を設定するには、「独立した競合解決ポリシーの設定」をご参照ください。
詳細設定へ をクリックします。
パラメーター
説明
タスクのスケジュールに使用する専用クラスターの選択
デフォルトでは、DTS はタスクに共有クラスターを使用するため、選択する必要はありません。タスクの安定性を高めるために、DTS 同期タスクを実行するための専用クラスターを購入できます。詳細については、「DTS 専用クラスターとは」をご参照ください。
移行元テーブルで生成された Online DDL ツールの一時テーブルを移行先データベースにコピーします。
ソースデータベースが Data Management (DMS) または gh-ost をオンライン DDL 変更に使用している場合、これらの操作中に生成される一時テーブルを同期するかどうかを選択します。
重要DTS タスクは現在、pt-online-schema-change などのツールによって実行されるオンライン DDL 変更をサポートしていません。このようなツールを使用すると、DTS タスクは失敗します。
○:オンライン DDL 変更によって生成された一時テーブルを同期します。
説明オンライン DDL 変更によって生成された一時テーブルのデータが大きすぎると、同期遅延が発生する可能性があります。
いいえ、DMS オンライン DDL に適応:オンライン DDL 変更によって生成された一時テーブルを同期しません。代わりに、Data Management (DMS) で実行された元の DDL 文のみを同期します。
説明このアプローチは、ターゲットデータベースでテーブルロックを引き起こします。
いいえ、gh-ost に適応:オンライン DDL 変更によって生成された一時テーブルを同期しません。代わりに、gh-ost によって実行された元の DDL 文のみを同期します。gh-ost のシャドウテーブルとトラッシュテーブルには、デフォルトまたはカスタムの正規表現を使用できます。
説明このアプローチは、ターゲットデータベースでテーブルロックを引き起こします。
アカウントを移行
ソースデータベースからアカウントを同期するかどうかを選択します。○ を選択した場合は、同期するアカウントを選択し、その権限を確認する必要もあります。権限付与方法などのトピックの詳細については、「データベースアカウントの移行」をご参照ください。
失敗した接続の再試行時間
同期タスク開始後にソースまたはターゲットデータベースへの接続が失敗した場合、DTS はエラーを報告し、直ちに接続のリトライを開始します。デフォルトのリトライ期間は 720 分です。リトライ時間は 10 分から 1,440 分の範囲でカスタマイズできます。30 分以上の期間を推奨します。この期間内に接続が回復した場合、タスクは自動的に再開されます。それ以外の場合、タスクは失敗します。
説明複数の DTS インスタンス (例:インスタンス A と B) がソースまたはターゲットを共有している場合、DTS はすべてのインスタンスに対して設定された最も短いリトライ期間 (例:A は 30 分、B は 60 分なので、30 分が使用される) を使用します。
DTS は接続リトライ中のタスク実行時間に対して課金します。ビジネスニーズに基づいてカスタム期間を設定するか、ソース/ターゲットインスタンスをリリースした直後に DTS インスタンスを速やかにリリースしてください。
移行元データベースと移行先データベースで他の問題が発生した場合の、再試行までの待機時間です。
接続以外の問題 (DDL または DML 実行エラーなど) が発生した場合、DTS はエラーを報告し、直ちに操作をリトライします。デフォルトのリトライ期間は 10 分です。リトライ時間は 1 分から 1,440 分の範囲でカスタマイズすることもできます。10 分以上の期間を推奨します。設定されたリトライ時間内に関連操作が成功した場合、同期タスクは自動的に再開されます。それ以外の場合、タスクは失敗します。
重要移行元データベースと移行先データベースで他の問題が発生した場合の、再試行までの待機時間です。 の値は、失敗した接続の再試行時間 の値より小さくする必要があります。
完全同期レートを制限するかどうか
完全データ同期中、DTS はソースおよびターゲットデータベースの読み取りおよび書き込みリソースを消費し、負荷を増加させる可能性があります。ターゲットデータベースへの圧力を軽減するために、1 秒あたりのソースデータベースのクエリ率 QPS、1 秒あたりの完全移行の行数 RPS、および 1 秒あたりの完全移行データ量 (MB) BPS を設定することで、移行レートを制限できます。
説明このパラメーターは、同期タイプ が 完全データ同期 に設定されている場合にのみ使用できます。
同期インスタンスの実行中に 完全データ同期のレートを調整する こともできます。
増分同期率を制限するかどうか
1 秒あたりの増分同期の行数 RPS と 1 秒あたりの増分同期データ量 (MB) BPS を設定することで、増分同期レートを制限してターゲットデータベースへの圧力を軽減することもできます。
環境タグ
インスタンスを識別するために環境タグを選択できます。この例では、タグは選択されていません。
順方向および逆方向タスクのハートビートテーブル SQL を削除
インスタンスの実行中に DTS がハートビート SQL 情報をソースデータベースに書き込むかどうかを選択します。
○:ハートビート SQL 情報をソースデータベースに書き込みません。DTS インスタンスに遅延が表示される場合があります。
×:ハートビート SQL 情報をソースデータベースに書き込みます。これは、物理バックアップやクローニングなどのソースデータベース操作に干渉する可能性があります。
ETL 機能の設定
抽出・変換・書き出し (ETL) 機能を有効にするかどうかを選択します。詳細については、「ETL とは」をご参照ください。有効な値:
○:ETL 機能を有効にします。コードエディタにデータ処理文を入力します。詳細については、「データ移行またはデータ同期タスクで ETL を設定する」をご参照ください。
×:ETL 機能を無効にします。
監視アラート
アラートを設定するかどうかを選択します。同期が失敗した場合、または遅延が指定されたしきい値を超えた場合、DTS はアラート連絡先に通知を送信します。
×:アラートが設定されていません。
○:アラートを設定します。アラートのしきい値と アラート通知 も設定する必要があります。詳細については、「タスク設定中のモニタリングとアラートの設定」をご参照ください。
データ検証 をクリックして、データ検証タスクを設定します。
データ検証機能を使用するには、「データ検証の設定」をご参照ください。
タスクを保存し、事前チェックを実行します。
API 操作を介してこのインスタンスを設定するためのパラメーターを表示するには、次:タスク設定の保存と事前チェック ボタンにカーソルを合わせ、ツールチップの OpenAPI パラメーターのプレビュー をクリックします。
API パラメーターの表示が完了したら、ページ下部の 次:タスク設定の保存と事前チェック をクリックします。
説明同期タスクが開始される前に、DTS は事前チェックを実行します。事前チェックに合格した場合にのみタスクを開始できます。
事前チェックが失敗した場合は、失敗した項目の横にある 詳細を表示 をクリックし、プロンプトに従って問題を修正してから、事前チェックを再実行します。
事前チェックで警告が生成された場合:
無視できない警告については、項目の横にある 詳細を表示 をクリックし、プロンプトに従って問題を修正してから、事前チェックを再実行します。
無視できる警告については、アラートの詳細を確認、次に 無視、そして OK をクリックしてバイパスできます。最後に、再度事前チェックを実行 をクリックして警告をスキップし、事前チェックを再実行します。事前チェックの警告を無視すると、データ不整合やその他のビジネスリスクにつながる可能性があります。注意して進めてください。
インスタンスを購入します。
成功率 が 100% に達したら、次:インスタンスの購入 をクリックします。
購入 ページで、データ同期インスタンスの課金方法と仕様を選択します。詳細については、次の表をご参照ください。
カテゴリ
パラメーター
説明
新しいインスタンスクラス
課金方法
サブスクリプション:インスタンス作成時にお支払いいただきます。長期的なニーズに適しており、従量課金よりも手頃で、サブスクリプション期間が長いほど割引率が高くなります。
従量課金:時間単位で課金されます。短期的なニーズに適しています。使用後すぐにインスタンスをリリースしてコストを節約できます。
リソースグループの設定
インスタンスが属するリソースグループ。デフォルトは デフォルトリソースグループ です。詳細については、「Resource Management とは」をご参照ください。
リンク仕様
DTS は、異なるパフォーマンスレベルの同期仕様を提供します。リンク仕様は同期レートに影響します。ビジネスシナリオに基づいて選択できます。詳細については、「データ同期リンク仕様」をご参照ください。
同期トポロジ
双方向同期 に固定されています。
サブスクリプション期間
サブスクリプションモードでは、サブスクリプションインスタンスの期間と数量を選択します。月次サブスクリプションでは 1〜9 か月、年次サブスクリプションでは 1、2、3、または 5 年から選択できます。
説明このオプションは、課金方法が サブスクリプション の場合にのみ表示されます。
Data Transmission Service (従量課金) 利用規約 のチェックボックスを読んで選択します。
購入して起動 をクリックし、OK ダイアログボックスで OK をクリックします。
データ同期ページでタスクの進捗を監視できます。
逆方向同期タスクを設定します。
正方向同期タスクの初期同期が完了するのを待ちます。タスクの ステータス が 実行中 に変わります。
逆方向同期タスクを見つけて、タスクの設定 をクリックします。
ステップ 3 から ステップ 6 に従って逆方向同期タスクを設定します。
重要逆方向同期では、正方向タスクで使用したソースインスタンスと宛先インスタンスを入れ替えます。データベース名、アカウント、パスワードなど、すべての詳細が検証され、正しいことを確認してください。
逆方向同期タスクのソースおよびターゲットデータベースの インスタンスのリージョン は変更できません。正方向同期タスクよりも必要なパラメーターは少なくなります。実際の設定オプションについては、コンソールをご参照ください。
逆方向同期タスクの 競合するテーブルの処理モード 設定は、正方向同期タスクによって宛先インスタンスに同期されたテーブルをチェックしません。
逆方向同期タスクは、正方向同期タスクの 選択中のオブジェクト リスト内のオブジェクトの同期をサポートしていません。
逆方向タスクを設定する際には、マッピング機能を使用しないことを推奨します。そうしないと、データ不整合が発生する可能性があります。
成功率 が 100% になったら、戻る をクリックします。
逆方向同期タスクが設定された後、両方の同期タスクの ステータス が 実行中 になるのを待ちます。双方向データ同期の設定は完了です。