Data Transmission Service (DTS) は、ソースの ApsaraDB RDS for MySQL インスタンスから宛先インスタンスへ、スキーマ同期、完全データ同期、増分同期の 3 段階に分けてデータを同期します。本ガイドに従って、タスクをエンドツーエンドで構成してください。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
正常な状態のソース ApsaraDB RDS 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 はデータの不整合を引き起こす可能性があります。タスク実行中に同期対象のテーブル名を変更すると、そのテーブルからのデータ同期が宛先への送信を停止します。これを回避するには、個別のテーブルではなくデータベース全体を同期対象として選択し、変更前および変更後のデータベース名が両方とも同期対象に含まれていることを確認してください。
必要なデータベースアカウント権限
| データベース | 必要な権限 |
|---|---|
| ソース ApsaraDB RDS for MySQL インスタンス | 読み取りおよび書き込み権限。詳細については、「アカウントの作成」および「アカウントの権限の変更 |
| 宛先 ApsaraDB RDS for MySQL インスタンス | 読み取りおよび書き込み権限。詳細については、「アカウントの作成」および「アカウントの権限の変更 |
ソースデータベースアカウントが ApsaraDB RDS for MySQL コンソール経由で作成されていない場合は、手動で REPLICATION CLIENT、REPLICATION SLAVE、SHOW VIEW、SELECT 権限を付与してください。ソースからアカウント情報を同期する場合は、追加の権限が必要です。詳細については、「データベースアカウントの移行」をご参照ください。
制限事項
開始前にこれらの制限事項を確認してください。ほとんどのタスク失敗およびデータの不整合は、これらの制限事項の見落としが原因です。
テーブル構造
同期対象のテーブルには、すべてのユニークフィールドを含む PRIMARY KEY または UNIQUE 制約が必要です。これを満たさない場合、宛先に重複レコードが生成される可能性があります。
テーブル(データベースではなく)を同期対象として選択し、テーブル名またはカラム名の変更を予定している場合、単一タスクでサポートされるテーブル数は最大 1,000 個です。1,000 個を超えるテーブルを同期する場合は、複数のタスクを構成するか、データベースレベルで同期を行ってください。
バイナリログ
DTS がソースから変更を読み取るには、以下のバイナリログ設定が事前に適用されている必要があります。
binlog_row_image パラメーターは、
fullに設定する必要があります。ApsaraDB RDS for MySQL インスタンスでは、バイナリログ記録がデフォルトで有効になっていますが、このパラメーターを確認してください。詳細については、「インスタンスのパラメーターを変更する」をご参照ください。ソースが自己管理 MySQL データベースの場合: バイナリロギングを有効化し、
binlog_formatをrowに、binlog_row_imageをfullに設定する必要があります。ソースがデュアルプライマリクラスターにデプロイされた自己管理 MySQL データベースである場合: DTS がすべてのバイナリログを取得できるように、
log_slave_updatesをONに設定する必要もあります。「自己管理 MySQL データベースのアカウントを作成してバイナリロギングを設定する」をご参照ください。
バイナリログの保持期間は、7 日間以上である必要があります。 DTS が必要なバイナリログにアクセスできない場合、タスクは失敗し、データ損失が発生する可能性があります。 詳細については、「バイナリログファイルの管理」をご参照ください。
スキーマ同期または完全データ同期中に、ソースデータベースに対して DDL ステートメントを実行しないでください。これによりタスクが失敗します。
バージョンおよび文字セットの互換性
宛先データベースのバージョンは、ソースと同一またはそれより新しいものである必要があります。古いバージョンの宛先では互換性の問題が発生する可能性があります。
ソース データベースが MySQL 8.0.23 以降であり、不可視カラムを含む場合、DTS はこれらのカラムのデータを取得できません — データ損失が発生します。
宛先 データベースが MySQL 8.0.23 以降であり、不可視カラムを含む場合、データ受信用の宛先カラムが見つからないため、DTS インスタンスが失敗し、データ損失が発生します。
いずれの場合も、タスク開始前に、
ALTER TABLE <table_name> ALTER COLUMN <column_name> SET VISIBLE;を実行して不可視カラムを可視化してください。主キーを持たないテーブルでは、不可視の主キーが自動生成されます。これらも可視化してください。詳細については、「Invisible Columns」および「Generated Invisible Primary Keys」をご参照ください。スキーマ同期を使用しない場合、フィールド型の互換性を維持する必要があります。たとえば、ソースの
textフィールドが宛先のvarchar(255)フィールドにマッピングされている場合、データの切り捨てが発生する可能性があります。データに 4 バイト文字(稀少な文字や絵文字など)が含まれる場合、宛先テーブルは UTF8mb4 文字セットを使用する必要があります。スキーマ同期を使用する場合、宛先データベースの
character_set_serverパラメーターを UTF8mb4 に設定してください。MySQL のカラム名は大文字小文字を区別しません。ソースに大文字小文字のみが異なる複数のカラム名がある場合、それらは宛先で同一のカラムに書き込まれ、予期しない結果を招く可能性があります。
オンライン DDL
同期対象として選択されたテーブルに対するオンライン DDL では、pt-online-schema-change を使用しないでください。代わりに Data Management (DMS) を使用してください。詳細については、「ロックなしの DDL 操作を実行する」をご参照ください。
送信先で DDL 操作が失敗した場合、DTS タスクは継続して実行されます。失敗した DDL 文を確認するには、タスクログを確認してください。詳細については、「タスクログの表示」をご参照ください。
DTS は、コメントで定義されたパーサーを使用するデータを同期しません。
データ整合性
同期中は、他のソースから宛先へのデータ書き込みを行わないでください。これによりデータの不整合が発生します。
バイナリログの変更操作(物理バックアップからの復元やカスケード操作など)によって生成されたデータは、タスク実行中は記録・同期されません。
外部キーの動作
スキーマ同期中、DTS はソースから宛先へ外部キーを同期します。
完全および増分データ同期中、DTS はセッションレベルで一時的に外部キー制約チェックおよびカスケード操作を無効化します。この期間中にソースでカスケード更新または削除操作が実行された場合、データの不整合が発生する可能性があります。
パフォーマンスへの影響
完全データ同期では、ソースデータベースからすべてのデータを一度読み取るため、両方のデータベースの負荷が増加します。リスクを軽減するには、以下の点に注意してください。
非ピーク時間帯に同期タスクを実行してください。
完全同期後、並列 INSERT による断片化のため、宛先の表領域がソースよりも大きくなることがあります。
タスクのステータスが 完了 に変更された後、
analyze table <table_name>を実行して、データが宛先に正しく書き込まれたことを確認してください。(例:ソースで高可用性 (HA) スイッチオーバーが発生した場合、一部のデータがメモリ上にのみ書き込まれる可能性があります。)
特殊ケース
自己管理 MySQL ソースの場合:
タスク実行中にソースデータベースでプライマリ/セカンダリ スイッチオーバーが発生した場合、タスクは失敗します。
DTS は、宛先で最新に同期されたデータのタイムスタンプとソースの現在時刻に基づいて同期遅延を算出します。ソースで長期間 DML 操作が行われていない場合、遅延の測定値が不正確になる可能性があります。遅延が過度に高い場合は、ソースで DML 操作を実行して更新してください。データベース全体を同期対象として選択した場合は、1 秒ごとに更新されるハートビートテーブルを作成することで、遅延の精度を保つことができます。
DTS は、バイナリログ位置を進めるために、ソースで定期的に
CREATE DATABASE IF NOT EXISTS 'test'を実行します。
ApsaraDB RDS for MySQL ソースの場合:
トランザクションログを記録しない読み取り専用の ApsaraDB RDS for MySQL 5.6 インスタンスは、ソースとして使用できません。
DTS は、バイナリログ位置を進めるために、ソースで定期的に
CREATE DATABASE IF NOT EXISTS 'test'を実行します。EncDB 機能が有効化された ApsaraDB RDS for MySQL インスタンスでは、完全データ同期はサポートされていません。透過的データ暗号化 (TDE) が有効化されたインスタンスでは、スキーマ同期、完全データ同期、増分同期のすべてがサポートされます。
DTS テクニカルサポートが失敗したタスクを復旧する場合:
サポートは 8 時間以内に復旧を試みます。タスクは再起動され、特定のタスクパラメーターが変更される場合があります。ただし、データベースパラメーターは変更されません。
同期タスクの構成
ステップ 1:データ同期タスクページへ移動
Data Management (DMS) コンソール にログインします。
トップナビゲーションバーで、Data + AI をクリックします。
左側ナビゲーションウィンドウで、DTS (DTS) > データ同期 を選択します。
ナビゲーションは、お使いの DMS コンソールのモードとレイアウトによって異なる場合があります。「シンプルモード」および「DMS コンソールのレイアウトとスタイルをカスタマイズする」をご参照ください。または、直接「新しい DTS コンソールのデータ同期タスクページ」にアクセスしてください。
ステップ 2:タスクの作成
データ同期インスタンスが配置されているリージョンを選択します。
新規 DTS コンソールでは、代わりにトップナビゲーションバーでリージョンを選択してください。
タスクの作成 をクリックします。
(任意)ページ右上隅の 新規構成ページ をクリックします。
以前のバージョンに戻る ボタンが表示されている場合は、このステップをスキップしてください。新規構成ページの使用を推奨します。
ステップ 3:ソースおよび宛先データベースの構成
ソースおよび宛先データベースの構成後、次に進む前にページに表示される 制限事項 を必ず確認してください。このステップをスキップすると、タスクが失敗したり、データの不整合が発生したりする可能性があります。
ソースおよび宛先の両方について、以下のパラメーターを入力してください。
| セクション | パラメーター | 説明 |
|---|---|---|
| 該当なし | タスク名 | DTS タスクの説明的な名前です。DTS がデフォルト名を生成しますが、意味のある名前に置き換えてください。一意である必要はありません。 |
| ソースデータベース | DMS データベースインスタンスの選択 | 本例では、あらかじめ選択されたデータベースインスタンスはありません。以下のパラメーターを手動で構成してください。 |
| データベースタイプ | MySQL を選択します。 | |
| アクセス方法 | Alibaba Cloud インスタンス を選択します。 | |
| インスタンスリージョン | ソースインスタンスが配置されているリージョンです。 | |
| Alibaba Cloud アカウント間でのデータ複製 | いいえ を選択します(同一アカウントの例)。 | |
| RDS インスタンス ID | ソースの ApsaraDB RDS for MySQL インスタンスの ID です。 | |
| データベースアカウント | ソースインスタンスのデータベースアカウントです。詳細については、「必要なデータベースアカウント権限」をご参照ください。 | |
| データベースパスワード | データベースアカウントのパスワードです。 | |
| 暗号化 | [暗号化なし] または [SSL 暗号化] を選択します。SSL 暗号化を使用するには、まずインスタンスで有効にする必要があります。「クラウド証明書を使用して SSL 暗号化を有効にする」をご参照ください。 | |
| 宛先データベース | DMS データベースインスタンスの選択 | 本例では、あらかじめ選択されたデータベースインスタンスはありません。以下のパラメーターを手動で構成してください。 |
| データベースタイプ | MySQL を選択します。 | |
| アクセス方法 | Alibaba Cloud インスタンス を選択します。 | |
| インスタンスリージョン | 宛先インスタンスが配置されているリージョンです。 | |
| Alibaba Cloud アカウント間でのデータ複製 | いいえ を選択します(同一アカウントの例)。 | |
| RDS インスタンス ID | 宛先の ApsaraDB RDS for MySQL インスタンスの ID です。 | |
| データベースアカウント | 宛先インスタンスのデータベースアカウントです。詳細については、「必要なデータベースアカウント権限」をご参照ください。 | |
| データベースパスワード | データベースアカウントのパスワードです。 | |
| 暗号化 | [非暗号化] または [SSL 暗号化] を選択します。SSL 暗号化を使用するには、まずインスタンスで有効化します。詳細については、「クラウド証明書を使用して SSL 暗号化を有効化する」をご参照ください。 |
ステップ 4:接続性のテスト
接続性のテストと続行 をクリックします。
DTS は、自動的にそのサーバーの CIDR ブロックを Alibaba Cloud データベースインスタンスのホワイトリストに追加します。ECS でホストされるデータベースの場合、DTS は CIDR ブロックを ECS セキュリティグループルールに追加しますが、ECS インスタンスがデータベースにアクセスできることを確認する必要があります。データベースが複数の ECS インスタンスにまたがる場合は、各インスタンスのセキュリティグループに CIDR ブロックを手動で追加してください。オンプレミスデータベースまたはサードパーティのクラウドプロバイダーでホストされるデータベースの場合は、DTS サーバーの CIDR ブロックをデータベースのホワイトリストに手動で追加してください。詳細については、「DTS サーバーの CIDR ブロック」をご参照ください。
DTS サーバーの CIDR ブロックをホワイトリストまたはセキュリティグループに追加することは、セキュリティリスクを伴います。続行する前に、認証情報の強化、公開ポートの制限、API 呼び出しの認証、ホワイトリストルールの定期監査などの予防措置を講じてください。あるいは、Express Connect、VPN Gateway、Smart Access Gateway を使用して、データベースと DTS を接続することもできます。
ステップ 5:同期対象の構成
[オブジェクトの設定] ステップでは、以下のパラメーターを設定します:
| パラメーター | 説明 |
|---|---|
| 同期タイプ | 増分データ同期 がデフォルトで選択されています。スキーマ同期 および 完全データ同期 も選択してください。DTS は、増分同期を開始する前に完全同期をベースラインとして使用します。 |
| ソースデータベース内のトリガーの移行方法 | ソースからのトリガーの処理方法を選択します。スキーマ同期 が選択されている場合にのみ利用可能です。詳細については、「ソースデータベースからのトリガーの同期または移行」をご参照ください。 |
| 移行評価の有効化 | はい を選択すると、ソースおよび宛先のスキーマ(インデックス長、ストアドプロシージャ、依存テーブルを含む)が要件を満たしているかどうかをチェックします。評価結果は事前チェック時に表示されますが、事前チェックの結果には影響しません。スキーマ同期 が選択されている場合にのみ利用可能です。 |
| 同期トポロジ | 一方向同期 を選択します。 |
| 競合テーブルの処理モード | 事前チェックとエラー報告オブジェクト名マッピング(推奨):宛先にソースと同じ名前のテーブルが存在する場合、事前チェックが失敗します。名前競合を解決するには、 を使用してください。エラーを無視して続行:同一テーブル名の事前チェックをスキップします。完全同期中、プライマリキーまたは一意キーの値が一致する既存の宛先レコードは保持されます。増分同期中、一致するレコードは上書きされます。スキーマの違いにより、部分同期またはタスク失敗が発生する可能性があります。 |
| 宛先インスタンスにおけるオブジェクト名の大文字小文字の指定 | 宛先におけるデータベース名、テーブル名、カラム名の大文字小文字を制御します。デフォルトは DTS デフォルトポリシー宛先インスタンスにおけるオブジェクト名の英大文字・小文字の指定 です。詳細については、「」をご参照ください。 |
| ソースオブジェクト | 同期対象のオブジェクト(カラム、テーブル、またはデータベース)を選択し、矢印アイコンをクリックして 選択済みオブジェクト に追加します。テーブルまたはカラムを選択すると、ビュー、トリガー、ストアドプロシージャなどの他のオブジェクトタイプは同期対象から除外されます。 |
| 選択済みオブジェクト | 宛先で単一オブジェクトの名前を変更するには、右クリックして名前変更オプションを選択します。複数のオブジェクトを一度に名前変更するには、一括編集オブジェクト名のマッピング をクリックします。詳細については、「」をご参照ください。WHERE 条件を使用して行をフィルターするには、オブジェクトを右クリックして条件を設定します。詳細については、「フィルター条件の設定」をご参照ください。テーブルまたはデータベースに対して特定の SQL 操作を同期するには、オブジェクトを右クリックして操作を選択します。 |
オブジェクト名マッピングによるオブジェクト名の変更は、それに依存する他のオブジェクトの同期失敗を引き起こす可能性があります。
ステップ 6:高度な設定の構成
次へ:高度な設定 をクリックし、以下のパラメーターを入力してください。
| パラメーター | 説明 |
|---|---|
| タスクスケジューリング用専用クラスター | デフォルトでは、DTS は共有クラスターでタスクをスケジュールします。安定性を向上させるには、専用クラスターを購入します。「DTS 専用クラスターとは」をご参照ください。 |
| ソーステーブルで生成されたオンライン DDL ツールの一時テーブルをターゲットデータベースにコピー | オンライン DDL ツールによって生成された一時テーブルを同期するかどうかを制御します。オンライン DDL に DMS または gh-ost を使用している場合は、一時テーブルデータを同期するために [はい] を選択します (注: 大規模な操作は同期時間を延長します)。最終的な DDL のみを同期するには、[いいえ、DMS オンライン DDL に適応] を選択します (宛先テーブルがロックされる可能性があります)。または、gh-ost からの最終的な DDL のみを同期するには、[いいえ、gh-ost に適応] を選択します (宛先テーブルがロックされる可能性があります)。テーブル (データベース全体ではない) が同期オブジェクトとして選択されている場合、pt-online-schema-change を使用しないでください。タスクが失敗する原因となります。 |
| アカウントを移行するかどうか | ソースからアカウント情報を同期するには、[はい] を選択します。同期するアカウントを指定し、その権限を確認します。 |
| 失敗した接続の再試行時間 | タスク開始後、DTS が失敗した接続を再試行する時間です。有効値: 10~1440 分。デフォルト: 720 分。30 分以上に設定します。DTS がこのウィンドウ内で再接続すると、タスクは再開します。そうでない場合、タスクは失敗します。注: DTS が接続を再試行すると、DTS インスタンスに対して課金されます。同じソースまたはターゲットデータベースを共有する複数のタスクに対して異なる再試行時間範囲を指定した場合、最短の再試行時間範囲が優先されます。ソースインスタンスと宛先インスタンスがリリースされた後、速やかに DTS インスタンスをリリースすることを推奨します。 |
| その他の問題の再試行時間 | DTS が失敗した DDL または DML 操作を再試行する時間です。有効値: 1~1440 分。デフォルト: 10 分。10 分以上に設定します。この値は、[失敗した接続の再試行時間] より小さい必要があります。 |
| 完全データ移行のスロットリングを有効にする | 完全データ同期中の読み取り/書き込み負荷を制限します。[ソースデータベースへの 1 秒あたりのクエリ数 (QPS)]、[完全データ移行の RPS]、および [完全移行のデータ移行速度 (MB/秒)] を設定します。[完全データ同期] が選択されている場合にのみ表示されます。 |
| 増分データ同期のスロットリングを有効にする | 増分同期中の負荷を制限します。[増分データ同期の RPS] および [増分同期のデータ同期速度 (MB/秒)] を設定します。 |
| 環境タグ | 識別用に DTS インスタンスにタグを付けます。オプションです。 |
| 転送タスクと逆再生タスクのハートビートテーブル上の SQL 操作を削除するかどうか | DTS がハートビート SQL 操作をソースデータベースに書き込むかどうかを制御します。書き込みをスキップするには [はい] を選択します (タスクページに同期遅延が表示される場合があります)。ハートビート操作を書き込むには [いいえ] を選択します (これはソースデータベースの物理バックアップとクローン作成に影響を与える可能性があります)。 |
| ETL の設定 | 抽出・変換・書き出し (ETL) 機能を有効にして処理ステートメントを入力するには、[はい] を選択します。「ETL とは」および「データ移行またはデータ同期タスクで ETL を設定する」をご参照ください。 |
| モニタリングとアラート | タスクが失敗した場合、または同期遅延がしきい値を超えた場合に通知を受け取るには、[はい] を選択します。アラートのしきい値と通知設定を設定します。「モニタリングとアラートを設定する」をご参照ください。 |
ステップ 7:データ検証の構成(任意)
「[次へ:データ検証]」をクリックして、タスクのデータ検証を設定します。 「データ検証タスクの設定」をご参照ください。
ステップ 8:事前チェックの実行
次へ:タスク設定の保存と事前チェック をクリックします。
この構成の API パラメーターをプレビューするには、次へ:タスク設定の保存と事前チェック 上にマウスを合わせ、OpenAPI パラメーターのプレビュー をクリックしてください。
DTS は、タスクを開始する前に事前チェックを実行します。事前チェックが完了するまでお待ちください。
項目が失敗した場合、詳細の表示 をクリックして原因を確認し、問題を修正した後、再び事前チェック をクリックしてください。
項目に警告が表示された場合、問題を修正するか、警告の詳細の確認 > 無視 > OK > 再び事前チェック をクリックして続行してください。警告を無視すると、データの不整合が発生する可能性があります。
ステップ 9:インスタンスの購入
成功率 が 100% に達した後、次へ:インスタンスの購入 をクリックします。
購入 ページで、以下の設定を行います。
| セクション | パラメーター | 説明 |
|---|---|---|
| 新規インスタンスクラス | 課金方法 | サブスクリプション:固定期間の前払い方式。長期利用に適しています。従量課金:時間単位で課金されます。短期利用に適しており、不要になった時点でインスタンスを解放すれば課金を停止できます。 |
| リソースグループ設定 | インスタンスのリソースグループです。デフォルト: デフォルトリソースグループResource Management とは | |
| インスタンスクラス | 同期スループットを制御します。詳細については、「データ同期インスタンスのインスタンスクラス」をご参照ください。 | |
| サブスクリプション期間 | サブスクリプション を選択した場合に利用可能です。選択肢:1~9 か月、1 年、2 年、3 年、5 年です。 |
Data Transmission Service(従量課金)サービス利用規約 を読み、同意した上で、購入および開始 をクリックして確認してください。
タスクはタスクリストに表示されます。その進行状況をそこから監視してください。
次のステップ
同期対象オブジェクトの変更 — 実行中のタスクからテーブルおよびデータベースを追加または削除します
タスクログの表示 — 失敗した DDL 文または同期エラーの診断
オブジェクト名のマップ — ソースを変更せずに、送信先のオブジェクトの名前を変更する
モニタリングとアラートの設定 — タスクの失敗やレイテンシーの急上昇時に通知を受け取ります