Data Transmission Service (DTS) を使用して、ApsaraDB RDS for PostgreSQL インスタンス(ソース)から ApsaraDB RDS for MySQL インスタンス(ターゲット)へ、継続的かつ単方向のデータ同期を実行します。DTS は、初期完全同期およびリアルタイムでの増分変更(INSERT、UPDATE、DELETE)を自動的に処理します。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
ソースとして使用する ApsaraDB RDS for PostgreSQL インスタンス。詳細については、「ApsaraDB RDS for PostgreSQL インスタンスの作成」をご参照ください。
ターゲットとして使用する ApsaraDB RDS for MySQL インスタンス。詳細については、「ApsaraDB RDS for MySQL インスタンスの作成」をご参照ください。
ターゲットインスタンスに確保されているストレージ領域が、ソース PostgreSQL インスタンスの合計データサイズを超えること。
制限事項
タスクの設定を開始する前に、以下の制限事項を確認してください。一部の制限事項は、開始前に対応が必要です。
ソースデータベースの要件
テーブル制約
同期対象のテーブルには、PRIMARY KEY または一意制約(UNIQUE constraint)が必須であり、すべてのフィールドが一意である必要があります。これらの制約がない場合、ターゲットデータベースに重複行が発生する可能性があります。
ソースインスタンスでプライマリ/セカンダリ スイッチオーバーが発生した場合、セカンダリデータベースにログインしてレプリケーションスロットを削除します。
テーブル数の上限
個別のテーブルを同期対象として選択し、ターゲット側でテーブル名またはカラム名の変更を行う場合、1 つのタスクで最大 5,000 個のテーブルをサポートします。5,000 個を超える場合は、複数のタスクに分割するか、データベースレベルでの同期を選択してください。
WAL ログの要件
DTS は、PostgreSQL の論理レプリケーション(先行書き込みログ:write-ahead logging)を用いて増分変更をキャプチャします。タスク開始前に、以下の設定を行ってください。
ソースインスタンスで
wal_levelをlogicalに設定します。増分同期のみの場合:WAL ログの保持期間を 24 時間以上に設定します。
初期完全同期+増分同期の場合:WAL ログの保持期間を最低 7 日間以上に設定します。初期完全同期が完了後は、保持期間を 24 時間以上に短縮できます。
WAL ログの保持期間が不足すると、DTS が変更ログを読み取れなくなり、タスクの失敗やデータ損失を引き起こす可能性があります。
WAL ディスク領域
ソースデータベースにおける長時間トランザクションは、WAL ログの解放を妨げます。同期タスクの遅延や、未コミットの長時間トランザクションがソースに存在する場合、WAL ファイルが蓄積し、ソースのディスク領域を枯渇させる可能性があります。同期中は、ソースのディスク使用率および WAL ログの保持状況を監視してください。
DTS は、ソースデータベースにプレフィックス dts_sync_ を付与したレプリケーションスロットを作成します。このスロットは、最大 15 分間の増分ログを保持します。DTS インスタンスがリリースされると、レプリケーションスロットは自動的に削除されます。データ同期タスクがリリースまたは失敗した場合も、DTS はレプリケーションスロットを自動的に削除します。ソースデータベースのパスワードを変更した場合、またはホワイトリストから DTS の CIDR ブロックを削除した場合は、蓄積を防ぐため、レプリケーションスロットを手動で削除してください。

