Data Transmission Service (DTS) を使用すると、オンプレミスサーバー、Elastic Compute Service (ECS) インスタンス、またはサードパーティのクラウド上にデプロイされた自己管理 MySQL データベースから、ApsaraDB RDS for MySQL インスタンスへサービスを停止することなくデータを同期できます。デフォルトでは、DTS はリアルタイムの増分データのみを同期します。既存データも移行する場合は、スキーマ同期および初期完全同期も有効化してください。
前提条件
開始する前に、以下の点を確認してください。
自己管理 MySQL データベースは Alibaba Cloud に接続されており、DTS サーバーの CIDR (Classless Inter-Domain Routing) ブロックが、ソースデータベースのセキュリティグループルール、ファイアウォールポリシー、および IP アドレスホワイトリストに追加されます。詳細については、「DTS サーバーの CIDR ブロックを追加する」をご参照ください。
自己管理 MySQL データベース用のデータベースアカウントが作成されており、バイナリロギングが構成済みであること。対応するデータベースバージョンについては、「事前準備」をご参照ください。
宛先の ApsaraDB RDS for MySQL インスタンスが作成済みであり、その利用可能なストレージ容量がソースデータベース内の全データサイズより大きいこと。詳細については、「ApsaraDB RDS for MySQL インスタンスの作成」をご参照ください。
制限事項
ソースデータベースの要件
テーブルには PRIMARY KEY または一意制約 (UNIQUE constraint) を定義し、すべてのフィールドが一意である必要があります。これを満たさないと、宛先データベースに重複レコードが発生する可能性があります。
個別のテーブルを同期対象として選択し、テーブル名またはカラム名を変更する場合、1 つの同期タスクでサポートされるテーブル数は最大 1,000 個です。この上限を超えるとリクエストエラーが発生します。その場合は、テーブルを複数のタスクに分割するか、代わりにデータベース全体を同期してください。
バイナリログの要件を満たす必要があります。
説明ソースが自己管理 MySQL データベースの場合、バイナリロギングを明示的に有効化し、両方のパラメーターを設定する必要があります。RDS MySQL の場合、バイナリロギングはデフォルトで有効です —
binlog_row_imageがFULLに設定されていることを確認する必要があります。詳細については、「自己管理 MySQL データベース用のアカウントを作成してバイナリロギングを構成する」および「インスタンスパラメーターの変更」をご参照ください。パラメーター 必須値 備考 binlog_formatROW自己管理 MySQL のみ binlog_row_imageFULL自己管理 MySQL および ApsaraDB RDS for MySQL の両方で必須 log_slave_updatesONデュアルプライマリクラスター内の自己管理 MySQL のみ 保持期間(RDS MySQL) 最低 3 日間(推奨:7 日間) 保持期間が短すぎるとタスクが失敗する可能性があります 保持期間(自己管理 MySQL) 最低 7 日間 保持期間が短すぎると、DTS がバイナリログを取得できずタスクが失敗する可能性があります。例外的な状況では、データの不整合や損失が発生する可能性があります スキーマ同期または初期完全同期中に、スキーマを変更する DDL 文を実行しないでください。実行するとタスクが失敗します。
バイナリログ変更操作 — たとえば、物理バックアップからの復元データやカスケード操作によるデータなど — によって生成されたデータは同期されません。この問題がビジネスに影響を及ぼす場合は、影響を受けるデータベースおよびテーブルを同期対象から削除し、その後再び追加してください。詳細については、「同期対象の変更」をご参照ください。
ソースが MySQL 8.0.23 以降であり、テーブルに不可視カラム (invisible column) が含まれている場合、DTS はそれらのカラムを読み取れず、データ損失が発生します。これを修正するには、カラムを可視化してください。
ALTER TABLE <table_name> ALTER COLUMN <column_name> SET VISIBLE;を実行します。詳細については、「Invisible Columns」をご参照ください。プライマリキーがないテーブルでは、自動的に不可視のプライマリキーが生成されます。これらも可視化してください。詳細については、「Generated Invisible Primary Keys」をご参照ください。
非対応操作
以下の動作はサポートされておらず、同期失敗を引き起こす可能性があります。
コメントで定義されたパーサーによるデータ:コメントで定義されたパーサーを使用したデータは、DTS で同期されません。
pt-online-schema-change: 同期オブジェクトに対するオンライン DDL 操作に pt-online-schema-change を使用しないでください。代わりに、Data Management (DMS) を使用してください。詳細については、「ロックフリー DDL 操作の実行」をご参照ください。
同期対象オブジェクトに対する RENAME TABLE:同期対象として選択されたテーブルの名前を変更すると、そのテーブルのデータ同期が停止します。これを回避するには、名前変更前後両方のテーブルを含むデータベースを、同期対象リストに追加してください。
同期中の宛先への書き込み:同期中に他のソースから宛先データベースへデータを書き込むと、データの不整合が発生します。
EncDB ソース:EncDB 機能が有効化された ApsaraDB RDS for MySQL インスタンスをソースとして使用する場合、初期完全同期は実行できません。
透過的データ暗号化 (TDE) が有効化された ApsaraDB RDS for MySQL インスタンスでは、スキーマ同期、初期完全同期、および増分同期がサポートされます。
プライマリ/セカンダリ スイッチオーバー:タスク実行中に自己管理 MySQL ソースでプライマリ/セカンダリ スイッチオーバーを実行すると、タスクが失敗します。
読み取り専用 RDS MySQL 5.6:トランザクションログを記録しない読み取り専用の ApsaraDB RDS for MySQL 5.6 インスタンスは、ソースとして使用できません。
その他の考慮事項
宛先データベースのバージョンは、ソースデータベースのバージョンと同じか、それより新しいものである必要があります。
宛先が MySQL 8.0.23 以降であり、宛先テーブルに不可視カラムが存在する場合、DTS はターゲット列を特定できず、タスクが失敗します。
ALTER TABLEコマンドを使用してこれらのカラムを可視化してください。DTS のスキーマ同期を使用しない場合、ソースと宛先のフィールド型が互換性があることを確認してください。たとえば、ソースの
text型フィールドが宛先のvarchar(255)にマッピングされている場合、データの切り捨てが発生する可能性があります。データに稀な文字や絵文字(4 バイト文字)が含まれる場合、宛先データベースおよびテーブルは UTF8mb4 文字セットを使用する必要があります。DTS のスキーマ同期を使用する場合は、宛先の
character_set_serverパラメーターを UTF8mb4 に設定してください。ピーク時を避けて同期を実行してください。初期完全同期では、ソースからの読み取りと宛先への書き込みが同時に行われるため、両方のデータベースの負荷が増加します。
初期完全同期完了後、宛先の表領域 (tablespace) は通常、INSERT 操作の同時実行による断片化 (fragmentation) のため、ソースよりも大きくなります。
MySQL のカラム名は大文字小文字を区別しません。ソースに大文字小文字のみが異なる複数のカラム名が存在する場合、それらのデータは同一の宛先カラムに書き込まれ、予期しない結果を招く可能性があります。
スキーマ同期中、DTS は外部キー (foreign keys) を同期します。完全同期および増分同期中、DTS はセッションレベルで外部キーに関する制約チェック (constraint check) およびカスケード操作 (cascade operations) を一時的に無効化します。この期間中にソースでカスケード更新または削除操作を実行すると、データの不整合が発生する可能性があります。
送信先で DDL 文が失敗した場合、DTS タスクは実行を継続します。 失敗した DDL 文はタスクログで確認できます。 詳細については、「タスクログの表示」をご参照ください。
ソースからアカウント情報を同期する場合は、追加の権限が必要です。詳細については、「データベースアカウントの移行」をご参照ください。
DTS タスクが失敗した場合、DTS テクニカルサポートが 8 時間以内に復旧を試みます。タスクは再起動され、タスクレベルのパラメーター(データベースパラメーターではない)が変更される場合があります。
自己管理 MySQL ソースにおける同期遅延
DTS は、宛先で最新に同期されたデータのタイムスタンプとソースの現在時刻に基づいて同期遅延 (synchronization latency) を算出します。ソースで長期間 DML 操作が実行されない場合、表示される遅延値は不正確になる可能性があります。遅延値を更新するには、ソースで DML 操作を実行してください。データベース全体を同期する場合は、1 秒ごとにデータを受信するハートビートテーブル (heartbeat table) を作成してください。
DTS はまた、バイナリログファイルの位置 (binary log file position) を進めるために、ソースで定期的に CREATE DATABASE IF NOT EXISTS 'test' を実行します。これは、自己管理 MySQL ソースおよび ApsaraDB RDS for MySQL ソースの両方に適用されます。
課金
| 同期タイプ | 料金 |
|---|---|
| スキーマ同期および完全データ同期 | 無料 |
| 増分同期 | 課金済み。 課金概要 をご参照ください。 |
サポートされる同期トポロジ
単方向 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 |
データベースアカウントに必要な権限
| データベース | スキーマ同期 | 完全データ同期 | 増分同期 |
|---|---|---|---|
| 自己管理 MySQL | SELECT | SELECT | 同期対象オブジェクトに対する SELECT;REPLICATION CLIENT、REPLICATION SLAVE、SHOW VIEW;データベースおよびテーブルを作成する権限(DTS はハートビートデータを格納するための dts という名前のデータベースを作成します) |
| ApsaraDB RDS for MySQL(宛先) | 読み取りおよび書き込み | 読み取りおよび書き込み | 読み取りおよび書き込み |
データベースアカウントの作成および権限付与手順については、以下をご参照ください。
自己管理 MySQL:「自己管理 MySQL データベース用のアカウント作成とバイナリロギングの構成」
ApsaraDB RDS for MySQL:「アカウントの作成」および「アカウントの権限の変更」
データ同期タスクの作成
ソースおよび宛先データベースの構成後に、ページに表示される使用制限を必ずご確認ください。このステップを省略すると、タスクが失敗したり、データの不整合が発生したりする可能性があります。
ステップ 1:データ同期ページへ移動
以下のいずれかの方法を使用してください。
DTS コンソール
DTS コンソール にログインします。
左側のナビゲーションウィンドウで、データ同期 をクリックします。
左上隅で、データ同期インスタンスが配置されているリージョンを選択します。
DMS コンソール
実際の操作は、DMS コンソールのモードとレイアウトに基づいて異なる場合があります。詳細については、「シンプルモード」と「DMS コンソールのレイアウトとスタイルをカスタマイズする」をご参照ください。
DMS コンソール にログインします。
上部のナビゲーションバーで、Data + AI の上にポインターを合わせ、DTS (DTS) > データ同期 を選択します。
データ同期タスク の右側にあるドロップダウンリストから、データ同期インスタンスが配置されているリージョンを選択します。
ステップ 2:ソースおよび宛先データベースの構成
タスクの作成 をクリックします。
ソースデータベースのパラメーターを構成します。
パラメーター 説明 タスク名 DTS タスクの名前です。DTS が自動的に生成します。識別しやすいように、意味のある名前を指定してください。名前は一意である必要はありません。 既存の接続を選択 ソースが DTS に登録済みの場合は、ドロップダウンリストから選択してください — DTS が残りのパラメーターを自動的に設定します。そうでない場合は、以下のパラメーターを入力してください。詳細については、「データベース接続の管理」をご参照ください。 データベースタイプ MySQL を選択します。 アクセス方法 ECS 上の自己管理データベース を選択します。環境の準備については、「事前準備の概要」をご参照ください。 インスタンスリージョン ソース MySQL データベースが配置されているリージョンです。 Alibaba Cloud アカウント間でのデータ複製 本例では、いいえ を選択します。 ECS インスタンス ID ソース MySQL データベースをホストする ECS インスタンスの ID です。 ポート番号 ソース MySQL データベースのサービスポートです。インターネット経由でアクセス可能である必要があります。デフォルト:3306。 データベースアカウント ソース MySQL データベースのアカウントです。「データベースアカウントに必要な権限」セクションをご参照ください。 データベースパスワード データベースアカウントのパスワードです。 暗号化 要件に応じて、暗号化なし または SSL 暗号化SSL 暗号化 を選択します。SSL 暗号化を選択した場合は、CA 証明書 をアップロードし、CA キー パラメーターを構成してください。 宛先データベースのパラメーターを構成します。
パラメーター 説明 [既存の接続を選択] 送信先が DTS に登録済みの場合は、ドロップダウンリストから選択します。それ以外の場合は、以下のパラメーターを入力します。詳細については、「データベース接続の管理」をご参照ください。 [データベースタイプ] MySQL を選択します。 [アクセス方法] Alibaba Cloud インスタンス を選択します。 [インスタンスリージョン] 送信先の ApsaraDB RDS for MySQL インスタンスが配置されているリージョンです。 [Alibaba Cloud アカウント間でデータをレプリケート] この例では、いいえ を選択します。 [RDS インスタンス ID] 送信先の ApsaraDB RDS for MySQL インスタンスの ID です。 [データベースアカウント] ターゲットデータベースのアカウントです。「データベースアカウントに必要な権限」のセクションをご参照ください。 [データベースパスワード] データベースアカウントのパスワードです。 [暗号化] 非暗号化 または SSL 暗号化 を選択します。SSL 暗号化を使用するには、事前に RDS インスタンスで SSL を有効化してください。詳細については、「クラウド証明書を使用して SSL 暗号化を有効化する」をご参照ください。 接続テストと続行 をクリックします。DTS サーバーの CIDR ブロック ダイアログボックスで、接続テスト をクリックします。
DTS サーバーの CIDR ブロックが、自動または手動で、ソースデータベースとターゲットデータベースのセキュリティ設定に追加できることを確認してください。詳細については、「DTS サーバーの CIDR ブロックを追加する」をご参照ください。
ステップ 3:同期対象の構成
オブジェクトの構成 ステップで、以下のパラメーターを構成します。
オブジェクト名マッピング機能を使用してオブジェクト名を変更すると、依存オブジェクト (dependent object) の同期が失敗する可能性があります。
パラメーター 説明 同期タイプ 増分同期 がデフォルトで選択されています。既存データを移行するには、スキーマ同期 および 初期完全同期 も選択してください。 ソースデータベース内のトリガーの移行方法 スキーマ同期 を選択した場合のみ利用可能です。詳細については、「ソースデータベースからのトリガーの同期または移行」をご参照ください。 移行評価の有効化 スキーマ同期 を選択した場合のみ利用可能です。はいアラート通知設定 を選択すると、事前チェックに時間がかかり、事前チェック中に 評価結果 として表示されます。評価結果は、事前チェックの合格/不合格判定には影響しません。 同期トポロジ 単方向同期 を選択します。 競合テーブルの処理モード [事前チェックとエラー報告]: 事前チェックは、送信先にソースと同じ名前のテーブルが存在する場合に失敗します。名前衝突を解決するには、オブジェクト名マッピング機能を使用します。詳細については、「データベース、テーブル、および列名のマッピング」をご参照ください。[エラーを無視して続行]: 名前衝突のチェックをスキップします。完全同期中は、一致するプライマリキーを持つ既存の送信先レコードが保持されます。増分同期中は、それらが上書きされます。スキーマが異なる場合、タスクが失敗する可能性があります。 イベントの移行の有無 ソースからのイベントの同期を有無を指定します。詳細については、「イベントの同期または移行」をご参照ください。 宛先インスタンスにおけるオブジェクト名の大文字小文字の設定 宛先でのデータベース、テーブル、および列名の大文字小文字の設定を制御します。デフォルト: [DTS デフォルトポリシー]。詳細については、「宛先インスタンスでのオブジェクト名の大文字小文字の設定」をご参照ください。 ソースオブジェクト ソースオブジェクト セクションからオブジェクトを選択し、右向き矢印アイコンをクリックして 選択済みオブジェクト に追加します。サポートされる粒度 (granularity):カラム、テーブル、またはデータベース。テーブルまたはカラムを選択した場合、DTS はビュー、トリガー、ストアドプロシージャ (stored procedure) を同期しません。 選択済みオブジェクト 右クリックしてオブジェクトの名前を個別に変更します。複数のオブジェクトを一度に名前を変更するには、[一括編集] をクリックします。詳細については、「オブジェクト名のマッピング」をご参照ください。特定の SQL 操作を選択したり、WHERE フィルター条件を設定したりするには、オブジェクトを右クリックします。詳細については、「フィルター条件の設定」をご参照ください。 次へ:高度な設定 をクリックし、以下のパラメーターを構成します。
パラメーター 説明 タスクスケジューリング用の専用クラスター DTS はデフォルトで共有クラスターを使用します。タスクの安定性を向上させるために、専用クラスターを購入してください。詳細については、「DTS 専用クラスターとは」をご参照ください。 ソーステーブルで生成されたオンライン DDL ツールの一時テーブルを宛先データベースにコピーする。 DMS または gh-ost を使用したオンライン DDL 操作に適用されます。はい:一時テーブルのデータを同期します(同期時間の延長を招く可能性があります)。いいえ、DMS オンライン DDL に適合:DMS からの最終 DDL のみを同期します(宛先テーブルがロックされる可能性があります)。いいえ、gh-ost に適合:gh-ost からの最終 DDL のみを同期します(宛先テーブルがロックされる可能性があります)。pt-online-schema-change は使用しないでください — タスクが失敗します。 アカウントの移行の有無 ソースからのアカウント情報の同期を有無を指定します。はい を選択した場合、アカウントを選択し、その権限を確認してください。詳細については、「データベースアカウントの移行」をご参照ください。 接続失敗時の再試行時間 タスク開始後に、DTS が接続失敗を再試行する時間です。範囲:10~1440 分。デフォルト:720。少なくとも 30 分に設定してください。複数のタスクが同一のソースまたは宛先を共有する場合、最も短い再試行時間がすべてのタスクに適用されます。再試行期間中は、DTS インスタンスに対して課金されます。 その他の問題発生時の再試行時間 DML または DDL 操作の失敗を DTS が再試行する時間です。範囲:1~1440 分。デフォルト:10。少なくとも 10 分に設定してください。接続失敗時の再試行時間 よりも短く設定する必要があります。 初期完全同期のスロットリングの有効化 [完全データ同期] を選択した場合にのみ使用できます。送信先のロードを軽減するには、ソースへの QPS、RPS、およびデータ速度 (MB/s) を設定します。 増分同期のスロットリングの有効化 RPS およびデータ転送速度(MB/s)を設定して、宛先の負荷を軽減します。 環境タグ DTS インスタンスを識別するための任意のタグです。 前方および後方タスクのハートビートテーブルに対する SQL 操作の削除の有無 はい:DTS はハートビートテーブル操作をソースに書き込まないため、同期遅延が過大に表示される可能性があります。いいえ:DTS はハートビートテーブル操作を書き込みます — ソースの物理バックアップおよびクローン作成に影響を与える可能性があります。 ETL の構成 [はい]: 抽出・変換・書き出し (ETL) 機能を有効にします。コードエディタにデータ処理文を入力します。詳細については、「データ移行またはデータ同期タスクで ETL を設定する」をご参照ください。[いいえ]: ETL を無効にします。 モニタリングとアラート [はい]: タスクの失敗またはレイテンシーしきい値の超過に対するアラートを設定します。アラートのしきい値および連絡先を設定してください。詳細については、「モニタリングとアラートの設定」をご参照ください。[いいえ]: アラート機能を無効化します。 [次のステップ: データ検証] をクリックしてデータ検証を設定します。 詳細については、「データ検証タスクを設定する」をご参照ください。
ステップ 4:事前チェックの実行
次へ:タスク設定の保存と事前チェック をクリックします。
現在のタスク構成に対応する OpenAPI パラメーターをプレビューするには、ボタンにカーソルを合わせて OpenAPI パラメーターのプレビュー をクリックしてください。
DTS はタスク開始前に事前チェックを実行します。事前チェックが失敗した場合:
各失敗項目の横にある 詳細の表示 をクリックし、問題を解決してから再度事前チェックを実行してください。
警告項目を無視できる場合は、警告の詳細の確認 > 無視 > OK をクリックし、その後 再び事前チェック をクリックしてください。警告を無視すると、データの不整合が発生する可能性があります。
ステップ 5:インスタンスの購入
成功率 が 100% に達するまで待機し、次へ:インスタンスの購入 をクリックします。
購入 ページで、以下のパラメーターを構成します。
パラメーター 説明 支払い方法 サブスクリプション:固定期間分を前払いする方式で、長期利用の場合にコスト効率が高くなります。従量課金:1 時間単位で課金される方式で、短期利用に適しています。インスタンスが不要になった場合は、すぐにリリースして課金を停止してください。 リソースグループ設定 データ同期インスタンスのリソースグループです。デフォルト:デフォルトリソースグループ。詳細については、「Resource Management とは インスタンスクラス 同期速度はインスタンスクラスによって異なります。詳細については、「データ同期インスタンスのインスタンスクラス」をご参照ください。 サブスクリプション期間 サブスクリプション支払い方法でのみ利用可能です。選択肢:1~9 ヶ月、1 年、2 年、3 年、または 5 年。 Data Transmission Service(従量課金)利用規約 を読み、同意してください。
購入して開始 をクリックし、ダイアログボックスで OK をクリックします。
タスクはタスクリストに表示されます。そこから進行状況を監視できます。
同期の検証
タスクのステータスが 完了 に変わった後、宛先データベースで以下のコマンドを実行して、データが正しく書き込まれたかどうかを確認してください。
ANALYZE TABLE <table_name>;ソース MySQL データベースで高可用性(HA)スイッチオーバーが発生した場合など、データがメモリにのみ書き込まれ、永続化されないことがあります。これによりデータ損失が発生する可能性があります。ANALYZE TABLE を実行することで、宛先における実際のデータ状態を確認できます。次のステップ
同期対象オブジェクトを変更するには、同期対象オブジェクトの変更をご参照ください。
アカウント情報を同期するには、「データベースアカウントの移行」をご参照ください。
DTS インスタンスのパラメーターを変更するには、「DTS インスタンスのパラメーターを変更する」をご参照ください。