Data Transmission Service (DTS) を使用すると、PolarDB for MySQL クラスターから ApsaraDB RDS for MySQL インスタンスまたは自己管理 MySQL データベースにデータを継続的に同期できます。これには、スキーマ同期、完全データ同期、増分データ同期が含まれます。
サポートされるターゲットデータベース
以下のターゲットデータベースタイプがサポートされています。このトピックでは、ApsaraDB RDS for MySQL インスタンスをターゲットとして使用します。以下にリストされている他のターゲットタイプにも同じ手順が適用されます。
ApsaraDB RDS for MySQL インスタンス
Elastic Compute Service (ECS) でホストされている自己管理データベース
Express Connect、VPN Gateway、または Smart Access Gateway 経由で接続された自己管理データベース
データベースゲートウェイ経由で接続された自己管理データベース
Cloud Enterprise Network (CEN) 経由で接続された自己管理データベース
潜在的な影響
同期タスクを開始する前に、ソースデータベースとターゲットデータベースに対する以下の影響にご注意ください。
完全データ同期は、ソースデータベースからすべてのデータを一度に読み取るため、ソースへの負荷が増加します。本番環境のワークロードへの影響を軽減するために、オフピーク時に完全データ同期をスケジュールしてください。
初期の完全データ同期中の同時 INSERT 操作は、ターゲットデータベースでテーブルの断片化を引き起こします。初期同期が完了すると、ターゲットで使用されるテーブルスペースはソースよりも大きくなります。
DTS は、DTS サーバーの CIDR ブロックを Alibaba Cloud データベースインスタンスのホワイトリストに自動的に追加します。自己管理データベースの場合は、タスクを開始する前に手動で DTS の CIDR ブロックを追加してください。
注意:DTS の CIDR ブロックをデータベースのホワイトリストやセキュリティグループルールに追加すると、セキュリティ上のリスクが生じます。認証情報のセキュリティ強化、公開ポートの制限、API 呼び出しの認証、ホワイトリストルールの定期的な見直しなど、予防措置を講じてください。または、Express Connect、VPN Gateway、または Smart Access Gateway を介してデータベースを DTS に接続してください。
前提条件
開始する前に、以下を確認してください。
PolarDB for MySQL クラスターが作成されていること。詳細については、「サブスクリプションクラスターの購入」および「従量課金クラスターの購入」をご参照ください。
ターゲットの ApsaraDB RDS for MySQL インスタンスが作成されていること。詳細については、「ApsaraDB RDS for MySQL インスタンスの作成」をご参照ください。
ターゲットインスタンスの利用可能なストレージ容量が、ソースクラスターの総データサイズよりも大きいこと。
課金
| 同期タイプ | 料金 |
|---|---|
| スキーマ同期と完全データ同期 | 無料 |
| 増分データ同期 | 課金済み。詳細については、「課金概要」をご参照ください。 |
サポートされる SQL 操作
| 操作タイプ | SQL ステートメント |
|---|---|
| DML | INSERT、UPDATE、DELETE |
| DDL | ALTER TABLE、ALTER VIEW、CREATE FUNCTION、CREATE INDEX、CREATE PROCEDURE、CREATE TABLE、CREATE VIEW、DROP INDEX、DROP TABLE、RENAME TABLE、TRUNCATE TABLE |
注意:RENAME TABLE 操作はデータの不整合を引き起こす可能性があります。同期オブジェクトとしてテーブルを選択し、同期中にそのテーブルをリネームすると、そのテーブルのデータはターゲットへの同期が停止します。これを避けるには、個々のテーブルではなくデータベースを同期オブジェクトとして選択し、RENAME TABLE 操作のソースデータベースとターゲットデータベースの両方が選択したオブジェクトに含まれていることを確認してください。
制限事項
ソースデータベースの要件
テーブルには、すべてのフィールドが一意であるプライマリキーまたは一意制約が必要です。そうしないと、送信先に重複レコードが表示される可能性があります。テーブルにどちらも設定されていない場合は、双方向同期インスタンスを設定する際に、[Exactly-Once] 書き込み機能を有効化します。詳細については、「プライマリキーまたは一意制約のないテーブルの同期」をご参照ください。
テーブルを同期オブジェクトとして選択し、ターゲットでテーブル名または列名を変更する必要がある場合、1 つのタスクでサポートされるテーブルは最大 1,000 個です。1,000 個を超えるテーブルの場合は、複数のタスクを構成するか、データベース全体を同期オブジェクトとして選択してください。
増分同期を行うには、バイナリロギングを有効にして、
loose_polar_log_binパラメーターをonに設定する必要があります。詳細については、「バイナリロギングを有効にする」および「パラメーターの変更」をご参照ください。スキーマ同期または完全データ同期中に、データベースまたはテーブルのスキーマを変更する DDL ステートメントを実行しないでください。実行するとタスクが失敗します。
重要:PolarDB for MySQL クラスターでバイナリロギングを有効にすると、バイナリログファイルのストレージ料金が発生します。タスクの種類に基づいてバイナリログの保持期間を設定してください。増分のみの同期の場合は少なくとも 24 時間、完全同期と増分同期の場合は少なくとも 7 日間です。完全データ同期が完了した後、保持期間を 24 時間以上に調整できます。保持期間が不十分な場合、DTS がバイナリログを取得できなくなり、タスクの失敗につながる可能性があります。例外的な状況では、データの不整合やデータ損失が発生する可能性があります。前述の要件に基づいてバイナリログの保持期間を構成してください。そうしないと、DTS のサービスレベル契約 (SLA) に記載されているサービスの信頼性やパフォーマンスが保証されない場合があります。
同期オブジェクトの制限
DTS は、ソースの PolarDB for MySQL クラスターの読み取り専用ノードを同期しません。
DTS は、ソースクラスターから Object Storage Service (OSS) 外部テーブルを同期しません。
同期オブジェクトに 4 バイト文字 (珍しい文字や絵文字など) を含むデータが含まれている場合、ターゲットテーブルは UTF8mb4 文字セットを使用する必要があります。スキーマ同期を使用する場合は、ターゲットデータベースの
character_set_serverパラメーターを UTF8mb4 に設定してください。MySQL データベースの列名では大文字と小文字が区別されません。ソースデータベースの複数の列名が大文字と小文字のみで異なる場合、それらのデータはターゲットの同じ列に書き込まれ、予期しない結果が生じる可能性があります。
DDL 操作の制限
同期中にソーステーブルで DDL 操作を実行するために pt-online-schema-change を使用しないでください。使用するとタスクが失敗します。
同期中に外部データソースがターゲットデータベースに書き込まない場合、ソーステーブルに対してオンライン DDL 操作を実行するために Data Management (DMS) を使用します。詳細については、「ロックフリーデータ定義言語(DDL)操作の実行」をご参照ください。
同期中に外部データソースがターゲットデータベースに書き込みを行い、かつオンライン DDL ステートメントも実行する場合、ターゲットでデータ損失が発生する可能性があります。
送信先で DDL 文の実行に失敗した場合、タスクは実行を継続します。タスクログで失敗した DDL 文を確認します。詳細については、「タスクログの表示」をご参照ください。
双方向同期のルール
双方向同期インスタンスには、フォワードタスクとリバースタスクが含まれます。オブジェクトが両方のタスクに含まれる場合:
完全データと増分データの両方を同期できるのは 1 つのタスクのみです。もう一方のタスクは増分データのみを同期します。
現在のタスクによって同期されたデータは、もう一方のタスクのソースデータとして使用されません。
その他の注意事項
同期が完了した後 (ステータスが完了に変わった後)、
analyze table <テーブル名>を実行してデータ整合性を検証してください。ソースデータベースでの高可用性 (HA) スイッチオーバーなどの場合、データがメモリにのみ書き込まれ、データ損失が発生している可能性があります。DTS タスクが失敗した場合、DTS のテクニカルサポートは 8 時間以内にタスクの復元を試みます。復元中、タスクが再起動されたり、タスクパラメーターが変更されたりする場合があります。データベースパラメーターは変更されません。
重要:スキーマ同期中、DTS はソースデータベースからターゲットデータベースに外部キーを同期します。完全データ同期および増分データ同期中、DTS はセッションレベルで外部キー制約チェックとカスケード操作を一時的に無効にします。同期中にソースでカスケード更新または削除操作を実行すると、データの不整合が発生する可能性があります。
重要:DTS は、バイナリログファイルの位置を進めるために、ソースデータベースで定期的に CREATE DATABASE IF NOT EXISTS \`test\` を実行します。データ同期タスクの構成
ステップ 1:データ同期タスクページに移動
Data Management (DMS) コンソールにログインします。
上部のナビゲーションバーで、[データ + AI] をクリックします。
左側のナビゲーションウィンドウで、[DTS (DTS)] > [データ同期] を選択します。
操作は、DMS コンソールのモードおよびレイアウトに基づいて異なる場合があります。詳細については、「シンプルモード」および「DMS コンソールのレイアウトとスタイルをカスタマイズする」をご参照ください。新しい DTS コンソールのデータ同期タスクページに直接アクセスすることもできます。
ステップ 2:リージョンの選択
[データ同期タスク] の右側で、データ同期インスタンスが存在するリージョンを選択します。
重要:新しい DTS コンソールでは、上部のナビゲーションバーでリージョンを選択します。
ステップ 3:タスクの作成
[タスクの作成] をクリックして、タスク構成ページを開きます。
任意:右上隅の [新しい構成ページ] をクリックします。
重要:右上隅に [前のバージョンに戻る] が表示されている場合は、このステップをスキップしてください。バージョンによって一部のパラメーターが異なるため、新しい構成ページを推奨します。
ステップ 4:ソースデータベースとターゲットデータベースの構成
注意:ソースデータベースとターゲットデータベースを構成した後、続行する前にページに表示される制限事項をお読みください。このステップをスキップすると、タスクが失敗したり、データの不整合が発生したりする可能性があります。
以下のパラメーターを構成します。
ソースデータベース
| パラメーター | 説明 |
|---|---|
| タスク名 | DTS タスクの名前。DTS は自動的に名前を生成します。簡単に識別できるように、わかりやすい名前を指定してください。名前は一意である必要はありません。 |
| DMS データベースインスタンスの選択 | 既存のデータベースインスタンスを選択してパラメーターを自動入力するか、データベースを手動で設定します。データベースを登録するには、DMS コンソールで [DMS データベースインスタンスの追加] をクリックするか、DTS コンソールの [データベース接続] ページで登録します。詳細については、「Alibaba Cloud データベースインスタンスの登録」、「第三者クラウドサービスまたは自己管理データベース上でホストされているデータベースの登録」、および「データベース接続の管理」をご参照ください。 |
| データベースタイプ | [PolarDB for MySQL] を選択します。 |
| アクセス方法 | [Alibaba Cloud インスタンス] を選択します。 |
| インスタンスリージョン | ソースの PolarDB for MySQL クラスターが存在するリージョン。 |
| Alibaba Cloud アカウント間でのデータ複製 | 現在の Alibaba Cloud アカウントのデータベースを使用する場合は、[いいえ] を選択します。 |
| PolarDB クラスター ID | ソースの PolarDB for MySQL クラスターの ID。 |
| データベースアカウント | ソースクラスターのアカウント。アカウントには、同期するオブジェクトに対する読み取り権限が必要です。 |
| データベースパスワード | データベースアカウントのパスワード。 |
| 暗号化 | 接続を暗号化するかどうか。SSL 暗号化についての詳細は、「SSL 暗号化の設定」をご参照ください。 |
ターゲットデータベース
| パラメーター | 説明 |
|---|---|
| DMS データベースインスタンスの選択 | 既存のデータベースインスタンスを選択してパラメーターを自動入力するか、データベースを手動で設定します。データベースを登録するには、DMS コンソールで [DMS データベースインスタンスの追加] をクリックするか、DTS コンソールの [データベース接続] ページで登録します。詳細については、「Alibaba Cloud データベースインスタンスの登録」、「サードパーティのクラウドサービスまたは自己管理データベース上でホストされているデータベースの登録」、および「データベース接続の管理」をご参照ください。 |
| データベースタイプ | [MySQL] を選択します。 |
| アクセス方法 | [Alibaba Cloud インスタンス] を選択します。 |
| インスタンスのリージョン | ターゲットの ApsaraDB RDS for MySQL インスタンスが存在するリージョン。 |
| Alibaba Cloud アカウント間でのデータ複製 | 現在の Alibaba Cloud アカウントのデータベースを使用する場合は、[いいえ] を選択します。 |
| RDS インスタンス ID | ターゲットの ApsaraDB RDS for MySQL インスタンスの ID。 |
| データベースアカウント | ターゲットインスタンスのアカウント。アカウントには、ターゲットデータベースに対する読み取りおよび書き込み権限が必要です。 |
| データベースパスワード | データベースアカウントのパスワード。 |
| 暗号化 | 「[暗号化なし]」または「[SSL 暗号化]」を選択します。SSL 暗号化を使用するには、DTS タスクを設定する前に、ApsaraDB RDS for MySQL インスタンスで SSL 暗号化を有効化します。詳細については、「クラウド証明書を使用して SSL 暗号化を有効化する」をご参照ください。 |
ステップ 5:接続性のテストとオブジェクトの構成
ページ下部の [接続性のテストと続行] をクリックします。
DTS は、Alibaba Cloud データベースインスタンスのホワイトリストに、DTS サーバーの CIDR ブロックを自動的に追加します。ECS ホスト型自己管理データベースの場合、DTS は ECS セキュリティグループルールにも CIDR ブロックを追加します。ECS インスタンスがデータベースにアクセスできることを確認し、データベースが複数のインスタンスにまたがる場合は、各 ECS インスタンスに手動で CIDR ブロックを追加してください。オンプレミスまたはサードパーティのクラウドデータベースの場合、DTS の CIDR ブロックをデータベースのホワイトリストに手動で追加してください。詳細については、「DTS サーバーの CIDR ブロック」セクションをご参照ください。
接続性テストに合格したら、同期するオブジェクトを構成します。
| パラメーター | 説明 |
|---|---|
| 同期タイプ | [スキーマ同期]、[完全データ同期]、および [増分データ同期] を選択します。事前チェック後、DTS はソースからターゲットに既存データを同期し、これを増分同期のベースラインとします。 |
| ソースデータベースのトリガーを移行する方法 | ([スキーマ同期] が選択されている場合のみ利用可能) トリガーを同期する方法。要件に基づいて構成します。詳細については、「ソースデータベースからトリガーを同期または移行する」をご参照ください。 |
| 同期トポロジ | [一方向同期] を選択します。 |
| 競合するテーブルの処理モード | [事前チェックとエラー報告]:ターゲットにソースと同じ名前のテーブルがあるかどうかをチェックします。同じ名前が存在する場合、エラーが返され、タスクは開始できません。競合するテーブルを削除またはリネームできない場合は、オブジェクト名マッピングを使用してリネームします。詳細については、「オブジェクト名のマッピング」をご参照ください。[エラーを無視して続行]:名前の競合チェックをスキップします。 警告 注意:このオプションはデータの不整合を引き起こす可能性があります。完全データ同期中、ターゲットに一致するプライマリキーまたは一意キーを持つレコードは保持されます。増分同期中、それらは上書きされます。スキーマが異なる場合、初期化が部分的に失敗したり、タスクが失敗したりする可能性があります。 |
| ターゲットインスタンスのオブジェクト名の大文字/小文字 | 宛先のデータベース、テーブル、カラム名の大文字/小文字のポリシーを指定します。デフォルト値は [DTS デフォルトポリシー] です。詳細については、「宛先インスタンスのオブジェクト名の大文字/小文字を指定する」をご参照ください。 |
| ソースオブジェクト | [ソースオブジェクト] セクションからオブジェクトを選択し、 |
| 選択されたオブジェクト | オブジェクトを右クリックして、名前を変更するかフィルター条件を設定します。[一括編集] をクリックすると、複数のオブジェクトを一度に名前変更できます。詳細については、「オブジェクト名マッピング」および「フィルター条件の指定」をご参照ください。オブジェクト名マッピングを使用してオブジェクトの名前を変更すると、依存オブジェクトの同期が失敗する場合があります。 |
ステップ 6:詳細設定の構成
[次へ:詳細設定] をクリックし、以下を構成します。
| パラメーター | 説明 |
|---|---|
| タスクスケジューリング用の専用クラスター | デフォルトでは、DTS はタスクを共有クラスターにスケジュールします。タスクの安定性を向上させるには、専用クラスターを購入してください。詳細については、「DTS 専用クラスターとは」をご参照ください。 |
| ソーステーブルで生成されたオンライン DDL ツールの一次テーブルをターゲットデータベースにコピーする | DTS がオンライン DDL 操作 (DMS または gh-ost) からの一時テーブルをどのように処理するかを制御します。 重要 注意:pt-online-schema-change はサポートされていません。[はい]:オンライン DDL 操作からの一時テーブルを同期します。オンライン DDL が大量のデータを生成する場合、同期時間が長くなる可能性があります。[いいえ、DMS オンライン DDL に適応]:一時テーブルをスキップし、DMS からの元の DDL のみを同期します。ターゲットのテーブルがロックされる可能性があります。[いいえ、gh-ost に適応]:一時テーブルをスキップし、gh-ost からの元の DDL のみを同期します。デフォルトまたはカスタムの正規表現を使用して、gh-ost ツールのシャドウテーブルや不要なテーブルをフィルタリングできます。ターゲットのテーブルがロックされる可能性があります。 |
| 接続失敗時の再試行時間 | タスク開始後に DTS が失敗した接続を再試行する時間。有効な値:10~1440 分。デフォルト:720 分。30 分以上に設定してください。再試行期間内に DTS が再接続した場合、タスクは再開されます。それ以外の場合、タスクは失敗します。複数のタスクが同じソースまたはターゲットデータベースを共有する場合、最も短い再試行時間が優先されます。注意:再試行中も DTS インスタンスの料金が発生します。 |
| その他の問題に対する再試行時間 | DTS が失敗した DDL または DML 操作を再試行する期間。有効な値:1~1440 分。デフォルト:10 分。10 分より大きい値に設定してください。また、[失敗した接続の再試行時間] の値より小さくする必要があります。 |
| 完全データ移行のスロットリングを有効にする | ([完全データ同期] が選択されている場合のみ利用可能) [ソースデータベースへの秒間クエリ数 (QPS)]、[完全データ移行の RPS]、および [完全移行のデータ移行速度 (MB/s)] を構成して完全同期をスロットリングし、ターゲットへの負荷を軽減します。 |
| 増分データ同期のスロットリングを有効にする | [増分データ同期の RPS] および [増分同期のデータ同期速度 (MB/s)] を構成して増分同期をスロットリングします。 |
| 環境タグ | DTS インスタンスを識別するためのオプションのタグ。 |
| フォワードタスクとリバースタスクのハートビートテーブルに対する SQL 操作を削除するかどうか | [はい]:ハートビート SQL 操作をソースに書き込みませんが、インスタンスに遅延が表示される場合があります。[いいえ]:ハートビート SQL 操作をソースに書き込みます。これにより、ソースデータベースの物理バックアップとクローニングに影響を与える可能性があります。 |
| ETL の構成 | 抽出・変換・書き出し (ETL) を有効にするかどうか。はい: コードエディタにデータ処理文を入力します。詳細については、「データ移行またはデータ同期タスクで ETL を設定する」をご参照ください。いいえ: ETL は有効になりません。詳細については、「ETL とは |
| モニタリングとアラート | [いいえ]: アラート機能が有効になっていません。[はい]: アラートのしきい値と通知設定を構成します。タスクが失敗した場合、または同期遅延がしきい値を超えた場合にアラートが送信されます。詳細については、「DTS タスクを作成するときにモニタリングとアラートを設定する」をご参照ください。 |
ステップ 7:データ検証の構成 (任意)
[次のステップ: データ検証] をクリックして、データ検証を設定します。詳細については、「データ検証タスクの設定」をご参照ください。
ステップ 8:事前チェックの実行
[次へ:タスク設定の保存と事前チェック] をクリックします。
このタスク構成の API パラメーターをプレビューするには、[次へ:タスク設定の保存と事前チェック] にカーソルを合わせ、[OpenAPI パラメーターのプレビュー] をクリックします。
重要:タスクを開始する前に、事前チェックに合格する必要があります。
重要:事前チェックが失敗した場合は、失敗した各項目の横にある [詳細の表示] をクリックし、問題を解決してから事前チェックを再実行してください。
重要:アラートがトリガーされた場合:無視できないアラートについては、問題を解決してから事前チェックを再実行してください。無視できるアラートについては、[アラート詳細の確認] をクリックし、ダイアログボックスで [無視] をクリックして確認し、[再度事前チェック] をクリックします。
ステップ 9:データ同期インスタンスの購入
[成功率] が 100% に達するまで待ってから、[次へ:インスタンスの購入] をクリックします。
[購入] ページで、以下のパラメーターを構成します。
| セクション | パラメーター | 説明 |
|---|---|---|
| 新しいインスタンスクラス | 課金方法 | [サブスクリプション]:前払いで、長期利用に適しています。[従量課金]:時間単位で課金され、短期利用に適しています。不要になったらインスタンスをリリースして課金を停止します。 |
| リソースグループ設定 | 同期インスタンスのリソースグループ。デフォルト:[デフォルトリソースグループ]Resource Management とは | |
| インスタンスクラス | DTS は異なる同期速度のインスタンスクラスを提供します。要件に基づいて選択してください。詳細については、「データ同期インスタンスのインスタンスクラス」をご参照ください。 | |
| サブスクリプション期間 | ([サブスクリプション] 課金方法の場合のみ利用可能) サブスクリプション期間:1~9 か月、1 年、2 年、3 年、または 5 年。 |
[Data Transmission Service (従量課金) 利用規約] を読み、選択してから、[購入して開始] をクリックします。確認ダイアログボックスで、[OK] をクリックします。
タスクがタスクリストに表示されます。そこで進捗状況を監視できます。