Data Transmission Service (DTS) を使用して、ApsaraDB RDS for MySQL インスタンスから PolarDB-X 1.0 インスタンスへデータを継続的に同期します。これには、完全データ同期と増分データ同期 (INSERT、UPDATE、DELETE) の両方が含まれます。
タスクの概要: 同期タスクを設定するには、次の手順を順番に実行します。
-
宛先インスタンスとアカウントの準備 (前提条件)
-
ソースでのバイナリロギングの設定
-
DTS または DMS での同期タスクの作成
-
事前チェックの実行とインスタンスの購入
前提条件
作業を開始する前に、次の条件を満たしていることを確認してください。
-
移行先の PolarDB-X 1.0 インスタンスには、移行元の RDS MySQL インスタンスが使用するストレージ容量を超える空き容量が必要です。インスタンスの作成時に、ストレージクラスを RDS MySQL に設定します。詳細については、「PolarDB-X 1.0 インスタンスの作成」をご参照ください。
-
移行先の PolarDB-X 1.0 インスタンスにデータベースとテーブルを事前に作成しておく必要があります。スキーマ同期はサポートされておらず、DTS はターゲットスキーマを自動作成しません。作成方法については、「データベースの作成」および「基本的な SQL 操作の実行」をご参照ください。
-
ソース文字セットは [utf8mb3] 以外である必要があります。 増分同期に utf8mb3 データを選択すると、タスクが失敗するためです。
-
必要な権限を持つデータベースアカウントがあること。詳細については、「データベースアカウントに必要な権限」をご参照ください。
-
ソースデータベースにバイナリロギングが設定されていること。詳細については、「バイナリロギングの要件」をご参照ください。
バイナリロギングの要件
Data Transmission Service (DTS) はバイナリログを使用して増分変更をキャプチャします。要件は、ソースが ApsaraDB RDS for MySQL インスタンスか、セルフマネージド MySQL データベースかによって異なります。
ApsaraDB RDS for MySQL
ApsaraDB RDS for MySQL インスタンスでは、バイナリロギングがデフォルトで有効になっています。次のことを確認してください:
-
binlog_row_imageパラメータがfullに設定されていること。設定されていない場合、事前チェックエラーが発生し、タスクを開始できません。詳細については、「インスタンスパラメータの設定」をご参照ください。 -
ローカルバイナリログが少なくとも 3 日間 (7 日間を推奨) 保持されること。DTS がログを読み取る前にログがパージされると、タスクは失敗します。極端な場合、データの損失や不整合が発生する可能性があります。ログ保持期間が不十分なために失敗したタスクは、DTS のサービスレベルアグリーメント (SLA) の対象外です。ローカルバイナリログの[保持期間]を設定するには、「ローカルログの自動削除」をご参照ください。
ApsaraDB RDS for MySQL 5.6 の読み取り専用インスタンスはトランザクションログを記録しないため、ソースデータベースとして使用することはできません。
セルフマネージド MySQL
セルフマネージド MySQL データベースの場合は、次のパラメータを設定します:
|
パラメータ |
必須値 |
|
|
|
|
|
|
バイナリログを少なくとも 7 日間保持してください。DTS がログを読み取る前にログがパージされるとタスクは失敗し、ログ保持期間の不足に起因する問題は DTS の SLA の対象外となります。
追加要件:
-
プライマリ/プライマリ アーキテクチャ:
log_slave_updatesパラメータを有効にして、DTS が両方のノードからすべてのバイナリログを取得できるようにしてください。詳細については、「セルフマネージド MySQL データベースのアカウント作成とバイナリロギングの設定」をご参照ください。 -
Amazon Aurora MySQL またはクラスターモードインスタンス:タスクに設定されたドメイン名または IP アドレスが、常に読み取り/書き込み (RW) ノードを指すようにしてください。そうしないと、タスクが正常に実行されない場合があります。
データベースアカウントに必要な権限
|
データベース |
必要な権限 |
作成と権限付与の方法 |
|
ソース ApsaraDB RDS for MySQL |
読み取り |
|
|
ターゲット PolarDB-X 1.0 |
読み取りと書き込み |
ソースデータベースアカウントが ApsaraDB RDS for MySQL コンソールで作成されていない場合は、アカウントに REPLICATION CLIENT、REPLICATION SLAVE、SHOW VIEW、および SELECT 権限が付与されていることを確認してください。
課金
|
同期タイプ |
課金 |
|
全量データ同期 |
無料 |
|
増分データ同期 |
有料です。課金概要をご参照ください。 |
制限と注意事項
ソースデータベースの制限
-
ソースデータベースがデプロイされているサーバーには、十分なアウトバウンド帯域幅が必要です。帯域幅が不足すると、同期速度が低下します。
-
同期するテーブルには、プライマリキーまたは一意のフィールド値を持つ一意制約が必要です。これらの制約がないテーブルでは、宛先でデータが重複する可能性があります。
-
同期オブジェクトとして選択できるのはテーブルのみです。
-
オブジェクト名マッピング (テーブル名やカラム名のマッピングなど) を使用する場合、1 つのタスクでサポートされるテーブルは最大 1,000 です。オブジェクト名マッピングを使用して 1,000 を超えるテーブルを同期するには、複数のタスクに分割してください。
-
PolarDB-X 1.0 インスタンスのストレージクラスは、RDS MySQL (プライベートカスタム RDS) である必要があります。PolarDB MySQL はサポートされていません。
-
全量データ同期中に DDL 操作を実行しないでください。タスクが失敗します。
全量同期フェーズ中、DTS はソースデータベースにクエリを実行し、メタデータロックを生成することがあります。これにより、ソースデータベースでの DDL 操作がブロックされる可能性があります。
-
バイナリログに記録されない操作によるデータ変更は同期されません。これには、物理バックアップを使用したデータリカバリやカスケード操作が含まれます。
これが発生した場合、業務上許容される場合は、影響を受けるデータベースまたはテーブルを同期オブジェクトから削除し、再度追加してください。詳細については、「同期オブジェクトの変更」をご参照ください。
-
不可視カラム (MySQL 8.0.23 以降): 同期対象のデータに不可視カラムが含まれている場合、DTS はそれらのカラムのデータを取得できず、データが失われる可能性があります。次のコマンドを実行して、不可視カラムを可視化してください:
ALTER TABLE <table_name> ALTER COLUMN <column_name> SET VISIBLE;プライマリキーのないテーブルは自動的に不可視プライマリキーを生成しますが、これも可視化する必要があります。詳細については、「不可視カラム」および「生成された不可視プライマリキー」をご参照ください。
-
宛先の PolarDB-X 1.0 テーブルで自動パーティショニングが有効になっている場合 (
auto_partition=true)、ソースで実行する各 DDL ステートメントに含めることができるalter_specificationは 1 つだけです。そうでない場合、DTS はエラー (TDDL-4998:Multi alter specifications when create GSI not support yet) を返します。複数のalter_specificationを含む DDL ステートメントを実行するには、各alter_specificationを個別の DDL ステートメントに分割し、1 つずつ実行してください。詳細については、「ALTER TABLE」をご参照ください。
その他の制限
-
EncDB (常時機密): ソースの RDS MySQL インスタンスで常時機密 (EncDB) 機能が有効になっている場合、全量データ同期はサポートされていません。
透過的データ暗号化 (TDE) が有効になっているインスタンスは、スキーマ同期、全量データ同期、および増分データ同期をサポートしています。
-
ソースデータベースで一時テーブルを使用するオンライン DDL 操作 (複数のテーブルのマージなど) を実行すると、宛先データベースでデータが失われたり、DTS インスタンスが失敗したりする可能性があります。
-
pt-online-schema-change などのツールを使用して、同期中のオブジェクトに対してオンライン DDL 操作を実行しないでください。タスクが失敗します。
-
同期中に他のソースから宛先データベースにデータを書き込むと、データの不整合が発生する可能性があります。
-
同期を開始する前に、ソースデータベースと宛先データベースへのパフォーマンスへの影響を評価してください。可能であれば、同期タスクはオフピーク時間に実行してください。全量データ同期は両方のデータベースの読み取りおよび書き込みリソースを使用するため、サーバー負荷が増加する可能性があります。
-
全量データ同期が完了した後、並行 INSERT 操作により宛先テーブルでフラグメンテーションが発生する可能性があります。宛先データベースの使用済みテーブルスペースが、ソースデータベースのそれよりも大きくなる場合があります。
-
DTS インスタンスに障害が発生した場合、DTS サポートチームは 8 時間 以内に復旧を試みます。復旧操作には、インスタンスの再起動や DTS インスタンスパラメータ (データベースパラメータではない) の調整が含まれることがあります。詳細については、「インスタンスパラメータの変更」をご参照ください。
セルフマネージド MySQL ソースの特殊なケース
-
同期中にソースデータベースでプライマリ/セカンダリのフェールオーバーが発生した場合、タスクは失敗します。
-
同期遅延は、現在のタイムスタンプと最後に同期されたデータレコードのタイムスタンプとの差から計算されます。ソースデータベースで DML 操作が長時間実行されない場合、表示される遅延が不正確になる可能性があります。ソースで DML 操作を実行して、遅延の値を更新してください。
データベース全体を同期することを選択した場合は、ハートビートテーブルを作成してください。DTS は、遅延の値を正確に保つために、毎秒ハートビートテーブルの更新または書き込みを行います。
-
DTS は、バイナリログオフセットを進めるために、ソースデータベースで定期的に
CREATE DATABASE IF NOT EXISTS `test`を実行します。
ApsaraDB RDS for MySQL ソースの特殊なケース
-
トランザクションログを記録しない ApsaraDB RDS for MySQL インスタンス (ApsaraDB RDS for MySQL 5.6 の読み取り専用インスタンスなど) は、ソースデータベースとして使用できません。
-
DTS は、バイナリログオフセットを進めるために、ソースデータベースで定期的に
CREATE DATABASE IF NOT EXISTS `test`を実行します。
データ同期タスクの作成
ステップ 1: データ同期ページへの移動
DTS コンソールまたは DMS コンソールのいずれかを使用します。
DTS コンソール
-
左側のナビゲーションペインで、[データ同期] をクリックします。
-
左上隅で、同期インスタンスがあるリージョンを選択します。
DMS コンソール
注記
実際の操作は、DMS コンソールのモードとレイアウトによって異なる場合があります。詳細については、「シンプルモード」および「DMS コンソールのレイアウトとスタイルのカスタマイズ」をご参照ください。
-
上部のナビゲーションバーで、[データ + AI] にポインターを合わせ、[DTS (DTS)] > [データ同期] を選択します。
-
[データ同期タスク] の右側にあるドロップダウンリストから、同期インスタンスが存在するリージョンを選択します。
ステップ 2: ソースデータベースとターゲットデータベースの設定
-
[タスクの作成] をクリックします。
-
タスク設定ページで、次のパラメータを設定します。
一般
|
パラメータ |
説明 |
|
[タスク名] |
DTS はタスク名を自動的に生成します。タスクを識別しやすくするため、わかりやすい名前を指定してください。名前は一意である必要はありません。 |
ソースデータベース
|
パラメータ |
値 |
|
[既存の接続を選択] |
ドロップダウンリストから登録済みのデータベースインスタンスを選択すると、DTS が残りのパラメーターを自動的に入力します。インスタンスが DTS に登録されていない場合は、以下のパラメーターを手動で設定します。DMS コンソールでは、[DMS データベースインスタンスを選択] リストからインスタンスを選択します。 |
|
[データベースタイプ] |
MySQL |
|
[アクセス方法] |
[Alibaba Cloud インスタンス] |
|
[インスタンスリージョン] |
ソース ApsaraDB RDS for MySQL インスタンスがあるリージョン |
|
[Alibaba Cloud アカウント間のデータレプリケーション] |
[いいえ] (現在のアカウント配下のインスタンスの場合) |
|
[RDS インスタンス ID] |
ソース ApsaraDB RDS for MySQL インスタンスの ID |
|
[データベースアカウント] |
ソースインスタンスのアカウント。詳細については、「データベースアカウントに必要な権限」をご参照ください。 |
|
[データベースパスワード] |
データベースアカウントのパスワード |
|
[暗号化] |
[非暗号化] または [SSL 暗号化]。SSL 暗号化を使用するには、このタスクを設定する前に、RDS インスタンスで SSL 暗号化を有効にする必要があります。詳細については、「クラウド証明書を使用して SSL 暗号化を有効にする」をご参照ください。 |
ターゲットデータベース
|
パラメータ |
値 |
|
[既存の接続を選択] |
ドロップダウンリストから登録済みのデータベースインスタンスを選択します。DTS が残りのパラメーターを自動入力します。インスタンスが DTS に登録されていない場合は、以下のパラメーターを手動で設定します。DMS コンソールで、[DMS データベースインスタンスの選択] リストからインスタンスを選択します。 |
|
[データベースタイプ] |
PolarDB-X 1.0 |
|
[アクセス方法] |
[Alibaba Cloud インスタンス] |
|
[インスタンスリージョン] |
ターゲット PolarDB-X 1.0 インスタンスがあるリージョン |
|
[インスタンス ID] |
ターゲット PolarDB-X 1.0 インスタンスの ID |
|
[データベースアカウント] |
ターゲットインスタンスのアカウント。詳細については、「データベースアカウントに必要な権限」をご参照ください。 |
|
[データベースパスワード] |
データベースアカウントのパスワード |
-
[接続をテストして続行] をクリックします。
DTS サーバーの CIDR ブロックが、ソースデータベースと宛先データベースの両方のセキュリティ設定に追加されていることを確認してください。 詳細については、「DTS サーバーの IP アドレスをホワイトリストに追加する」をご参照ください。 ソースデータベースまたは宛先データベースが、[Alibaba Cloud インスタンス] 経由でアクセスされない自己管理型データベースである場合、[DTS サーバーの CIDR ブロック] ダイアログボックスで [接続テスト] をクリックします。
ステップ 3: 同期オブジェクトの設定
[オブジェクトの設定] ステップでは、以下のパラメーターを設定します。
|
パラメータ |
説明 |
|
[同期タイプ] |
デフォルトでは[増分データ同期] が選択されています。必要に応じて、[完全データ同期] を選択します。[スキーマ同期] は選択できません。タスクを開始する前に、ターゲットスキーマを手動で作成する必要があります。事前チェックに合格すると、DTS は増分同期のベースとしてソースから履歴データを同期します。 |
|
[競合テーブルの処理モード] |
[事前チェックとエラー報告]: 移行先に移行元と同一の名前を持つテーブルが含まれているかどうかをチェックします。 同一の名前が存在する場合、事前チェック中にエラーが返され、タスクを開始できません。 名前の競合を処理するには、オブジェクト名のマッピングを使用して、同期されるテーブルの名前を変更します。 「オブジェクト名のマッピング」をご参照ください。 <br><br> [エラーを無視して続行]: 同一のテーブル名の事前チェックをスキップします。 > 警告
このオプションを選択すると、データの不整合が発生する可能性があります。ソースとターゲットが同じスキーマを共有し、ターゲット内のレコードがソースレコードと同じプライマリキーまたは一意キーを持つ場合: フルデータ同期中は、DTS は既存のターゲットレコードを保持します。増分データ同期中は、DTS はターゲットレコードを上書きします。スキーマが異なる場合、初期化が失敗するか、一部のカラムのみが同期されます。 |
|
[宛先インスタンスのオブジェクト名の大文字/小文字] |
移行先のデータベース名、テーブル名、カラム名の大文字/小文字を制御します。 デフォルト: [DTS デフォルトポリシー]。 詳細は、「移行先インスタンスにおけるオブジェクト名の大文字/小文字の指定」をご参照ください。 |
|
[ソースオブジェクト] |
1 つ以上のテーブルを選択し、矢印アイコンをクリックして[選択したオブジェクト]に移動します。同期オブジェクトとして選択できるのはテーブルのみです。 |
|
[選択されたオブジェクト] |
オブジェクトを右クリックして名前を変更する (単一のオブジェクト) か、[一括編集] をクリックして複数のオブジェクトの名前を一度に変更します。「オブジェクト名のマッピング」をご参照ください。テーブルを右クリックして、増分同期のための特定の DML 操作 (INSERT, UPDATE, DELETE) を選択するか、WHERE フィルター条件を設定します。「フィルター条件の設定」をご参照ください。オブジェクト名のマッピングを使用する場合、マッピングされたオブジェクトに依存する他のオブジェクトは、同期に失敗する可能性があります。 |
[次へ: 詳細設定] をクリックします。
ステップ 4: 詳細設定の構成
|
パラメータ |
説明 |
|
[タスクスケジューリング専用クラスター] |
デフォルトでは、DTS はタスクを共有クラスターにスケジュールします。同期の安定性を向上させるには、専用クラスターを購入してください。詳細については、「DTS 専用クラスターとは」をご参照ください。 |
|
[接続失敗時の再試行時間] |
接続失敗後に DTS が再試行する時間。有効値: 10 〜 1,440 分。デフォルト: 720 分。このパラメータは 30 分を超える値に設定することを推奨します。この時間内に DTS が再接続した場合、タスクは再開されます。それ以外の場合、タスクは失敗します。複数のタスクが同じソースまたはターゲットデータベースを共有する場合、それらのタスクの中で最短の再試行時間が有効になります。DTS は再試行期間中もインスタンスに対して課金します。 |
|
[その他の問題の再試行時間] |
DDL または DML 操作が失敗した後に DTS が再試行する時間。 有効値: 1~1,440 分。 既定値: 10 分。 このパラメーターには 10 分を超える値を設定することをお勧めします。 この値は、[接続失敗時の再試行時間] よりも小さい必要があります。 |
|
[完全データ同期のスロットリングを有効化] |
完全データ同期中の読み書きリソースの使用量を制限します。 [ソースデータベースへの QPS (1 秒あたりのクエリ数)]、[完全データ移行の RPS]、および [完全移行のデータ移行速度 (MB/s)] を設定します。 [完全データ同期] が選択されている場合にのみ使用できます。 |
|
[増分データ同期のスロットリングを有効にする] |
増分同期中のリソース使用量を制限します。[増分データ同期の RPS] と [増分同期のデータ同期速度 (MB/秒)] を設定します。 |
|
[環境タグ] |
環境タイプ別にインスタンスを識別するためのオプションのタグ。 |
|
[正方向タスクと逆方向タスクのハートビートテーブルの SQL 操作を削除するかどうか] |
DTS がソースデータベースにハートビート SQL 操作を書き込むかどうかを制御します。[はい]アラート通知設定: ハートビート SQL を書き込みません。DTS インスタンスにレイテンシー値が表示されることがあります。[いいえ]: ハートビート SQL を書き込みます。これにより、ソースデータベースの物理バックアップやクローニングなどの機能に影響する可能性があります。 |
|
[ETL の構成] |
抽出、変換、ロード (ETL) 機能を有効にするかどうか。[はい]:コードエディタにデータ処理ステートメントを入力して、ETL を設定します。「データ移行またはデータ同期タスクで ETL を設定する」をご参照ください。[いいえ]:ETL は無効になります。「ETL とは」をご参照ください。 |
|
[モニタリングとアラート] |
アラートを設定するかどうか。[はい]: アラートのしきい値と通知連絡先を設定します。タスクが失敗した場合、またはレイテンシーがしきい値を超えた場合に、DTS は指定された連絡先に通知します。「DTS タスク作成時の監視およびアラート設定」をご参照ください。[いいえ]: アラートは送信されません。 |
ステップ 5: 事前チェックの実行
[次へ: タスク設定を保存して事前チェック] をクリックします。
このタスク設定の API パラメーターを表示するには、[次へ: タスク設定を保存して事前チェック] にマウスカーソルを合わせ、[OpenAPI パラメーターをプレビュー] をクリックします。
タスクは開始前に事前チェックを実行します。事前チェックに合格した後にのみ、タスクを開始できます。
-
いずれかの項目が失敗した場合は、失敗した項目の横にある[詳細の表示]をクリックして問題を修正し、[再度事前チェック]をクリックします。
-
項目によって無視できるアラートが発生した場合は、[アラート詳細の確認] をクリックし、次に [無視] > [OK] > [再度事前チェック] の順にクリックします。 アラート項目を無視すると、データの不整合が発生する可能性があります。
ステップ 6: インスタンスの購入
-
[成功率] が [100%] になるまで待ってから、[次へ:インスタンスの購入] をクリックします。
-
購入ページで、次のパラメータを設定します。
|
パラメータ |
説明 |
|
[請求方法] |
[サブスクリプション]: 一定期間分を前払いします。長期利用の場合、より費用対効果が高くなります。 従量課金: 時間単位で課金され、短期利用に適しています。不要になったインスタンスを解放すると課金が停止されます。 |
|
[リソースグループ設定] |
The resource group for the synchronization instance. Default: [default resource group]. See What is Resource Management? |
|
[インスタンスクラス] |
同期パフォーマンス層。詳細については、「データ同期インスタンスのインスタンスクラス」をご参照ください。 |
|
[サブスクリプション期間] |
課金方法が [サブスクリプション] の場合にのみ利用可能です。有効な値: 1~9 か月、または 1、2、3、5 年。 |
-
[データ伝送サービス (従量課金) 利用規約]を読み、選択してください。
-
[購入して開始] をクリックし、次に [OK] をクリックして確定します。
タスクがタスクリストに表示されます。タスクリストで進行状況を確認してください。