リージョンやアカウントをまたいで PolarDB for MySQL クラスターを実行する場合、クラスター間のデータ整合性を維持するには、信頼性の高いレプリケーションメカニズムが必要です。Data Transmission Service (DTS) は、PolarDB for MySQL クラスター間の片方向および双方向のデータ同期を提供するため、以下のことが可能になります。
ディザスタリカバリ:スタンバイクラスターをプライマリクラスターと同期させ、必要なときに迅速にフェイルオーバーします。
マルチリージョンデプロイメント:異なるリージョンのクラスター間でデータをレプリケーションし、地理的に分散したユーザーの読み取りレイテンシを削減します。
無停止移行:アプリケーションの実行中にクラスター間でデータを同期し、ダウンタイムなしでトラフィックを切り替えます。
前提条件
開始する前に、以下をご確認ください。
ソースとターゲットの両方の PolarDB for MySQL クラスターが作成されていること。詳細については、「カスタム購入」および「サブスクリプションクラスターの購入」をご参照ください。
ターゲットクラスターの利用可能なストレージ容量が、ソースクラスターの総データサイズよりも大きいこと。
制限事項
ソースデータベース
テーブルにはプライマリキーまたは一意制約が必要で、すべてのフィールドが一意である必要があります。これらの制約がないテーブルでは、送信先でレコードが重複する可能性があります。双方向同期の場合、プライマリキーまたは一意制約のないテーブルを処理するには、[Exactly-Once 書き込み] 機能を有効にします。詳細については、「プライマリキーまたは一意制約のないテーブルを同期する」をご参照ください。
(データベース全体ではなく) テーブルを同期し、ターゲットでテーブルまたは列の名前を変更する必要がある場合、1 つのタスクでサポートされるテーブルは最大 1,000 個です。1,000 個を超えるテーブルを同期する場合は、作業を複数のタスクに分割するか、データベース全体を同期してください。
バイナリロギングの要件:
バイナリロギングを有効化するには、
loose_polar_log_binパラメーターをONに設定します。このパラメーターが設定されていない場合、事前チェックは失敗し、DTS タスクを開始できません。「バイナリロギングの有効化」および「パラメーターの変更」をご参照ください。> 注意: バイナリロギングを有効化すると、ストレージ料金が発生します。バイナリログは少なくとも3 日間保持してください。7 日間の保持期間を推奨します。保持期間が短いと、データの不整合や損失が発生する可能性があり、DTS サービスの信頼性に影響を与えることがあります。保持期間を設定するには、「バイナリロギングを有効化する」の保持期間を変更するセクションをご参照ください。
スキーマ同期または完全データ同期中に、データベースまたはテーブルスキーマを変更する DDL 文を実行しないでください。実行するとタスクが失敗します。
スキーマ同期中、DTS はソースからターゲットへ外部キーも同期します。完全同期および増分同期中、DTS はセッションレベルで外部キー制約チェックとカスケード操作を一時的に無効にします。この間にソースでカスケード更新または削除操作を実行すると、データの不整合が発生する可能性があります。
その他の制限事項
| 制限事項 | 詳細 |
|---|---|
| 読み取り専用ノード | DTS はソースクラスターの読み取り専用ノードを同期しません。 |
| OSS 外部テーブル | DTS は Object Storage Service (OSS) の外部テーブルを同期しません。 |
| コメントで定義されたパーサ | DTS はコメントで定義されたパーサを使用するデータを同期しません。 |
| 4 バイト文字 | 希少文字または 4 バイトの UTF-8 文字を含むデータの場合、ターゲットデータベースとテーブルで UTF8mb4 文字セットを使用する必要があります。スキーマ同期が有効な場合は、ターゲットデータベースの character_set_server パラメーターを UTF8mb4 に設定してください。 |
| DDL ツール | 同期中にソーステーブルで DDL 操作を実行するために、pt-online-schema-change などのツールの使用は推奨されません。その場合、DTS タスクが失敗します。オンライン DDL 操作を実行するには、Data Management (DMS) を使用してください。ただし、同期中に他のデータソースが送信先に書き込んでいない場合に限ります。同期中に複数のデータソースから送信先に書き込むと、データ損失が発生する可能性があります。 |
| ターゲットでの DDL 失敗 | 送信先で DDL 文が失敗した場合、同期タスクは続行されます。失敗した DDL 文は、タスクログで確認できます。詳細については、「タスクログの表示」をご参照ください。 |
| アカウントの同期 | データベースアカウントの同期には独自の前提条件があります。詳細については、「データベースアカウントの移行」をご参照ください。 |
| タスクの回復 | DTS タスクが失敗した場合、DTS サポートは 8 時間以内に復旧を試みます。タスクが再起動されたり、タスクパラメーター (データベースパラメーターではなく) が調整されたりする場合があります。変更される可能性のあるパラメーターについては、「インスタンスパラメーターの変更」をご参照ください。 |
パフォーマンスへの影響
完全データ同期中、DTS は両方のクラスターに同時に読み書きを行うため、負荷が増加します。影響を軽減するには、以下の対策を講じてください。
オフピーク時間帯に同期を実行します。
詳細設定で速度制限を有効にします (完全同期の QPS および RPS 制限を設定)。
完全データ同期が完了した後、ターゲットの表領域はソースよりも大きくなることが予想されます。これは、同時 INSERT 操作によってテーブルの断片化が発生するためです。
双方向同期
双方向同期は、2 つの PolarDB for MySQL クラスター間でのみサポートされます。3 つ以上のクラスターはサポートされていません。
DDL 操作は順方向でのみ同期できます。これにより、データ整合性が維持されます。
DTS は、循環同期を防ぐために、ターゲットに
dtsデータベースを作成します。タスクの実行中は、このデータベースを変更しないでください。双方向同期インスタンスには、順方向タスクと逆方向タスクが含まれます。オブジェクトが両方のタスクに存在する場合:
そのオブジェクトの完全データと増分データの両方を同期できるのは、一方のタスクのみです。もう一方のタスクは増分データのみを同期します。
一方のタスクによって同期されたデータは、もう一方のタスクのソースデータとしてフィードバックされません。
DTS は、バイナリログの位置を進めるために、ソースデータベースで定期的に
CREATE DATABASE IF NOT EXISTS \test\`` を実行します。
課金
| 同期タイプ | コスト |
|---|---|
| スキーマ同期と完全データ同期 | 無料 |
| 増分データ同期 | 課金されます。詳細については、「課金概要」をご参照ください。 |
同期可能な 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 はデータの不整合を引き起こす可能性があります。たとえば、テーブルを名前で同期してから名前を変更すると、DTS はそのテーブルの同期を停止します。これを避けるには、個々のテーブルではなくデータベース全体を同期し、名前変更前後のテーブルが属するデータベースが同期範囲に含まれていることを確認してください。
データ同期の設定
設定は、タスクリストへの移動、リージョンの選択、ソースとターゲットデータベースの設定、接続テスト、オブジェクトの選択と同期設定、詳細設定、事前チェックの実行、インスタンスの購入の 8 つのステップで構成されます。
ステップ 1:データ同期タスクページに移動
Data Management (DMS) コンソールにログインします。
上部のナビゲーションバーで、 [データ + AI] をクリックします。
左側のナビゲーションウィンドウで、DTS (DTS) > データ同期 を選択します。
ナビゲーションは、DMS コンソールのレイアウトによって異なる場合があります。『シンプルモード』および『DMS コンソールのレイアウトとスタイルのカスタマイズ』をご参照ください。また、直接『データ同期タスクページ』に移動することもできます。
ステップ 2:リージョンの選択
[データ同期タスク] ページで、同期インスタンスが存在するリージョンを選択します。
新しい DTS コンソールでは、上部のナビゲーションバーからリージョンを選択します。
ステップ 3:ソースとターゲットデータベースの設定
[タスクの作成] をクリックします。ウィザードページで、以下のパラメーターを設定します。
ソースとターゲットを設定した後、ページに表示される [制限事項] をよくお読みください。このステップをスキップすると、タスクの失敗やデータの不整合が発生する可能性があります。
タスク設定
| パラメーター | 説明 |
|---|---|
| タスク名 | DTS タスクの名前。DTS はデフォルトの名前を生成します。タスクを識別しやすくするために、わかりやすい名前を指定してください。名前は一意である必要はありません。 |
ソースデータベース
| パラメーター | 説明 |
|---|---|
| DMS データベースインスタンスの選択 | 既存の DMS データベースインスタンスを選択して接続パラメーターを自動入力するか、空白のまま手動でパラメーターを入力します。 |
| データベースタイプ | [PolarDB for MySQL] を選択します。 |
| アクセス方法 | [Alibaba Cloud インスタンス] を選択します。 |
| インスタンスリージョン | ソースクラスターが存在するリージョン。 |
| Alibaba Cloud アカウント間でのデータレプリケーション | Alibaba Cloud アカウント間で同期するかどうか。同一アカウントでの同期の場合は [いいえ] を選択します。 |
| PolarDB クラスター ID | ソースクラスターの ID。ソースとターゲットは同じクラスター (クラスター内での同期) でも、異なるクラスターでもかまいません。 |
| データベースアカウント | 同期対象のオブジェクトに対する読み取り権限を持つデータベースアカウント。 |
| データベースパスワード | データベースアカウントのパスワード。 |
| 暗号化 | 接続を暗号化するかどうか。詳細については、「SSL 暗号化の設定」をご参照ください。 |
ターゲットデータベース
| パラメーター | 説明 |
|---|---|
| DMS データベースインスタンスの選択 | 既存の DMS データベースインスタンスを選択して接続パラメーターを自動入力するか、空白のまま手動でパラメーターを入力します。 |
| データベースタイプ | [PolarDB for MySQL] を選択します。 |
| アクセス方法 | [Alibaba Cloud インスタンス] を選択します。 |
| インスタンスリージョン | ターゲットクラスターが存在するリージョン。 |
| PolarDB クラスター ID | ターゲットクラスターの ID。 |
| データベースアカウント | ターゲットデータベースに対する読み取り権限を持つデータベースアカウント。特権アカウントを推奨します。 |
| データベースパスワード | データベースアカウントのパスワード。 |
| 暗号化 | 接続を暗号化するかどうか。詳細については、「SSL 暗号化の設定」をご参照ください。 |
ステップ 4:接続テスト
[接続をテストして続行] をクリックします。
DTS は、そのサーバーの CIDR ブロックを自動的に Alibaba Cloud データベースインスタンスのホワイトリストおよび Elastic Compute Service (ECS) インスタンスのセキュリティグループルールに追加します。データセンターまたはサードパーティクラウドでホストされている自己管理データベースの場合、DTS の CIDR ブロックを手動で追加します。詳細については、「DTS サーバーの CIDR ブロックをオンプレミスデータベースのセキュリティ設定に追加する」をご参照ください。
DTS の CIDR ブロックをホワイトリストやセキュリティグループルールに追加すると、潜在的なセキュリティリスクが生じます。続行する前に、強力な認証情報の設定、公開ポートの制限、API 呼び出しの検証、ホワイトリストの定期的な監査などの予防措置を講じてください。セキュリティを強化するために、Express Connect、VPN Gateway、または Smart Access Gateway を介して DTS をデータベースに接続してください。
ステップ 5:オブジェクトの選択と同期設定
| パラメーター | 説明 |
|---|---|
| 同期タイプ | デフォルトでは、増分データ同期 が選択されています。また、スキーマ同期 および 全量データ同期 も必ず選択してください。DTS は、既存のデータをベースラインとして同期した後、変更を増分的に適用します。 |
| ソースデータベース内のトリガーの移行方法 | 同期中のトリガーの処理方法です。スキーマ同期 を選択し、かつトリガーの同期を行う場合にのみ設定してください。詳細については、「ソースデータベースからトリガーを同期または移行する」をご参照ください。 |
| 同期トポロジー | 本例では、単方向同期 を選択しています。その他の選択肢として、双方向同期 も利用可能です。 |
| 競合テーブルの処理モード | 送信先に、ソーステーブルと同名のテーブルが存在する場合の DTS の動作です。「事前チェックとエラー報告」を選択すると、同名のテーブルが検出された時点でタスクが停止します。「エラーを無視して続行」を選択すると、チェックがスキップされ、データの不整合を引き起こす可能性があります。使用には十分ご注意ください。 |
| ソースオブジェクト | ソースオブジェクト セクションからオブジェクトを選択し、矢印アイコンをクリックして、選択済みオブジェクト セクションへ移動します。列、テーブル、またはデータベースを選択できます。テーブルまたは列のみを選択した場合、ビュー、トリガー、ストアドプロシージャは同期対象から除外されます。 |
| 選択済みオブジェクト | オブジェクトを右クリックすると、送信先でのオブジェクト名マッピング(名称変更)や、同期対象とする特定の SQL 操作の選択が可能です。一括編集オブジェクト名のマップ をクリックすると、複数のオブジェクトを一度に名称変更できます。テーブルを右クリックすると、行レベルのフィルタリング用の WHERE 条件を追加できます。詳細については、「」および「フィルター条件の指定」をご参照ください。 |
オブジェクト選択のガイドライン
テーブルを参照するビューや外部キー関係を持つテーブルなど、依存関係の欠落による失敗を避けるために、関連するすべてのオブジェクトを一緒に選択してください。同期中にソースデータベースのテーブル名が (RENAME TABLE を介して) 変更される場合は、個々のテーブルではなくデータベース全体を選択して、名前変更前後の両方のデータベース名が同期範囲に含まれるようにしてください。
ステップ 6:詳細設定
[次へ:詳細設定] をクリックします。
データ検証
データ検証タスクを設定して、同期後のソースと送信先間の不整合を検出します。詳細については、「データ検証タスクの設定」をご参照ください。
詳細設定
| パラメーター | 説明 |
|---|---|
| タスクスケジューリング用の専用クラスター | デフォルトでは、DTS は共有クラスターを使用します。安定性を向上させるには、専用クラスターをご購入ください。詳細については、「DTS 専用クラスターとは」をご参照ください。 |
| アラートの設定 | タスクの失敗や遅延がしきい値を超えた場合にアラートを送信するよう設定します。[はい] を選択して、アラートのしきい値と通知先連絡先を設定してください。詳細については、「モニタリングとアラート機能の設定」をご参照ください。 |
| ターゲットデータベースのエンジンタイプの選択 | ターゲットクラスターのストレージエンジン:InnoDB(デフォルト)またはX-Engine(オンライントランザクション処理 (OLTP) 向けストレージエンジン)。 |
| ソーステーブルでオンライン DDL ツールが生成した一時テーブルをターゲットデータベースにコピーする | DTS がオンライン DDL ツール(DMS または gh-ost)によって生成された一時テーブルを処理する方法:[はい] — 一時テーブルのデータを同期します(大規模な変更の場合、タスクの持続時間が長くなる可能性があります)。[いいえ、DMS オンライン DDL に適応] — 一時テーブルをスキップし、元の DDL のみを同期します(ターゲットテーブルがロックされる可能性があります)。[いいえ、gh-ost に適応] — 一時テーブルをスキップし、元の gh-ost DDL のみを同期します(ターゲットテーブルがロックされる可能性があります。シャドウテーブルをフィルターするためのカスタム正規表現もサポートされます)。 |
| 接続失敗時のリトライ時間 | DTS が接続失敗後にリトライを継続する時間です。有効値:10~1,440 分。デフォルト:720 分。30 分以上に設定してください。この時間内に DTS が再接続できた場合、タスクは再開されます。複数のタスクが同じソースまたはターゲットデータベースを共有している場合、最も短いリトライ時間の設定が優先されます。 |
| その他の問題発生時のリトライ時間 | DDL または DML の失敗後に DTS がリトライを継続する時間です。有効値:1~1,440 分。デフォルト:10 分。10 分以上に設定してください。接続失敗時のリトライ時間より短く設定する必要があります。 |
| 完全データ同期時のスロットリングの有効化 | 完全同期中の読み取り/書き込み負荷を制限します。ソースデータベースへの秒間クエリ数 (QPS)、完全データ移行の RPS、および完全移行時のデータ移行速度 (MB/s) を設定します。完全データ同期 を選択した場合のみ利用可能です。 |
| 増分データ同期時のスロットリングの有効化 | 増分同期中の負荷を制限します。増分データ同期の RPS および増分同期時のデータ同期速度 (MB/s) を設定します。 |
| 環境タグ | DTS インスタンスを識別するためのタグです。任意で設定できます。 |
| ETL の設定 | 抽出・変換・書き出し (ETL) 変換を適用するかどうかを指定します。[はい] を選択すると、コードエディタにデータ処理文を記述できます。詳細については、「ETL の設定」および「ETL とは」をご参照ください。 |
| 転送および逆再生タスクのハートビートテーブルに対する SQL 操作の削除 | DTS がソースデータベースにハートビート SQL 操作を書き込むかどうかを指定します:[はい] — 書き込みを無効にします(DTS インスタンス上に同期遅延インジケーターが表示される可能性があります)。[いいえ] — 書き込みを有効にします(ソースデータベースの物理バックアップおよびクローン作成に影響を与える可能性があります)。 |
ステップ 7:事前チェックの実行
[次へ:タスク設定を保存して事前チェック] をクリックします。
このタスク設定の API パラメーターをプレビューするには、 [次へ:タスク設定を保存して事前チェック] にカーソルを合わせ、 [OpenAPI パラメーターのプレビュー] をクリックします。
DTS はタスクを開始する前に事前チェックを実行します。各事前チェック項目には、3 つの結果のいずれかがあります。
| 結果 | 意味 | 操作 |
|---|---|---|
| 合格 | 項目はすべての要件を満たしています。 | 操作は不要です。 |
| 失敗 | 項目は要件を満たしておらず、タスクをブロックします。 | 失敗した項目の横にある [詳細の表示] をクリックし、問題を修正してから [再度事前チェック] をクリックします。 |
| アラート | 項目は要件を完全には満たしていませんが、潜在的な影響を受けつつもタスクは続行できます。 | 無視する場合: [アラート詳細の確認] > [無視] > [OK] をクリックし、 [再度事前チェック] をクリックします。アラートを無視すると、データの不整合が発生する可能性があります。 |
ステップ 8:同期インスタンスの購入
[成功率] が [100%] に達するのを待ってから、 [次へ:インスタンスの購入] をクリックします。
[buy] ページで、以下を設定します。
| パラメーター | 説明 |
|---|---|
| 支払い方法 | サブスクリプション:固定期間の前払いです。長期利用に適しており、コスト効率が高くなります。従量課金:時間単位で課金され、短期利用に適しています。継続的な課金を避けるため、不要になったインスタンスはリリースしてください。 |
| リソースグループ設定 | インスタンスが属するリソースグループです。デフォルト:デフォルトのリソースグループResource Management とは。詳細については、をご参照ください。 |
| インスタンスクラス | データ同期インスタンスのインスタンスクラス同期スループットのクラスです。データ量とレイテンシー要件に基づいて選択します。詳細については、をご参照ください。 |
| サブスクリプション期間 | サブスクリプション期間です。1~9 ヶ月、または 1、2、3、5 年から選択できます。サブスクリプションの支払い方法でのみ利用可能です。 |
[Data Transmission Service (従量課金) 利用規約] を読み、同意してから、 [購入して開始] をクリックします。確認ダイアログで、 [OK] をクリックします。
タスクがタスクリストに表示されます。そこで進捗状況を監視してください。