ソースインスタンスでプライマリ/セカンダリ スイッチオーバーが発生した場合、セカンダリデータベースにログインしてレプリケーションスロットを削除してください。
プライマリ/セカンダリ スイッチオーバー
同期中にソース ApsaraDB RDS for PostgreSQL インスタンスでプライマリ/セカンダリ スイッチオーバーを実行する予定がある場合は、まず論理レプリケーションスロットフェールオーバー機能を有効化してください。詳細については、「論理レプリケーションスロットフェールオーバー」をご参照ください。
単一行のデータサイズ
単一の増分変更が 256 MB を超えると、同期インスタンスが失敗し、復旧できません。このような状況が発生した場合は、タスクを再設定してください。
DDL 制限
スキーマ同期または初期完全同期の実行中に、データベースまたはテーブルのスキーマを変更する DDL ステートメントを実行しないでください。これによりタスクが失敗します。
メジャーバージョンアップ
同期実行中にソースデータベースのメジャーバージョンアップを実施すると、回復不能なタスク失敗が発生します。アップグレード完了後にタスクを再設定してください。
その他の制限事項
1 つのタスクでは、1 つのデータベースからのみ同期が可能です。複数のデータベースを同期する場合は、それぞれ別々のタスクを作成してください。
DTS は、スキーマ間で継承関係にあるテーブルの同期に対応していません。
DTS は、スキーマ同期時にソースデータベースからターゲットデータベースへ外部キー(foreign keys)を同期します。初期完全同期および増分同期中は、DTS がセッションレベルで外部キーの制約チェックおよびカスケード操作を一時的に無効化します。同期中にソースデータベースでカスケード更新またはカスケード削除を実行した場合、データの不整合が発生する可能性があります。
スキーマレベルでの同期を行う場合:スキーマ内に新規テーブルを作成したり、RENAME でテーブル名を変更したりした後、そのテーブルにデータを書き込む前に、以下のステートメントを実行してください。
ALTER TABLE schema.table REPLICA IDENTITY FULL;schemaおよびtableを実際の名前に置き換えてください。このステートメントは、トラフィックが少ない時間帯に実行し、テーブルをロックしないでください。ロックするとデッドロックが発生する可能性があります。DTS は、DDL ステートメント、スキーマ変更、およびハートビート情報をキャプチャするために、ソースデータベースに以下の臨時テーブルを作成します。同期中はこれらを削除しないでください。DTS インスタンスがリリースされると、自動的に削除されます:
public.dts_pg_class、public.dts_pg_attribute、public.dts_pg_type、public.dts_pg_enum、public.dts_postgres_heartbeat、public.dts_ddl_command、public.dts_args_session、public.aliyun_dts_instanceDTS は、同期遅延を測定するために、ソースデータベースに
dts_postgres_heartbeatという名前のハートビートテーブルを追加します。同期対象のデータに 4 バイト文字(稀少な漢字や絵文字など)が含まれる場合、ターゲットデータベースおよびテーブルは UTF8mb4 文字セットを使用する必要があります。DTS のスキーマ同期を利用する場合は、ターゲットインスタンスの
character_set_serverを UTF8mb4 に設定してください。データ同期を開始する前に、同期によるソースおよびターゲットデータベースのパフォーマンスへの影響を評価してください。推奨される実行タイミングは、トラフィックが少ない時間帯です。初期完全同期中は、DTS がソースおよびターゲットデータベースの読み取り・書き込みリソースを使用するため、データベースサーバーの負荷が高まる可能性があります。
初期完全同期完了後、ターゲットの表領域(tablespace)は、並列 INSERT 操作による断片化(fragmentation)のため、ソースよりも大きくなる可能性があります。
同期中に、DTS 以外のソースからターゲットへデータを書き込むと、データの不整合またはデータ損失を引き起こす可能性があります。
MySQL のカラム名は大文字小文字を区別しません。複数のソースカラムが大文字小文字のみ異なる場合、それらは同一のターゲットカラムに書き込まれ、予期しない結果を招く可能性があります。
DDL 文が送信先で失敗した場合、DTS タスクは実行を継続します。失敗した DDL 文はタスクログで確認できます。詳細については、「タスクログの表示」をご参照ください。
DTS タスクが失敗した場合、DTS テクニカルサポートが 8 時間以内に復旧を試みます。復旧中は、タスクが再起動され、タスクパラメーター(データベースパラメーターを除く)が変更される場合があります。ソースおよびターゲットインスタンスがリリースされた後は、できる限り早期に DTS インスタンスをリリースすることを推奨します。
同期ステータスが 完了 に変更された後、以下のコマンドを実行して、ターゲットへのデータ書き込みが正しく行われたかを検証してください。
ANALYZE TABLE <table_name>;
特殊ケース
| ソースタイプ | 追加要件 |
|---|---|
| ApsaraDB RDS for PostgreSQL | 同期中にソースインスタンスのエンドポイントまたはゾーンを変更しないでください。 |
| 自己管理型 PostgreSQL | max_wal_senders および max_replication_slots を、既存のレプリケーションスロット数と、このデータベースから同期を行う DTS インスタンス数の合計より大きい値に設定してください。 |
| Google Cloud Platform Cloud SQL for PostgreSQL | データベースアカウント を cloudsqlsuperuser 権限を持つアカウントに設定します。選択した同期対象オブジェクトに対する OWNER 権限を、このアカウントに付与してください(すでに付与済みでない場合)。なお、cloudsqlsuperuser アカウントは、他の cloudsqlsuperuser アカウントが所有するオブジェクトを管理できません。 |
課金
| 同期タイプ | 料金 |
|---|---|
| スキーマ同期 + 全データ同期 | 無料 |
| 増分同期 | 有料です。「課金概要」をご参照ください。 |
サポートされる同期トポロジ
この同期パスでは、以下の単方向トポロジがサポートされています。
単方向 1 対 1 同期
単方向 1 対多 同期
単方向 カスケード同期
単方向 多対 1 同期
詳細については、「同期トポロジ」をご参照ください。
同期可能な SQL 操作
| 操作タイプ | SQL ステートメント |
|---|---|
| DML | INSERT、UPDATE、DELETE |
DDL ステートメントはターゲットデータベースへ同期されません。
データ同期タスクの作成
DTS コンソールの データ同期ページ に移動します。あるいは、DMS コンソール にログインし、上部ナビゲーションバーから Data + AI > DTS (DTS) > データ同期 を選択します。
左上隅で、同期インスタンスを配置するリージョンを選択します。
タスクの作成 をクリックします。[データ同期タスクの作成] ウィザードで、ソースおよびターゲットデータベースを設定します。
警告ソースおよびターゲットの設定後に画面上に表示される 制限事項 を必ずご確認ください。このステップを省略すると、タスク失敗やデータ不整合を引き起こす可能性があります。
ソースデータベース
パラメーター 値 データベースタイプ PostgreSQL アクセス方法 Alibaba Cloud インスタンス インスタンスリージョン ソースの ApsaraDB RDS for PostgreSQL インスタンスのリージョン インスタンス ID ソースインスタンスの ID データベース名 ソースデータベースの名前 データベースアカウント ソースデータベースを所有する特権アカウント。詳細については、「アカウントの作成」および「データベースの作成」をご参照ください。DML 専用同期で PostgreSQL 9.4 を使用する場合、REPLICATION 権限で十分です。 データベースパスワード データベースアカウントのパスワード 宛先データベース
パラメーター 値 データベースタイプ MySQL アクセス方法 Alibaba Cloud インスタンス インスタンスリージョン ターゲットの ApsaraDB RDS for MySQL インスタンスのリージョン RDS インスタンス ID ターゲットインスタンスの ID データベースアカウント ターゲットデータベースに対して読み取りおよび書き込み権限を持つアカウント データベースパスワード データベースアカウントのパスワード 暗号化 非暗号化 または SSL 暗号化クラウド証明書を使用した SSL 暗号化の有効化。SSL 暗号化を利用する場合は、事前にターゲットの RDS MySQL インスタンスで SSL を有効化してください。「」をご参照ください。 「[接続性のテストと続行]」をクリックします。DTS は、自動的にその CIDR ブロックを Alibaba Cloud データベースインスタンスのホワイトリストおよび Elastic Compute Service (ECS) でホストされるデータベースのセキュリティグループルールに追加します。複数の ECS インスタンスに展開された自己管理データベースの場合、各インスタンスのセキュリティグループに DTS の CIDR ブロックを手動で追加します。オンプレミスデータベースまたはサードパーティのクラウドプロバイダーがホストするデータベースの場合、データベースのホワイトリストに DTS の CIDR ブロックを手動で追加します。詳細については、「DTS サーバーの CIDR ブロック」をご参照ください。
警告DTS の CIDR ブロックをホワイトリストまたはセキュリティグループに追加すると、当該ブロックがネットワークアクセス可能になります。強力な認証情報の使用、公開ポートの制限、ホワイトリストエントリの定期的な見直し、Express Connect、VPN Gateway、または Smart Access Gateway 経由での DTS 接続など、予防措置を講じてください。
同期対象オブジェクトおよび高度な設定を構成します。
基本設定
パラメーター 説明 同期タイプ 増分同期 がデフォルトで選択されています。初期完全同期 を選択すると、増分同期開始前に既存データのロードが実行されます。スキーマ同期 は、この同期パスでは選択できません。 競合テーブルの処理モード ソースおよびターゲットに同名のテーブルが存在する場合の処理方法を選択します。事前チェックとエラー報告オブジェクト名マッピング(デフォルト):ターゲットに同名のテーブルが存在すると、事前チェックが失敗します。削除できない場合は、 を使用してターゲットテーブル名を変更してください。エラーを無視して続行:チェックをスキップします。初期完全同期中は、既存のターゲット行が保持され、増分同期中は競合する行が上書きされます。ソースおよびターゲットのスキーマが異なる場合、一部のカラムのみが同期されるか、タスクが失敗する可能性があります。 ソースオブジェクト カラム、テーブル、またはデータベースを選択します。テーブルまたはカラムを選択した場合、ビュー、トリガー、ストアドプロシージャは同期されません。 選択済みオブジェクト オブジェクトを右クリックすると、名前の変更、同期する特定の SQL 操作の選択、または WHERE フィルター条件の追加ができます。[一括編集] をクリックすると、複数のオブジェクトの名前を一度に変更できます。「オブジェクト名のマッピング」および「フィルター条件の指定」をご参照ください。 高度な設定
パラメーター 説明 モニタリングとアラート タスクが失敗した場合や同期遅延がしきい値を超えた場合にアラートを受信するには、[Yes] に設定します。アラートのしきい値と連絡先を設定してください。詳細については、「モニタリングとアラート機能の設定」をご参照ください。 失敗した接続の再試行時間 DTS が接続失敗時に再試行を実行する時間(タスクを失敗とみなすまでの時間)。範囲:10~1,440 分。デフォルト:720 分。少なくとも 30 分に設定することを推奨します。複数のタスクが同一のソースまたはターゲットデータベースを共有する場合、最も短い再試行時間が優先されます。再試行中も DTS の課金は継続します。 ETL の設定 「[はい]」に設定すると、コードエディタを使用して転送中のデータを変換できます。詳細については、「ETL の設定」および「ETL とは?」をご参照ください。 次へ:タスク設定の保存と事前チェック をクリックします。このタスクの API パラメーターをプレビューするには、次へ:タスク設定の保存と事前チェック の上にポインターを合わせ、[OpenAPI パラメーターのプレビュー] をクリックしてから進んでください。
説明タスクは、事前チェックに合格した後でなければ開始できません。事前チェックが失敗した場合は、各失敗項目横の 詳細の表示 をクリックし、問題を解決した後、再チェック をクリックしてください。安全に無視できるアラート項目については、アラート詳細の確認 > 詳細の表示 > 無視 > OK の順にクリックし、その後 再チェック をクリックしてください。
成功率 が 100 % になるまで待機し、次へ:インスタンスの購入 をクリックします。
購入 ページで、インスタンスの課金およびクラス設定を構成します。
パラメーター 説明 課金方法 サブスクリプション:固定期間(1~9 か月、または 1、2、3、5 年)の前払い。長期利用にコスト効果が高いです。従量課金:時間単位で課金されます。短期利用に適しており、不要になった時点でインスタンスをリリースすることで課金を停止できます。 インスタンスクラス 同期スループットを決定します。詳細については、「データ同期インスタンスのインスタンスクラス」をご参照ください。 リソースグループ設定 同期インスタンスのリソースグループ。デフォルト: デフォルト リソースグループ。「Resource Management とは?」をご参照ください。 サブスクリプション期間 サブスクリプション 課金方法でのみ利用可能です。 Data Transmission Service(従量課金)サービス利用規約 を読み、チェックボックスをオンにしてください。
購入して開始 をクリックし、確認ダイアログで OK をクリックします。
タスクはタスク一覧に表示されます。そこで進行状況を監視できます。
次のステップ
ソーステーブルで同期処理を中断することなくオンライン DDL 操作を実行するには、Data Management Service (DMS) を使用します。詳細については、「テーブルをロックせずにスキーマを変更する」をご参照ください。これは、DTS が送信先への唯一の書き込み元である場合にのみ安全です。他のソースからの同時書き込みにより、データの不整合が発生します。
同期インスタンスのパラメーターの調整が必要かどうかを確認するには、「インスタンスのパラメーターを変更する」をご参照ください。