Data Transmission Service (DTS) を使用すると、データベース間でリアルタイムにデータを同期できます。このトピックでは、DTS 専用クラスター内でのデータ同期タスクの設定手順について説明します。本例では、ApsaraDB RDS for MySQL インスタンスから別の ApsaraDB RDS for MySQL インスタンスへの同期を実施します。
主な利用シーンには、アクティブ地理的冗長性、ジオディザスタリカバリ、ゾーンディザスタリカバリ、越境データ同期、クラウドビジネスインテリジェンス(BI)システム、およびリアルタイムデータウェアハウス構築が含まれます。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
DTS 専用クラスターが存在すること。詳細については、「DTS 専用クラスターの作成」をご参照ください。
ソースおよび宛先の ApsaraDB RDS for MySQL インスタンスが作成済みであること。詳細については、「ApsaraDB RDS for MySQL インスタンスの作成」をご参照ください。
宛先インスタンスに十分なストレージ容量が確保されていること — 容量は、ソースインスタンスの全データサイズより大きい必要があります。
ソースインスタンス、宛先インスタンス、および DTS 専用クラスターがすべて同一リージョンに配置されていること。
制限事項
ソースデータベースの要件
同期対象のテーブルには、PRIMARY KEY または一意制約(UNIQUE constraint)が定義されており、すべてのフィールド値が一意である必要があります。これを満たさない場合、宛先データベースに重複レコードが生成される可能性があります。
テーブル単位(データベース全体ではなく)で同期対象を選択し、かつテーブル名またはカラム名の変更が必要な場合:1 つの同期タスクあたりの上限は 1,000 テーブルです。1,000 テーブルを超える場合は、複数のタスクに分割するか、データベース全体を同期してください。
バイナリロギングの要件:
バイナリログ記録を有効にする必要があります。また、
binlog_row_imageをfullに設定する必要があります。詳細については、「ApsaraDB RDS for MySQL インスタンスのパラメーターを変更する」をご参照ください。重要自己管理 MySQL データベースの場合:-
binlog_formatをrowに、binlog_row_imageをfullに設定します。- デュアルプライマリクラスターデプロイの場合は、DTS がすべてのバイナリログを取得できるように、log_slave_updatesをONに設定します。詳細については、「自己管理 MySQL データベースのアカウントを作成し、バイナリロギングを設定する」をご参照ください。増分同期のみの場合:バイナリログの保存期間を最低 24 時間以上確保してください。
完全同期および増分同期の両方を行う場合:バイナリログの保存期間を最低 7 日間以上確保してください。完全データ同期が完了した後は、保存期間を 24 時間以上に設定できます。
バイナリログ保持要件を満たさない場合、DTS は必要なログを取得できず、タスクの失敗、データの不整合、またはデータ損失が発生する可能性があります。このような場合、DTS のサービスレベルアグリーメント (SLA) では、サービスの信頼性またはパフォーマンスを保証しません。バイナリログファイルについて詳しくは、「ApsaraDB RDS for MySQL インスタンスのバイナリログファイルを表示および削除する」をご参照ください。
スキーマ同期の動作
DTS は、スキーマ同期時にソースデータベースの外部キー(foreign keys)を宛先データベースへ同期します。
完全同期および増分同期中、DTS はセッションレベルで外部キー制約チェックおよびカスケード操作を一時的に無効化します。同期中にソース側でカスケード更新またはカスケード削除が実行された場合、データの不整合が発生する可能性があります。
その他の制限事項
宛先データベースのバージョンは、ソースデータベースのバージョンと同一またはそれより新しい必要があります。古いバージョンの宛先データベースでは互換性の問題が発生する可能性があります。
ピーク時間帯を避けて同期を実行してください。初期の完全データ同期では、両インスタンスの読み取り/書き込みリソースが使用され、サーバー負荷が増加します。
初期完全データ同期完了後、宛先の表領域(tablespace)は、同時 INSERT 操作による断片化(fragmentation)の影響で、ソースよりも大きくなります。
選択したテーブル(データベース全体ではない)を同期する場合は、同期中に pt-online-schema-change などのツールを DDL 操作に使用しないでください。タスクは失敗します。ソーステーブルでオンライン DDL を実行する必要がある場合は、Data Management (DMS) を使用してください。詳細については、「ロックフリー DDL 操作の実行」をご参照ください。
同期中は、DTS を通じてのみ宛先データベースに書き込むようにしてください。他のツールを介して書き込んだ場合、データの不整合またはデータ損失が発生する可能性があります。
自己管理 MySQL データベースに関する注意事項
タスク実行中にソースデータベースでプライマリ/セカンダリ スイッチオーバーが発生すると、タスクが失敗します。
DTS は、同期遅延(synchronization latency)を、宛先で最新に同期されたデータのタイムスタンプとソースの現在時刻に基づいて算出します。ソースで一定期間 DML 操作が行われていない場合、表示される遅延値は不正確になる可能性があります。遅延値を更新するには、ソースで任意の DML 操作を実行してください。
データベース全体を同期する場合は、1 秒ごとに更新されるハートビートテーブル(heartbeat table)を作成することで、遅延値の精度を維持できます。
DTS は定期的に、ソースデータベース内で
CREATE DATABASE IF NOT EXISTS 'test'を実行し、バイナリログファイルの位置(binary log file position)を進めます。
サポートされる同期トポロジ
一方通行・一対一同期
一方通行・一対多同期
一方通行・カスケード同期
一方通行・多対一同期
双方向・一対一同期
詳細については、「同期トポロジ」をご参照ください。
同期可能な 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 |
上記に記載されていない DDL ステートメントは同期されません。
データ同期タスクの設定
ステップ 1:専用クラスターへの移動
専用クラスター ページへ移動します。
ページ上部のナビゲーションバーから、ご利用の DTS 専用クラスターが配置されているリージョンを選択します。
DTS 専用クラスターの 操作 列で、タスクの設定 > データ同期タスクの設定 を選択します。
ステップ 2:ソースおよび宛先データベースの設定
ソースおよび宛先データベースの設定後は、次に進む前にページ上部に表示される制限事項を必ずご確認ください。この手順を省略すると、タスク失敗やデータの不整合が発生する可能性があります。
一般設定
| パラメーター | 説明 |
|---|---|
| タスク名 | DTS が自動的に名称を生成します。業務要件に応じた分かりやすい名称を指定してください。名称は一意である必要はありません。 |
ソースデータベース
| パラメーター | 説明 |
|---|---|
| 既存のデータベース接続を選択(任意) | 設定を再利用するため、既存の接続を選択します。接続が存在しない場合は、以下のパラメーターを手動で設定してください。 |
| データベースタイプ | MySQL を選択します。 |
| アクセス方法 | Alibaba Cloud インスタンス を選択します。 |
| インスタンスリージョン | 専用クラスター作成時に設定されたリージョンであり、変更できません。 |
| Alibaba Cloud アカウント間でのデータ複製 | 本例では、いいえ を選択します。 |
| RDS インスタンス ID | ソースの ApsaraDB RDS for MySQL インスタンスの ID です。ソースおよび宛先インスタンスは同一でも異なっていても構いません — DTS は、2 つのインスタンス間、または単一インスタンス内での同期をサポートします。 |
| データベースアカウント | 同期対象オブジェクトに対する読み取り権限を持つデータベースアカウントです。 |
| データベースパスワード | データベースアカウントのパスワードです。 |
| 暗号化 | [非暗号化] または [SSL 暗号化] を選択します。[SSL 暗号化] を選択した場合は、このタスクを設定する前に、インスタンスで SSL 暗号化を有効化します。詳細については、「ApsaraDB RDS for MySQL インスタンスの SSL 暗号化を設定する」をご参照ください。 |
宛先データベース
| パラメーター | 説明 |
|---|---|
| 既存のデータベース接続を選択(任意) | 再利用する設定を持つ既存の接続を選択します。接続が存在しない場合は、以下のパラメーターを手動で設定してください。 |
| データベースタイプ | MySQL を選択します。 |
| アクセス方法 | Alibaba Cloud インスタンス を選択します。 |
| インスタンスリージョン | 送信先の ApsaraDB RDS for MySQL インスタンスが配置されているリージョンです。 |
| RDS インスタンス ID | 送信先の ApsaraDB RDS for MySQL インスタンスの ID です。 |
| データベースアカウント | 送信先のターゲットデータベースに対して読み取りおよび書き込み権限を持つデータベースアカウントです。 |
| データベースパスワード | データベースアカウントのパスワードです。 |
| 暗号化 | 非暗号化 または SSL 暗号化 を選択します。 SSL 暗号化ApsaraDB RDS for MySQL インスタンスの SSL 暗号化の設定 を選択する場合は、このタスクの設定を行う前に、対象のインスタンスで SSL 暗号化を有効化してください。詳細については、「」をご参照ください。 |
ステップ 3:接続性のテスト
接続性のテストと続行 をクリックします。
DTS は、データベースタイプに応じてネットワークアクセスを自動的に処理します。
Alibaba Cloud データベースインスタンス(例:ApsaraDB RDS for MySQL や ApsaraDB for MongoDB):DTS が自動的に、そのサーバーの CIDR ブロックをインスタンスのホワイトリストに追加します。
Elastic Compute Service(ECS)上の自己管理データベース:DTS が自動的に、そのサーバーの CIDR ブロックを ECS セキュリティグループルールに追加します。ECS インスタンスがデータベースに到達可能であることを確認してください。
オンプレミスまたはサードパーティのクラウドデータベース: DTS サーバーの CIDR ブロックをデータベースのホワイトリストに手動で追加します。詳細については、「オンプレミスデータベースのセキュリティ設定に DTS サーバーの CIDR ブロックを追加する」をご参照ください。
DTS の CIDR ブロックをホワイトリストまたはセキュリティグループルールに追加すると、潜在的なセキュリティリスクが発生します。続行する前に、ユーザー名およびパスワードの強化、公開ポートの制限、API 呼び出しの認証、ホワイトリストまたはセキュリティグループルールの定期監査など、予防措置を講じてください。より高いセキュリティ要件がある場合は、Express Connect、VPN Gateway、または Smart Access Gateway を介してデータベースを DTS に接続することを推奨します。
ステップ 4:同期対象の選択および同期設定の構成
同期モードの選択
DTS では、以下の 3 種類の同期モードがサポートされています。ご利用のユースケースに合った組み合わせを選択してください。
スキーマ同期:テーブルスキーマ(DDL 構造)をソースから宛先へ同期します。
完全データ同期:ソースから宛先へ既存の全データをコピーします。これは、その後の増分同期のベースラインとなります。
増分データ同期(デフォルト選択):初期の完全同期後に、継続的に進行中のデータ変更をレプリケートします。
本例では、以下の 3 つをすべて選択します:スキーマ同期、完全データ同期、および 増分データ同期。
同期パラメーター
| パラメーター | 説明 |
|---|---|
| 競合テーブルの処理モード | 事前チェックおよびエラー報告オブジェクト名マッピング(デフォルト):宛先にソースと同じ名前のテーブルが存在する場合、事前チェックは失敗します。必要に応じて、 を使用して同期対象テーブルの名前を変更してください。エラーを無視して続行:名前衝突のチェックをスキップします。完全同期中は、同じプライマリキーを持つ既存の宛先レコードが保持されます。増分同期中は、これらのレコードが上書きされます。ソースと宛先のスキーマが異なる場合、データ初期化が失敗したり、一部のカラムのみが同期されたりする可能性があります。慎重にご使用ください。 |
| ソースデータベース内のトリガーの移行方法 | トリガーの同期方法を選択します。対象となるトリガーがない場合は、本パラメーターをスキップしてください。ただし、スキーマ同期 が選択されている場合にのみ利用可能です。詳細については、「ソースデータベースからのトリガーの同期または移行」をご参照ください。 |
| 移行評価の有効化 | はい を選択すると、ソースおよび宛先のスキーマ(インデックス長、ストアドプロシージャ、依存テーブルなど)が要件を満たしているかをチェックします。評価結果は事前チェック中に表示されますが、事前チェックの合格/不合格には影響しません。ただし、スキーマ同期 が選択されている場合にのみ利用可能です。 |
| 同期トポロジ | 本例では、一方通行同期 を選択します。 |
| 宛先インスタンスにおけるオブジェクト名の大文字小文字の設定 | 宛先におけるデータベース名、テーブル名、カラム名の大文字小文字の形式を制御します。DTS のデフォルトポリシー宛先インスタンスにおけるオブジェクト名の大文字/小文字の指定 がデフォルトで選択されます。詳細については、「」をご参照ください。 |
同期対象の選択
ソースオブジェクト セクションで同期対象のオブジェクトを選択し、右向き矢印(rightwards arrow)アイコンをクリックして、選択済みオブジェクト セクションへ移動します。
カラム、テーブル、またはデータベース全体を選択できます。テーブルまたはカラムを選択した場合、ビュー、トリガー、ストアドプロシージャは宛先へ同期されません。
選択済みオブジェクト セクションでは、以下の操作が可能です。
単一オブジェクトの名前を変更するには、オブジェクトを右クリックします。詳細については、「単一オブジェクトの名前をマップする」をご参照ください。
複数のオブジェクトを一度に名前変更するには、右上隅の [一括編集] をクリックします。詳細については、「複数のオブジェクト名を一度にマップ」をご参照ください。
オブジェクト単位での特定 SQL 操作のフィルター:オブジェクトを右クリックし、同期対象の SQL 操作を選択します。
WHERE 条件によるデータフィルター:オブジェクトを右クリックし、条件を指定します。詳細については、「SQL 条件を用いたデータフィルター」をご参照ください。
オブジェクト名マッピングによる名前変更は、依存関係のある他のオブジェクトの同期失敗を引き起こす可能性があります。
ステップ 5:高度な設定の構成
次へ:高度な設定 をクリックし、以下のパラメーターを構成します。
データ検証
データ検証の有効化について詳しくは、「データ検証の有効化」をご参照ください。
高度な設定
| パラメーター | 説明 |
|---|---|
| タスクのスケジュールに使用する専用クラスターの選択 | デフォルトで、ご利用の DTS 専用クラスターが選択されます。 |
| アラートの設定 | タスクの失敗またはレイテンシーがしきい値を超えた場合にアラート機能を設定します。スキップするには [いいえ] を、アラートのしきい値と連絡先を設定するには [はい] を選択します。詳細については、「DTS タスクを作成する際にモニタリングとアラートを設定する」をご参照ください。 |
| ソーステーブルで生成されたオンライン DDL ツールの一時テーブルを宛先データベースへコピー | DTS がオンライン DDL ツール(Data Management(DMS) や gh-ost)によって生成された一時テーブルをどのように処理するかを制御します。はい:一時テーブルのデータを同期します。ただし、大規模なオンライン DDL 操作では、同期時間が大幅に延長される可能性があります。いいえ、DMS オンライン DDL に準拠:一時テーブルを同期せず、DMS による元の DDL のみを同期します。この場合、宛先テーブルが操作中にロックされる可能性があります。いいえ、gh-ost に準拠:一時テーブルを同期せず、gh-ost による元の DDL のみを同期します。この場合、宛先テーブルがロックされる可能性があります。シャドウテーブルのフィルターには、デフォルトまたはカスタム正規表現を使用します。 重要 pt-online-schema-change はサポートされていません — 使用すると DTS タスクが失敗します。 |
| アカウントの移行の有無 | はい を選択すると、ソースからデータベースアカウント情報を同期します。選択した場合、同期対象のアカウントを選択してください。必要な権限:ソースアカウントは mysql.user、mysql.db、mysql.columns_priv、および mysql.tables_priv に対する SELECT 権限が必要です。宛先アカウントは CREATE USER および GRANT OPTION 権限が必要です。システムアカウント(root、mysql.infoschema、mysql.session、mysql.sys)および宛先データベースに既に存在するアカウントは同期できません。 |
| ソースデータベース内のトリガーの移行方法 | トリガーの同期方法を選択します。対象となるトリガーがない場合は、本パラメーターをスキップしてください。詳細については、「ソースデータベースからのトリガーの同期または移行」をご参照ください。 |
| 接続失敗時の再試行時間 | タスク開始後にソースまたは宛先データベースに到達不能となった場合の DTS の再試行時間です。有効範囲:10~1,440 分。デフォルト:720 分。30 分より大きい値を設定してください。複数の DTS タスクが同一のソースまたは宛先データベースを共有する場合、最も短い再試行時間が優先されます。再試行期間中は、インスタンスに対して課金されます — ソースまたは宛先インスタンスが不要になった場合は、速やかに解放してください。 |
| ソースおよび宛先データベースでその他の問題が発生した際の再試行までの待機時間 | DDL または DML 操作が失敗した場合の DTS の再試行時間です。有効範囲:1~1,440 分。デフォルト:10 分。10 分より大きい値を設定してください。この値は、接続失敗時の再試行時間 よりも小さくする必要があります。 |
ステップ 6:事前チェックの実行
次へ:タスク設定の保存および事前チェック をクリックします。
DTS は、タスク開始前に事前チェックを実行します。すべての事前チェック項目が合格した場合にのみ、タスクが起動します。
事前チェック項目のいずれかが不合格となった場合: 詳細の表示 をクリックして問題を特定・解決し、再チェック をクリックします。
アラートがトリガーされた場合:
無視できないアラートの場合:詳細の表示 をクリックして問題を解決し、再度事前チェックを実行します。
無視できるアラートの場合:アラート詳細の確認 をクリックし、無視、OK の順にクリックした後、再チェック をクリックします。
アラート項目を無視すると、データの不整合が発生し、業務に潜在的なリスクを及ぼす可能性があります。
ステップ 7:タスクの開始
事前チェックの合格率が 100 % になるまで待ち、次へ:DTS インスタンスタイプの選択 をクリックします。
新規インスタンスクラス セクションで、インスタンスクラスを構成します。最小で 1 DTS ユニット(DU)から、利用可能な残り DU 数まで設定できます。
Data Transmission Service(従量課金)利用規約 のチェックボックスを読み、同意して選択します。
タスクの開始 をクリックし、OK をクリックします。
タスクの進行状況を監視するには、クラスターの詳細ページを開き、左側のナビゲーションウィンドウから クラスタータスクリスト をクリックします。