Data Transmission Service (DTS) を使用して、ApsaraDB RDS for MySQL インスタンスから ApsaraDB RDS for PostgreSQL インスタンスへリアルタイムでデータを同期します。DTS はスキーマ同期、完全データ同期、増分データ同期をサポートしているため、最小限のダウンタイムでデータを移行し、ターゲットデータベースを継続的に最新の状態に保つことができます。
前提条件
開始する前に、以下をご確認ください。
ApsaraDB RDS for MySQL ソースインスタンス。 詳細については、「ApsaraDB RDS for MySQL インスタンスを作成する」をご参照ください。
ApsaraDB RDS for PostgreSQL 宛先インスタンス。詳細については、「ApsaraDB RDS for PostgreSQL インスタンスの作成」をご参照ください。
ソースデータベースのすべてのデータを保持するのに十分な、宛先インスタンスの利用可能なストレージ。
課金
| 同期タイプ | 料金 |
|---|---|
| スキーマ同期と完全データ同期 | 無料 |
| 増分データ同期 | 課金済み。「課金概要」を参照してください。 |
サポートされる同期トポロジ
一方向の 1 対 1 同期
一方向の 1 対多同期
一方向の多対 1 同期
同期可能な SQL 操作
| 操作タイプ | サポートされる操作 |
|---|---|
| DML | INSERT、UPDATE、DELETE |
制限事項
タスクを設定する前に、これらの制限事項を確認してください。
ソースデータベースの要件
テーブルには PRIMARY KEY または UNIQUE 制約が必要で、すべてのフィールドが一意である必要があります。そうでない場合、ターゲットデータベースに重複レコードが表示される可能性があります。
テーブルを同期オブジェクトとして選択し、テーブル名またはカラム名を変更する必要がある場合、1 つのタスクでサポートされるテーブルは最大 1,000 個です。1,000 個を超えるテーブルの場合は、複数のタスクを設定するか、1 つのタスクでデータベース全体を同期してください。
スキーマ同期または完全データ同期中に DDL 文を実行しないでください。これらのフェーズ中に DDL を変更すると、タスクは失敗します。
データ同期インスタンスが実行中である間、物理バックアップの復元またはカスケード操作によるデータ変更は、ターゲットデータベースに記録されず、同期されません。この現象が発生した場合、影響を受けるデータベースおよびテーブルを同期対象から削除し、その後再追加できます。詳細については、「同期対象を変更する」をご参照ください。
MySQL 8.0.23 以降:同期するデータに不可視カラムが含まれている場合、DTS はそれらのカラムを読み取れず、データ損失が発生します。カラムを可視にするには、以下を実行します。
ALTER TABLE <table_name> ALTER COLUMN <column_name> SET VISIBLE;プライマリキーのないテーブルは自動的に不可視のプライマリキーを生成します。それらも可視にしてください。「Invisible Columns」および「Generated Invisible Primary Keys」をご参照ください。
ソースインスタンスで EncDB 機能が有効になっている場合、完全データ同期は実行できません。透過的データ暗号化 (TDE) が有効になっているインスタンスは、スキーマ同期、完全データ同期、および増分データ同期をサポートします。
バイナリログの要件
ApsaraDB RDS for MySQL
ApsaraDB RDS for MySQL インスタンスでは、バイナリロギングはデフォルトで有効になっています。以下のパラメーターを確認してください。
| パラメーター | 必須値 |
|---|---|
binlog_row_image | full |
binlog_row_imageがfullに設定されていない場合、事前チェック中にエラーメッセージが返され、データ同期タスクを開始できません。トランザクションログを記録しない読み取り専用の ApsaraDB RDS for MySQL 5.6 インスタンスは、ソースデータベースとして使用できません。
バイナリログは、少なくとも 7 日間保持する必要があります。DTS がバイナリログを読み取れない場合、同期タスクが失敗し、データの不整合または損失が発生する可能性があります。詳細については、「バイナリログファイルの表示および削除」をご参照ください。
自己管理 MySQL
ソースが自己管理 MySQL データベースの場合、タスクを開始する前に以下のパラメーターを設定してください。
| パラメーター | 必須値 | 注 |
|---|---|---|
binlog_format | row | |
binlog_row_image | full | |
log_slave_updates | ON | デュアルプライマリクラスターの場合のみ必須 |
「自己管理 MySQL データベース用のアカウントを作成し、バイナリロギングを設定する」をご参照ください。
タスクの実行中にソースデータベースでプライマリ/セカンダリの切り替えが発生すると、タスクは失敗します。
オブジェクトとデータ型
同期オブジェクトとして選択できるのはテーブルのみです。DTS はビュー、トリガー、ストアドプロシージャを同期しません。
次のデータ型はサポートされていません:BIT、VARBIT、GEOMETRY、ARRAY、UUID、TSQUERY、TSVECTOR、TXID_SNAPSHOT、POINT。
プレフィックスインデックスは同期できません。ソースデータベースにプレフィックスインデックスが含まれている場合、タスクが失敗する可能性があります。
テーブルレベルの同期中に、pt-online-schema-change などのツールをオンライン DDL 操作に使用しないでください。代わりに、Data Management (DMS) を使用してください。
外部キーの処理
スキーマ同期中、DTS はソースデータベースからターゲットデータベースへ外部キーを同期します。
完全データ同期および増分データ同期中、DTS はセッションレベルで外部キー制約チェックとカスケード操作を一時的に無効にします。同期中にソースデータベースでカスケード更新または削除操作を実行すると、データの不整合が発生する可能性があります。
ターゲットデータベースに特権アカウントまたはスーパーユーザーアカウントを使用し、テーブルに外部キー、トリガー、またはイベントトリガーが含まれている場合、DTS はセッションレベルで session_replication_role を一時的に replica に設定します。アカウントに必要な権限がない場合は、手動で session_replication_role を replica に設定してください。タスクがリリースされた後、値を origin に戻してください。
パフォーマンスに関する考慮事項
開始前に、ソースおよびターゲットデータベースのパフォーマンスへの影響を評価してください。同期はオフピーク時に実行してください。
初期完全データ同期中、DTS は両方のデータベースの読み取りおよび書き込みリソースを使用するため、サーバーの負荷が増加します。
初期完全データ同期中の同時 INSERT 操作は、宛先テーブルの断片化を引き起こします。完全データ同期が完了すると、宛先テーブルスペースはソースよりも大きくなります。
同期中に他のソースからターゲットデータベースにデータを書き込まないでください。データの不整合や損失の原因となる可能性があります。
同期遅延
DTS は、ターゲットで最後に同期されたレコードのタイムスタンプとソースの現在のタイムスタンプに基づいて同期遅延を計算します。ソースで長期間 DML 操作が実行されない場合、報告される遅延は不正確になる可能性があります。ソースで DML 操作を実行して、遅延の読み取り値を更新してください。
ヒント:データベース全体を同期する場合、毎秒更新を受け取るハートビートテーブルを作成して、遅延を正確に保ちます。
DTS はまた、バイナリログファイルの位置を進めるために、スケジュールに従ってソースデータベースで CREATE DATABASE IF NOT EXISTS 'test' を実行します。
DTS タスクの障害回復
DTS タスクが失敗した場合、DTS のテクニカルサポートが 8 時間以内に復旧を試みます。復旧中、タスクが再起動されたり、タスクパラメーター (データベースパラメーターではない) が変更されたりすることがあります。
データ同期タスクの設定
設定には 9 つのステップがあります:データ同期タスクページを開き、リージョンを選択し、ソースとターゲットのデータベースを設定し、接続をテストし、同期オブジェクトと詳細設定を構成し、事前チェックを実行し、インスタンスを購入し、タスクを開始します。
ステップ 1:データ同期タスクページを開く
Data Management (DMS) コンソールにログインします。
上部のナビゲーションバーで、[データ + AI] をクリックします。
左側のナビゲーションウィンドウで、[DTS (DTS)] > [データ同期] を選択します。
操作は、DMS コンソールのモードおよびレイアウトによって異なる場合があります。「シンプルモード」および「DMS コンソールのレイアウトとスタイルのカスタマイズ」を参照してください。また、「新しい DTS コンソールのデータ同期タスクページ」に直接アクセスすることもできます。
ステップ 2:リージョンの選択
[データ同期タスク] の右側で、データ同期インスタンスが存在するリージョンを選択します。
新しい DTS コンソールでは、上部のナビゲーションバーでリージョンを選択します。
ステップ 3:ソースとターゲットのデータベースの設定
[タスクの作成] をクリックします。[データ同期タスクの作成] ウィザードで、以下のパラメーターを設定します。
ソースデータベース
| パラメーター | 説明 |
|---|---|
| タスク名 | DTS タスクの名称です。DTS が自動的に名称を生成しますが、タスクを識別しやすいよう、意味のある名称を指定してください。名称は一意である必要はありません。 |
| データベースタイプ | MySQL を選択します。 |
| アクセス方法 | Alibaba Cloud インスタンス を選択します。 |
| インスタンスリージョン | ソース ApsaraDB RDS for MySQL インスタンスが配置されているリージョンです。 |
| Alibaba Cloud アカウント間でのデータ複製 | 同一アカウント内での同期を行う場合は、いいえ を選択します。 |
| RDS インスタンス ID | ソース ApsaraDB RDS for MySQL インスタンスの ID です。 |
| データベースアカウント | ソースインスタンスのデータベースアカウントです。 |
| データベースパスワード | データベースアカウントのパスワードです。 |
| 暗号化 | 非暗号化 または SSL 暗号化クラウド証明書を用いた SSL 暗号化の有効化 を選択します。SSL 暗号化を利用する場合は、本タスクの設定前に、ソースインスタンスで SSL 暗号化を有効化する必要があります。詳細については、「」をご参照ください。 |
宛先データベース
| パラメーター | 説明 |
|---|---|
| データベースタイプ | [PostgreSQL] を選択します。 |
| アクセス方法 | [Alibaba Cloud インスタンス] を選択します。 |
| インスタンスリージョン | 宛先の ApsaraDB RDS for PostgreSQL インスタンスが存在するリージョン。 |
| インスタンス ID | 宛先の ApsaraDB RDS for PostgreSQL インスタンスの ID。 |
| データベース名 | ターゲットデータベースの名前。 |
| データベースアカウント | 宛先インスタンスのデータベースアカウント。アカウントはスキーマに対する所有者権限を持っている必要があります。「アカウントの作成」をご参照ください。 |
| データベースパスワード | データベースアカウントのパスワード。 |
ステップ 4:接続をテストして次へ
[接続をテストして次へ] をクリックします。
DTS は、ApsaraDB RDS for MySQL などの Alibaba Cloud のデータベースインスタンスのホワイトリストに、自動的に自社サーバーの CIDR ブロックを追加します。Elastic Compute Service (ECS) インスタンス上で実行される自己管理データベースの場合、DTS は CIDR ブロックを ECS セキュリティグループルールに追加します — この際、ECS インスタンスがデータベースにアクセスできることを確認してください。データセンター内またはサードパーティ製クラウドプロバイダーでホストされる自己管理データベースの場合は、DTS サーバーの CIDR ブロックをデータベースのホワイトリストに手動で追加してください。詳しくは、「DTS サーバーの CIDR ブロックをオンプレミスデータベースのセキュリティ設定に追加する」をご参照ください。
DTS サーバーの CIDR ブロックをデータベースのホワイトリストや ECS セキュリティグループに追加すると、セキュリティリスクが生じます。DTS を使用する前に、ユーザー名とパスワードのセキュリティ強化、公開ポートの制限、API 呼び出しの認証、ホワイトリストとセキュリティグループルールの定期的な監査などの予防措置を講じてください。不正な CIDR ブロックは削除してください。または、Express Connect、VPN Gateway、または Smart Access Gateway を介してデータベースを DTS に接続してください。
ステップ 5:同期オブジェクトと詳細設定の構成
基本設定
| パラメーター | 説明 |
|---|---|
| 同期タイプ | [スキーマ同期]、[完全データ同期]、および [増分データ同期] を選択します。事前チェック後、DTS はソースから宛先へ既存データを同期します。これは、後続の増分同期の基礎となります。 |
| 競合するテーブルの処理モード | [事前チェックしてエラーを報告]:DTS は、宛先にソースと同じ名前のテーブルが存在するかどうかをチェックします。同一のテーブル名が存在する場合、事前チェック中にエラーが返され、タスクを開始できません。オブジェクト名マッピング機能を使用して、競合するテーブルの名前を変更してください。「オブジェクト名のマッピング」をご参照ください。[エラーを無視して続行]:同一テーブル名の事前チェックをスキップします。 警告 これにより、データの不整合が発生する可能性があります。完全データ同期中、DTS は同じプライマリキーまたは一意キーを持つ既存のレコードを上書きしません。既存の宛先レコードが保持されます。増分データ同期中、DTS は一致するレコードを上書きします。ソースと宛先のスキーマが異なる場合、一部のカラムが同期されないか、タスクが失敗する可能性があります。 |
| 宛先インスタンスでのオブジェクト名の大文字/小文字の区別 | データベース名、テーブル名、および列名の大文字小文字のポリシー。デフォルト: DTS デフォルトポリシー。詳細については、「宛先インスタンスでのオブジェクト名の大文字小文字の指定」をご参照ください。 |
| ソースオブジェクト | 「[ソース オブジェクト]」からオブジェクトを選択し、矢印アイコンをクリックして「[選択済みオブジェクト]」に移動します。列、テーブル、またはデータベースを選択できます。テーブルまたは列を選択した場合、DTS はビュー、トリガー、およびストアドプロシージャを同期しません。 |
| 選択したオブジェクト | 単一のオブジェクトの名前を変更するには、[選択したオブジェクト] セクションでそのオブジェクトを右クリックします。一度に複数のオブジェクトの名前を変更するには、右上隅の [一括編集] をクリックします。「オブジェクト名のマッピング」をご参照ください。 説明 時間フィールドは TIMESTAMP データ型をサポートします。ソースで時間フィールドの値が |
詳細設定
| パラメーター | 説明 |
|---|---|
| モニタリングとアラート | タスクの失敗や同期遅延がしきい値を超えた場合にアラートを設定するには、[はい] を選択します。詳細については、「モニタリングとアラートの設定」をご参照ください。 |
| 失敗した接続の再試行時間 | DTS が失敗した接続を再試行する時間範囲。有効値:10~1,440 分。デフォルト:720 分。30 分以上に設定してください。指定した時間範囲内に DTS が再接続すると、タスクは再開されます。それ以外の場合、タスクは失敗します。 説明 複数のタスクが同じソースまたはターゲットデータベースを共有する場合、最も短い再試行時間範囲が優先されます。DTS は再試行中のインスタンスに対して課金します。 |
| ETL の設定 | ETL 機能を有効にするには、[はい] を選択し、データ処理文を入力します。詳しくは、「データ移行またはデータ同期タスクで ETL を設定する」および「ETL とは? |
ステップ 6:設定を保存して事前チェックを実行
このタスク設定の API パラメーターを表示するには、[次へ:タスク設定を保存して事前チェック] にカーソルを合わせ、[OpenAPI パラメーターのプレビュー] をクリックします。
[次へ:タスク設定を保存して事前チェック] をクリックします。
DTS はタスクを開始する前に事前チェックを実行します。事前チェックが失敗した場合、失敗した各項目の横にある [詳細の表示] をクリックし、チェック結果に基づいて問題を解決してから、[再度事前チェック] をクリックします。事前チェック項目が無視できるアラートをトリガーした場合、[アラート詳細の確認] をクリックし、ダイアログボックスで [無視] をクリックし、[OK] をクリックしてから、[再度事前チェック] をクリックします。アラート項目を無視すると、データの不整合が発生する可能性があります。
ステップ 7:事前チェックが合格するのを待つ
[成功率] が [100%] に達するまで待ち、[次へ:インスタンスの購入] をクリックします。
ステップ 8:同期インスタンスの購入
購入ページで、以下のパラメーターを設定します。
| パラメーター | 説明 |
|---|---|
| 課金方法 | [サブスクリプション]:固定期間分を前払いします。長期利用に適しており、コスト効率が高いです。[従量課金]:時間単位で課金されます。短期利用に適しています。不要になったらインスタンスをリリースして、継続的な課金を避けてください。 |
| リソースグループ設定 | 同期インスタンスのリソースグループ。デフォルト:[デフォルトリソースグループ]Resource Management とは |
| インスタンスクラス | 同期速度はインスタンスクラスによって異なります。詳細については、「データ同期インスタンスのインスタンスクラス」をご参照ください。 |
| サブスクリプション期間 | [サブスクリプション] 課金方法でのみ利用可能です。オプション:1~9 か月、1 年、2 年、3 年、または 5 年。 |
ステップ 9:タスクの開始
[Data Transmission Service (従量課金) 利用規約] を読んで選択し、[購入して開始] をクリックします。ダイアログボックスで、[OK] をクリックします。
タスクがタスクリストに表示されます。そこから進捗状況を追跡してください。