Data Transmission Service (DTS) を使用すると、ApsaraDB RDS for MySQL インスタンスから PolarDB-X 2.0 インスタンスへ、スキーマ、完全データ、および継続的な増分変更を含むすべてのデータをリアルタイムで同期できます。これらは単一のタスクで実行されます。
サポートされるソースタイプ
本トピックでは、ApsaraDB RDS for MySQL インスタンスをソースの例として使用します。以下の MySQL ソースタイプにも同様の手順が適用されます。
ApsaraDB RDS for MySQL インスタンス
Elastic Compute Service (ECS) 上でホストされる自己管理 MySQL データベース
Express Connect、VPN Gateway、または Smart Access Gateway 経由で接続された自己管理 MySQL データベース
Database Gateway 経由で接続された自己管理 MySQL データベース
Cloud Enterprise Network (CEN) 経由で接続された自己管理 MySQL データベース
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
ApsaraDB RDS for MySQL インスタンス。詳細については、「ApsaraDB RDS for MySQL インスタンスの作成」をご参照ください。
ソースの RDS MySQL インスタンスの合計データサイズよりも大きな利用可能なストレージ容量を持つ PolarDB-X 2.0 インスタンス
REPLICATION CLIENT、REPLICATION SLAVE、SHOW VIEW、SELECT 権限を持つソースデータベースアカウント
読み取りおよび書き込み権限を持つターゲットデータベースアカウント
課金
| 同期タイプ | 料金 |
|---|---|
| スキーマ同期および完全データ同期 | 無料 |
| 増分データ同期 | 課金済み。「課金概要 |
サポートされる同期トポロジ
単方向 1 対 1 同期
単方向 多対 1 同期
同期可能な 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 |
制限事項
ソースデータベースの要件
テーブルには、すべてのフィールドが一意である PRIMARY KEY または一意制約 (UNIQUE constraint) が必要です。これらの制約がない場合、ターゲットデータベースに重複レコードが含まれる可能性があります。
オブジェクト名の変更(テーブル名やカラム名の変更など)を伴うテーブルレベルの同期では、1 つのタスクで最大 1,000 個のテーブルをサポートします。この上限を超えるタスクはリクエストエラーを返します。1,000 個を超えるテーブルを同期する場合は、複数のタスクに分割するか、代わりにデータベース全体を同期してください。
バイナリログの要件:
ApsaraDB RDS for MySQL の場合: バイナリログはデフォルトで有効です。
binlog_row_imageがfullに設定されていることを確認してください。この設定が不足している場合、DTS は事前チェック中にエラーを返します。 「インスタンスパラメーターの変更」を参照してください。バイナリログは、少なくとも 3 日間(推奨:7 日間)保持してください。自己管理 MySQL データベースの場合: バイナリロギングを有効化し、
binlog_formatをrowに、binlog_row_imageをfullに設定します。バイナリログは少なくとも 7 日間保持してください。デュアルプライマリクラスターの場合は、さらにlog_slave_updatesをONに設定して、DTS がすべてのバイナリログをキャプチャできるようにします。詳細については、「自己管理 MySQL データベース用のアカウントを作成し、バイナリロギングを設定する」をご参照ください。
重要DTS が読み取る前にバイナリログがパージされると、同期タスクが失敗します。例外的なケースでは、データの不整合やデータ損失が発生する可能性があります。バイナリログの保持期間が不十分な場合、Data Transmission Service (DTS) のサービスレベルアグリーメント (SLA) の対象外となります。
スキーマ同期または完全データ同期中に、データベースまたはテーブルのスキーマを変更する DDL ステートメントを実行しないでください。これを実行すると、タスクが失敗します。
バイナリログ変更操作—たとえば、物理バックアップからの復元データやカスケード操作によるデータなど—によって生成されたデータは、送信先に同期されません。必要に応じて、ビジネスへの影響を及ぼさずに、影響を受けるテーブルを同期対象から削除して再追加してください。詳細については、「同期対象の変更」をご参照ください。
ソースが MySQL 8.0.23 以降であり、データに不可視カラム (invisible column) が含まれている場合、DTS はこれらのカラムを読み取ることができず、データ損失が発生します。
カラムを可視にするには、次のコマンドを実行します:
ALTER TABLE <table_name> ALTER COLUMN <column_name> SET VISIBLE;明示的なプライマリキーを持たないテーブルは、自動的に不可視のプライマリキーを生成します。同期前にこれらのカラムを可視にしてください。詳細については、「生成された不可視プライマリキー」をご参照ください。
その他の制限事項
DTS は、以下のデータ型を同期しません:BIT、VARBIT、GEOMETRY、ARRAY、UUID、TSQUERY、TSVECTOR、TXID_SNAPSHOT。
プレフィックスインデックス (prefix indexes) は同期できません。ソースデータベースにプレフィックスインデックスが含まれている場合、タスクが失敗する可能性があります。
ピーク時を避けて同期タスクを実行してください。初期完全同期では、ソースおよびターゲットデータベースの読み取りおよび書き込みリソースが使用されるため、負荷が増加します。
初期完全同期後、ターゲットの表領域 (tablespace) はソースより大きくなります。これは、同時 INSERT によりテーブルの断片化 (fragmentation) が発生するためです。
テーブルレベルでの同期を行う場合、オンライン DDL 操作には pt-online-schema-change を使用しないでください。代わりに Data Management (DMS) を使用してください。詳細については、「ロックなし DDL 操作の実行」をご参照ください。
同期中に他のソースからターゲットへデータを書き込むと、データの不整合が発生します。
ソースの RDS MySQL インスタンスで EncDB 機能が有効になっている場合、完全データ同期は実行できません。
説明 RDS MySQL インスタンスで透過的データ暗号化 (TDE) が有効になっている場合、スキーマ同期、完全データ同期、および増分データ同期がサポートされます。スキーマ同期中、DTS はソースからターゲットへ外部キー (foreign keys) を同期します。完全データ同期および増分データ同期中、DTS はセッションレベルで外部キー制約 (foreign key constraint) のチェックおよびカスケード操作を一時的に無効化します。同期中にソースでカスケード更新または削除操作を実行した場合、データの不整合が発生する可能性があります。
DTS タスクが失敗した場合、DTS のテクニカルサポートが 8 時間以内に復旧します。復旧中、タスクが再起動され、タスクパラメーター(データベースパラメーターではない)が変更される場合があります。
特殊なケース
自己管理 MySQL のソースの場合:アクティブな同期タスク実行中にプライマリ/セカンダリ スイッチオーバー (primary/secondary switchover) を実行すると、タスクが失敗します。ソースで長時間 DML 操作が行われていない場合、同期遅延 (synchronization latency) の表示値が不正確になることがあります。DML 操作を実行して遅延を更新してください。データベース全体を同期する場合は、1 秒ごとに書き込みが行われるハートビートテーブル (heartbeat table) を作成し、正確な遅延トラッキングを維持してください。
ApsaraDB RDS for MySQL のソースの場合:トランザクションログを記録しない読み取り専用 RDS MySQL 5.6 インスタンスは、ソースとして使用できません。
両方のソースタイプにおいて、DTS は定期的にソースデータベース上で
CREATE DATABASE IF NOT EXISTS 'test'を実行し、バイナリログファイルの位置 (binary log file position) を進めます。
同期タスクの作成
ステップ 1:DTS コンソールを開く
DTS コンソールの「データ同期」ページに移動します。
ステップ 2:リージョンの選択
左上隅で、データ同期インスタンスを配置するリージョンを選択します。
ステップ 3:ソースおよびターゲットデータベースの構成
タスクの作成 をクリックします。「データ同期タスクの作成」ウィザードで、以下のパラメーターを使用してソースおよびターゲットデータベースを構成します。
ソースおよびターゲットデータベースの構成後、次に進む前に画面上に表示される「制限事項」を必ずお読みください。このステップをスキップすると、タスクが失敗したり、データの不整合が発生したりする可能性があります。
ソースデータベース
| パラメーター | 説明 |
|---|---|
| タスク名 | DTS タスクの名前です。DTS が自動的に名前を生成します。タスクを容易に識別できるよう、意味のある名前を指定してください。名前は一意である必要はありません。 |
| データベースタイプ | MySQL を選択します。 |
| アクセス方法 | Alibaba Cloud インスタンス を選択します。 |
| インスタンスリージョン | ソースの ApsaraDB RDS for MySQL インスタンスが配置されているリージョンです。 |
| Alibaba Cloud アカウント間でのデータ複製 | 同一アカウント内での同期の場合は、いいえ を選択します。 |
| RDS インスタンス ID | ソースの ApsaraDB RDS for MySQL インスタンスの ID です。 |
| データベースアカウント | ソースインスタンスのデータベースアカウントです。このアカウントには、REPLICATION CLIENT、REPLICATION SLAVE、SHOW VIEW、SELECT 権限が必要です。 |
| データベースパスワード | データベースアカウントのパスワードです。 |
| 暗号化 | 要件に応じて、[非暗号化] または [SSL 暗号化] を選択します。 SSL 暗号化を使用するには、このタスクを設定する前に RDS MySQL インスタンスで SSL を有効にする必要があります。 「クラウド証明書を使用して SSL 暗号化を有効にする」をご参照ください。 |
ターゲットデータベース
| パラメーター | 説明 |
|---|---|
| データベースタイプ | PolarDB-X 2.0 を選択します。 |
| アクセス方法 | Alibaba Cloud インスタンス を選択します。 |
| インスタンスリージョン | ターゲットの PolarDB-X 2.0 インスタンスが配置されているリージョンです。 |
| インスタンス ID | ターゲットの PolarDB-X 2.0 インスタンスの ID です。 |
| データベースアカウント | ターゲットインスタンスのデータベースアカウントです。このアカウントには読み取りおよび書き込み権限が必要です。 |
| データベースパスワード | データベースアカウントのパスワードです。 |
ステップ 4:接続性のテスト
接続性のテストと続行 をクリックします。
DTS は、そのサーバーの CIDR ブロックを自動的に Alibaba Cloud データベースインスタンスのホワイトリストおよび ECS でホストされるデータベースのセキュリティグループルールに追加します。データセンター内の自己管理データベース、またはサードパーティのクラウド サービス プロバイダー (CSP) が提供するデータベースの場合は、DTS サーバーの CIDR ブロックをデータベースのホワイトリストに手動で追加してください。「DTS サーバーの CIDR ブロック」をご参照ください。
DTS の CIDR ブロックをホワイトリストまたはセキュリティグループに追加すると、セキュリティリスクが発生します。続行する前に、認証情報の強化、公開ポートの制限、ホワイトリストルールの定期監査、不正な CIDR ブロックの削除などの予防措置を講じてください。より高いセキュリティを確保するには、Express Connect、VPN Gateway、または Smart Access Gateway を使用した接続を検討してください。
ステップ 5:オブジェクトおよび高度な設定の構成
基本設定
| パラメーター | 説明 |
|---|---|
| 同期タイプ | 増分データ同期 がデフォルトで選択されています。スキーマ同期 および 完全データ同期 も選択して、増分同期を開始する前に履歴データを同期してください。 |
| 競合テーブルの処理モード | 事前チェックとエラー報告オブジェクト名マッピング:ターゲットにソースと同じ名前のテーブルがあるかどうかをチェックします。同一の名前が存在する場合、エラーが返され、タスクを開始できません。必要に応じて、 を使用してターゲットテーブルの名前を変更してください。エラーを無視して続行:同一テーブル名の事前チェックをスキップします。完全データ同期中、プライマリキーまたは一意キーの値が一致するレコードはターゲットに保持されます(上書きされません)。増分データ同期中、一致するレコードはターゲットで上書きされます。スキーマが異なる場合、データの初期化が失敗したり、一部のカラムのみが同期されたりする可能性があります。 |
| ソースオブジェクト | ソースオブジェクト セクションからオブジェクトを選択し、右向き矢印アイコンをクリックして 選択済みオブジェクト に追加します。カラム、テーブル、またはデータベースを選択できます。テーブルまたはカラムを選択すると、ビュー、トリガー、およびストアドプロシージャは除外されます。 |
| 選択済みオブジェクト | オブジェクト名マッピング単一のオブジェクトの名前を変更するには、右クリックして 機能を使用します。複数のオブジェクトを一度に名前変更するには、一括編集 をクリックします。テーブルまたはデータベースに対して同期する特定の SQL 操作をフィルターするには、オブジェクトを右クリックし、同期する操作を選択します。行をフィルターするには、オブジェクトを右クリックして SQL フィルター条件 を指定します。オブジェクトの名前を変更すると、依存オブジェクト (dependent object) の同期が失敗する可能性があります。 |
高度な設定
| パラメーター | 説明 |
|---|---|
| モニタリングとアラート | タスクが失敗した場合、または同期遅延がしきい値を超えた場合に通知を受信するには、[はい] を選択します。必要に応じて、アラートのしきい値および通知設定を構成してください。詳細については、「モニタリングとアラートの設定」をご参照ください。 |
| ターゲットインスタンスにおけるオブジェクト名の大文字小文字の設定 | ターゲットにおけるデータベース、テーブル、およびカラム名の大文字小文字の設定を制御します。デフォルトは DTS のデフォルトポリシー送信先インスタンスにおけるオブジェクト名の大文字小文字の指定 です。詳細については、「」をご参照ください。 |
| ソーステーブルで生成されたオンライン DDL ツールの一時テーブルをターゲットデータベースにコピーします | このシナリオでは、DTS は DDL 操作を同期しません。このパラメーターを いいえ、DMS オンライン DDL に適応 または いいえ、gh-ost に適応 に設定する必要があります。いいえ、DMS オンライン DDL に適応 では一時テーブルのデータをスキップし、オリジナルの DDL のみを同期しますが、このプロセス中にターゲットテーブルがロックされる場合があります。いいえ、gh-ost に適応 では一時テーブルのデータをスキップし、オリジナルの DDL のみを同期しますが、gh-ost のシャドウテーブルに対する正規表現ベースのフィルタリングが可能であり、このプロセス中にターゲットテーブルがロックされる場合があります。はい では、オンライン DDL 操作によって生成された一時テーブルのデータを同期しますが、タスクの実行時間が大幅に延長される可能性があります。 |
| 失敗した接続の再試行時間 | DTS が失敗した接続を再試行する時間範囲です。有効な値:10~1,440 分。デフォルト:720 分。30 分を超える値を設定してください。複数のタスクが同じソースまたはターゲットデータベースを共有する場合、最も短い再試行時間が優先されます。再試行期間中は、インスタンスに対して課金されます。 |
ステップ 6:事前チェックの実行
次へ:タスク設定の保存と事前チェック をクリックします。
DTS は、タスクを開始する前に事前チェックを実行します。事前チェックが失敗した場合:
各失敗項目の横にある 詳細の表示 をクリックし、問題を解決してから再度事前チェックを実行してください。
無視可能な警告項目がある場合は、警告の詳細の確認 をクリックし、次に 無視、OK をクリックしてから 再チェック をクリックしてください。警告を無視すると、データの不整合が発生する可能性があります。
ステップ 7:同期インスタンスの購入
成功率 が 100% に達するまで待ち、その後 次へ:インスタンスの購入 をクリックします。
購入 ページで、以下の設定を行います。
| パラメーター | 説明 |
|---|---|
| 課金方法 | サブスクリプション:固定期間の前払い方式で、長期利用にコスト効率が良いです。契約期間は 1~9 か月、1 年、2 年、3 年、または 5 年から選択できます。従量課金:時間単位で課金されます。短期利用に適しています。不要になったらインスタンスを解放して課金を停止できます。 |
| リソースグループ設定 | 同期インスタンスのリソースグループ。デフォルト: デフォルト リソースグループ。詳細については、「Resource Management とは? |
| インスタンスクラス | DTS は、さまざまな同期速度を持つ複数のインスタンスクラスを提供しています。データ量と遅延要件に基づいて選択してください。詳細については、「データ同期インスタンスのインスタンスクラス」をご参照ください。 |
ステップ 8:タスクの開始
Data Transmission Service (従量課金) 利用規約 をお読みになり、同意した上で 購入して開始 をクリックします。確認ダイアログで OK をクリックします。
タスクがタスク一覧に表示されます。DTS は、ソースからターゲットへ既存データを同期した後、自動的に増分同期に移行します。