Data Transmission Service (DTS) を使用して、PolarDB for MySQL クラスターから ApsaraDB RDS for MySQL インスタンスへデータを継続的に同期します。主なユースケースには、ディザスタリカバリ、読み取り負荷のオフロード、ゼロダウンタイム移行トランジションが含まれます。
サポートされる送信先タイプ
本トピックでは、ApsaraDB RDS for MySQL インスタンスを送信先として使用します。以下の送信先タイプにも同様の手順が適用されます。
ApsaraDB RDS for MySQL インスタンス
Elastic Compute Service (ECS) 上でホストされる自己管理データベース
Express Connect、VPN Gateway、または Smart Access Gateway 経由で接続された自己管理データベース
Database Gateway 経由で接続された自己管理データベース
Cloud Enterprise Network (CEN) 経由で接続された自己管理データベース
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
PolarDB for MySQL クラスター。詳細については、「サブスクリプションクラスターの購入」または「従量課金クラスターの購入」をご参照ください。
送信先としての ApsaraDB RDS for MySQL インスタンス。詳細については、「ApsaraDB RDS for MySQL インスタンスの作成」をご参照ください。
送信先インスタンスに、ソースクラスターの合計データサイズを超える十分なストレージ容量があること
同期対象オブジェクトに対する読み取り権限を持つソースデータベースアカウント
ターゲットデータベースに対する読み取りおよび書き込み権限を持つ送信先データベースアカウント
ソースクラスターでバイナリロギングが有効化されており、
loose_polar_log_binをonに設定しています(増分同期に必要)。詳細については、「バイナリロギングの有効化」および「パラメーターの変更」をご参照ください。
バイナリロギングを有効化すると、PolarDB for MySQL クラスターにおけるバイナリログファイルの保存に伴うストレージ料金が発生します。
バイナリログの保持期間に関する要件は以下のとおりです。
| タスクタイプ | 最低保持期間 |
|---|---|
| 増分データ同期のみ | 24 時間 |
| 完全データ同期+増分データ同期 | 7 日間 |
完全データ同期が完了した後は、保持期間を 24 時間より長く設定できます。バイナリログの保持期間が十分でない場合、DTS がログを読み取れず、タスクが失敗する可能性があります。また、例外的なケースではデータの不整合や損失が発生する場合があります。これらの要件を満たさないタスクは、DTS のサービスレベルアグリーメント(SLA)の対象外となります。
制限事項
ソースデータベースの制限事項
テーブルには PRIMARY KEY または一意制約(UNIQUE constraint)が必要であり、すべてのフィールドが一意である必要があります。これらの制約がないテーブルを使用すると、送信先に重複レコードが生成される可能性があります。
テーブルを選択して同期対象とし、そのテーブルを編集(例:テーブル名またはカラム名の変更)する必要がある場合、1 つのタスクで最大 1,000 個のテーブルをサポートします。1,000 個を超えるテーブルを同期する場合は、複数のタスクを構成するか、データベース単位での同期を実行してください。
ソース PolarDB for MySQL クラスターの読み取り専用ノードは同期できません。
同期中の DDL 操作
同期中に、ソーステーブルに対して pt-online-schema-change を使用した DDL 操作は行わないでください。これによりタスクが失敗する可能性があります。
DTS がターゲットデータベースへの唯一の書き込み元である場合、Data Management (DMS) を使用してソーステーブルに対してオンライン DDL 操作を実行できます。「ロックフリー操作の実行」をご参照ください。
DTS 以外のツールもターゲットデータベースへ書き込む場合、DMS のオンライン DDL 操作によってターゲット側でデータ損失が発生する可能性があります。
RENAME TABLE risk
同期対象としてテーブル(データベースではなく)を選択し、同期中にそのテーブル名を変更した場合、当該テーブルのデータ同期が停止します。これを回避するには、同期対象としてデータベース全体を選択し、名前変更前および変更後のデータベース名の両方を同期対象オブジェクトに含める必要があります。
完全データ同期のパフォーマンス
初期完全同期中、DTS はソースおよび送信先の両方で読み取りおよび書き込みリソースを使用します。負荷を最小限に抑えるため、非ピーク時間帯に同期を実行することを推奨します。完全同期中に並列で INSERT 操作を実行すると、送信先のテーブルが断片化し、完全同期完了後に送信先の表領域がソースよりも大きくなります。
外部キーの動作
スキーマ同期中、DTS はソースから送信先へ外部キーを同期します。
完全および増分データ同期中、DTS はセッションレベルで外部キーの制約チェックおよびカスケード操作を一時的に無効化します。同期中にソースでカスケード更新または削除操作を実行すると、データの不整合が発生する可能性があります。
課金
| 同期タイプ | 料金 |
|---|---|
| スキーマ同期および完全データ同期 | 無料 |
| 増分データ同期 | 課金済み。詳細については、「課金概要 |
サポートされる同期トポロジ
詳細については、「同期トポロジ」をご参照ください。
単方向 1 対 1 同期
単方向 1 対多同期
単方向カスケード同期
双方向カスケード同期
単方向多対 1 同期
双方向 1 対 1 同期
同期可能な 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 |
データ同期タスクの構成
ステップ 1:データ同期タスクページを開く
Data Management (DMS) コンソール にログインします。
上部のナビゲーションバーで、DTS をクリックします。
左側のナビゲーションウィンドウで、DTS (DTS) > データ同期 を選択します。
ナビゲーションオプションは、DMS コンソールモードによって異なります。詳細については、「シンプルモード」または「DMS コンソールのレイアウトとスタイルをカスタマイズする」をご参照ください。また、「データ同期タスクページ」に直接アクセスすることもできます。
ステップ 2:タスクの作成
同期インスタンスを配置するリージョンを選択します。
新しい DTS コンソールでは、上部のナビゲーションバーからリージョンを選択します。
タスクの作成 をクリックします。
(任意)前のバージョンに戻る ボタンが表示されていない場合、右上隅の 新しい構成ページ をクリックします。利用可能な場合は新しい構成ページを使用してください。バージョン間で一部のパラメーターが異なります。
ステップ 3:ソースおよび送信先データベースの構成
ソースおよび送信先データベースの構成後は、次に進む前にページ上部に表示される 制限事項 を必ずご確認ください。これを省略すると、タスクの失敗やデータの不整合が発生する可能性があります。
ソースデータベースのパラメーター:
| パラメーター | 説明 |
|---|---|
| タスク名 | タスクの名前です。DTS がデフォルト名を割り当てます。識別が容易になるよう、意味のある名前を指定してください。名前の重複は許可されます。 |
| DMS データベースインスタンスの選択 | 既存の登録済みインスタンスを選択するか、ソースデータベースを手動で設定します。 Alibaba Cloud データベースを登録するには、「Alibaba Cloud データベースインスタンスを登録する」をご参照ください。 自己管理データベースを登録するには、「サードパーティのクラウドサービスでホストされているデータベースまたは自己管理データベースを登録する」をご参照ください。 DTS コンソールで、[データベース接続] ページを使用します。 |
| データベースタイプ | PolarDB for MySQL を選択します。 |
| アクセス方法 | Alibaba Cloud インスタンス を選択します。 |
| インスタンスリージョン | ソース PolarDB for MySQL クラスターが配置されているリージョンです。 |
| Alibaba Cloud アカウント間でのデータ複製 | いいえ を選択します(本例では同一の Alibaba Cloud アカウントを使用します)。 |
| PolarDB クラスター ID | ソース PolarDB for MySQL クラスターの ID です。 |
| データベースアカウント | 同期対象オブジェクトに対する読み取り権限を持つアカウントです。 |
| データベースパスワード | データベースアカウントのパスワードです。 |
| 暗号化 | ソース クラスターへの接続を暗号化するかどうか。詳細については、「SSL 暗号化の設定」をご参照ください。 |
送信先データベースのパラメーター:
| パラメーター | 説明 |
|---|---|
| DMS データベースインスタンスの選択 | 既存の登録済みインスタンスを選択するか、送信先データベースを手動で構成してください。上記の登録リンクをご参照ください。 |
| データベースタイプ | MySQL を選択します。 |
| アクセス方法 | Alibaba Cloud インスタンス を選択します。 |
| インスタンスリージョン | 送信先 ApsaraDB RDS for MySQL インスタンスが配置されているリージョンです。 |
| Alibaba Cloud アカウント間でのデータ複製 | いいえ を選択します。 |
| RDS インスタンス ID | 送信先 ApsaraDB RDS for MySQL インスタンスの ID です。 |
| データベースアカウント | ターゲットデータベースに対する読み取りおよび書き込み権限を持つアカウントです。 |
| データベースパスワード | データベースアカウントのパスワードです。 |
| 暗号化 | [非暗号化] または [SSL 暗号化] を選択します。[SSL 暗号化] を選択した場合は、まず RDS インスタンスで SSL 暗号化を有効化してください。詳細については、「SSL 暗号化機能の設定」をご参照ください。 |
ステップ 4:接続性のテスト
接続性のテストと続行 をクリックします。
DTS は、その CIDR ブロックを Alibaba Cloud データベースインスタンスのホワイトリストと、ECS でホストされているデータベースのセキュリティグループルールに自動的に追加します。複数の ECS インスタンスでホストされているデータベースの場合、各 ECS インスタンスのセキュリティグループルールに CIDR ブロックを手動で追加する必要があります。データセンターまたはサードパーティのクラウドプロバイダーの自己管理データベースの場合、DTS の CIDR ブロックを手動で追加する必要があります。詳細については、「DTS サーバーの CIDR ブロックを追加する」をご参照ください。
DTS の CIDR ブロックをホワイトリストまたはセキュリティグループに追加すると、潜在的なセキュリティリスクが発生します。続行する前に、アカウント認証情報の強化、公開ポートの制限、API 呼び出しの認証、ホワイトリストルールの定期監査、可能であれば Express Connect、VPN Gateway、または Smart Access Gateway を介した接続など、予防措置を講じてください。
ステップ 5:同期対象オブジェクトの選択
同期対象の選択 ページで、以下のパラメーターを構成します。
| パラメーター | 説明 |
|---|---|
| 同期タイプ | スキーマ同期、完全データ同期、および 増分データ同期 を選択します。完全データ同期は、増分同期の基盤(ベースライン)を確立します。完全な同期セットアップを行うには、これら 3 つを同時に選択してください。増分データ同期 はデフォルトで選択されています。 |
| ソースデータベース内のトリガーの移行方法 | スキーマ同期 を選択した場合にのみ利用可能です。トリガーの処理方法を選択します。「ソースデータベースからのトリガーの同期または移行」をご参照ください。 |
| 同期トポロジ | 単方向同期 を選択します。 |
| 競合テーブルの処理モード | 事前チェックとエラー報告(デフォルト):ソースと送信先に同名のテーブルが存在する場合、事前チェックが失敗します。競合を解決するには、オブジェクト名マッピングを使用します。「オブジェクト名マッピング」をご参照ください。エラーを無視して続行:同名のテーブルに関する事前チェックをスキップします。フル同期中は、主キーまたは一意キーの値が一致する場合、送信先の既存レコードが保持されます。増分同期中は、一致するレコードが上書きされます。スキーマが異なる場合、同期が部分的に失敗する可能性があります。 |
| 送信先インスタンスにおけるオブジェクト名の大文字小文字の区別 | デフォルトは DTS デフォルトポリシー です。宛先インスタンスで特定の大文字小文字の区別が必要な場合は調整してください。詳細については、「宛先インスタンスでのオブジェクト名の大文字小文字の指定」をご参照ください。 |
| ソースオブジェクト | オブジェクトを選択し、矢印アイコンをクリックして 選択済みオブジェクト に移動します。カラム、テーブル、またはデータベースを選択できます。テーブルまたはカラムを選択した場合、ビュー、トリガー、ストアドプロシージャは除外されます。 |
| 選択済みオブジェクト | オブジェクトを右クリックして、名前を変更するか、行レベルのフィルター条件を設定します。[一括編集] をクリックして、複数のオブジェクトを一度に名前を変更します。「オブジェクト名のマッピング」および「フィルター条件の設定」をご参照ください。オブジェクトの名前を変更すると、依存オブジェクトの同期が中断される場合があります。 |
ステップ 6:高度な設定の構成
次へ:高度な設定 をクリックし、以下の項目を構成します。
| パラメーター | 説明 |
|---|---|
| タスクスケジューリング用の専用クラスター | DTS はデフォルトで共有クラスターを使用します。タスクの安定性を高めるには、専用クラスターを購入してください。詳細については、「DTS 専用クラスターとは」をご参照ください。 |
| ソーステーブルに生成されたオンライン DDL ツールの一時テーブルをターゲットデータベースにコピーする | DTS がオンライン DDL ツール (DMS または gh-ost) からの一時テーブルをどのように処理するかを制御します。はい:一時テーブルのデータを同期します (同期時間が長くなる可能性があります)。いいえ、DMS オンライン DDL に適応:一時テーブルをスキップします。最終的な DDL のみが同期されます (ターゲットテーブルが一時的にロックされる可能性があります)。いいえ、gh-ost に適応:gh-ost のシャドウテーブルをスキップします。最終的な DDL のみが同期されます (ターゲットテーブルが一時的にロックされる可能性があります)。pt-online-schema-change は使用しないでください。タスクが失敗する原因となります。 |
| 接続失敗時の再試行時間 | タスク開始後に DTS が失敗した接続を再試行する時間。範囲:10~1,440 分。デフォルト:720。このパラメーターは 30 より大きい値に設定することを推奨します。複数のタスクが同じソースまたはターゲットを共有する場合、最も短い再試行時間が適用されます。再試行時間は課金の対象となります。 |
| その他の問題の再試行時間 | DTS が失敗した DDL または DML 操作を再試行する時間。範囲:1~1,440 分。デフォルト:10。このパラメーターは 10 より大きい値に設定することを推奨します。[接続失敗時の再試行時間] より短くする必要があります。 |
| フルデータ移行のスロットリングを有効にする | フルデータ同期中にソースへの秒間クエリ数 (QPS)、RPS、および移行速度 (MB/s) を制限して、負荷を軽減します。[フルデータ同期] を選択した場合にのみ表示されます。 |
| 増分データ同期のスロットリングを有効にする | 増分同期中の RPS と同期速度 (MB/s) を制限します。 |
| 環境タグ | DTS インスタンスを分類するためのオプションのタグです。 |
| 正逆タスクのハートビートテーブルに対する SQL 操作を削除するかどうか | はい:DTS はソースにハートビート SQL を書き込みません (タスクの遅延メトリックに影響する可能性があります)。いいえ:DTS はソースにハートビート SQL を書き込みます (ソースの物理バックアップやクローニングに影響する可能性があります)。 |
| ETL の設定 | はい:抽出、変換、ロード (ETL) 処理を有効にします。コードエディタにデータ処理文を入力します。詳細については、「ETL の設定」をご参照ください。いいえ:ETL を無効にします。 |
| モニタリングとアラート | はい:アラートのしきい値と通知設定を構成して、タスクの失敗または同期遅延に関するアラートを受信します。詳細については、「モニタリングとアラートの設定」をご参照ください。いいえ:アラート機能なし。 |
ステップ 7:データ検証の構成(任意)
[次へ: バリデーション設定] をクリックして、データのバリデーションを設定します。詳細については、「データのバリデーションを設定する」をご参照ください。
ステップ 8:事前チェックの実行
次へ:タスク設定の保存と事前チェック をクリックします。
このタスクの OpenAPI パラメーターをプレビューするには、ボタンにカーソルを合わせて OpenAPI パラメーターのプレビュー をクリックします。
事前チェックを実行する前に、以下の点を確認して失敗リスクを低減してください。
バイナリロギングが有効化され、
loose_polar_log_binがonに設定されていることソースアカウントが読み取り権限を持ち、送信先アカウントが読み取りおよび書き込み権限を持つこと
バイナリログの保持期間が「前提条件」セクションに記載された最低要件を満たしていること
ソーステーブルに PRIMARY KEY または一意制約があること
事前チェックが成功した場合にのみ、タスクが開始されます。
項目が失敗した場合、詳細の表示 をクリックして原因を確認し、問題を修正した後、再事前チェック をクリックします。
安全に無視できる警告がある場合、警告の詳細の確認 > 無視 > OK をクリックし、その後 再事前チェック をクリックします。警告を無視すると、データの不整合が発生する可能性があります。
ステップ 9:同期インスタンスの購入
成功率 が 100% に達したら、次へ:インスタンスの購入 をクリックします。
| パラメーター | 説明 |
|---|---|
| 課金方法 | サブスクリプション:固定期間分を前払いします。利用可能な期間は 1~9 か月、または 1 年、2 年、3 年、5 年です。期間が長いほど月額コストが低くなります。従量課金:1 時間単位で課金されます。インスタンスが不要になったらリリースして課金を停止してください。 |
| リソースグループ設定項目 | インスタンスのリソースグループです。デフォルト:default resource group。詳細については、「What is Resource Management? |
| インスタンスクラス | 同期のパフォーマンスと速度を決定します。データ量および遅延要件に応じて選択してください。詳細については、「Instance classes of data synchronization instances」をご参照ください。 |
| サブスクリプション期間 | サブスクリプション課金でのみ利用可能です。期間およびインスタンス数を設定します。 |
Data Transmission Service (従量課金) サービス利用規約 をお読みになり、同意の上、購入して開始 をクリックします。
同期タスクがタスクリストに表示されます。そこから進行状況を監視できます。
DTS は、バイナリログ位置を進めるために、ソースデータベースで定期的に CREATE DATABASE IF NOT EXISTS `test` を実行します。これは想定される動作です。次のステップ
詳細については、「データ検証の設定」をご参照ください。