Data Transmission Service (DTS) を使用して、RDS for MySQL インスタンスから DuckDB ベースの分析プライマリインスタンスへスキーマとデータを同期します。DuckDB はカラムナストレージ、Just-in-Time (JIT) コンパイル、ベクトル化実行、並列処理をサポートし、InnoDB と比べて複雑なクエリのパフォーマンスが最大 100 倍向上します。そのため、ビジネスインテリジェンス (BI) ダッシュボード、インタラクティブなクエリシステム、リアルタイムレポーティングパイプラインの構築に適しています。
[セットアップの概要:] セットアップは 3 つのステージで構成されます:ソースデータベースとターゲットデータベースの構成 → 同期オブジェクトと詳細設定の選択 → 事前チェックの実行と同期インスタンスの購入。
前提条件
開始する前に、次の項目を確認してください:
-
DuckDB ベースの分析プライマリインスタンス。「DuckDB ベースの分析プライマリインスタンスを作成する」をご参照ください。
-
ターゲットインスタンス上のストレージ容量が、ソースデータベースの使用済みストレージ容量を上回っていること
サポートされているソースインスタンス タイプ
DTS は、次の MySQL ソース タイプをサポートしています:
-
RDS for MySQL
-
ECS インスタンス上のセルフマネージド MySQL データベース
-
オンプレミスのセルフマネージド MySQL データベース
このトピックでは、[RDS for MySQL] インスタンスを使用した構成例を示します。セルフマネージド MySQL データベースでも手順は同様です。
ソースがセルフマネージド MySQL データベースの場合は、事前に追加の準備手順を完了してください。「準備の概要」をご参照ください。
サポートされている SQL 操作
DDL: CREATE TABLE、DROP TABLE、RENAME TABLE、TRUNCATE TABLE、ADD COLUMN、DROP COLUMN、MODIFY COLUMN
DML: INSERT、UPDATE、DELETE
UPDATEおよびDELETEステートメントには、ORDER BY句またはLIMIT句を含めることはできません。
同期中にソース テーブルのフィールド型を変更すると、タスクはエラーを報告して停止します。手動で解決するには、「フィールド型の変更が原因で発生した同期失敗を修正する」をご参照ください。
制限事項
-
すべてのソース テーブルにはプライマリキーが必要です。プライマリキーがないテーブルは同期できません。
-
同期中に gh-ost または pt-online-schema-change を使用してソース テーブルに対してオンライン DDL 変更を実行しないでください。タスクが失敗します。DMS または gh-ost を使用する場合は、詳細設定のステップで [Replicate Temporary Tables Generated by Online DDL Tools] を構成してください。
-
プレフィックスインデックスはサポートされていません。ソース テーブルでプレフィックスインデックスを使用している場合、タスクが失敗する可能性があります。
-
DuckDB ベースの分析プライマリインスタンス クラスターは、いずれかのノードのディスク使用率が 80% を超えるとロックされます。同期オブジェクトに必要な容量を事前に見積もってください。
-
ターゲットインスタンスのバックアップ中に DTS タスクを実行すると、タスクは失敗します。
-
DuckDB ベースの分析プライマリインスタンスは、同期タスクのソースとして使用できません。
-
LIMIT句、UUID()などの非決定性関数、またはXAトランザクションを含む DML ステートメントは、Unsafeレプリケーション操作としてマークされます。これにより、ソースとターゲット間でデータ不整合が発生する可能性があります。 -
両方のデータベースの CPU 使用率が 30% 未満となるオフピーク時間帯に同期をスケジュールしてください。完全データ同期は、両方のデータベースの読み取りおよび書き込み負荷を増加させます。
課金
| 同期タイプ | 料金 |
|---|---|
| スキーマ同期および完全データ同期 | 無料 |
| 増分データ同期 | 有料。「課金の概要」をご参照ください。 |
必要なデータベースアカウント権限
| データベース | 必要な権限 |
|---|---|
| RDS for MySQL | 特権アカウントの使用を推奨します。標準アカウントの場合:すべての同期オブジェクトに対する REPLICATION CLIENT、REPLICATION SLAVE、SHOW VIEW、SELECT。 |
| DuckDB ベースの分析プライマリインスタンス | 特権アカウントの使用を推奨します。標準アカウントの場合:READ と WRITE。 |
同期タスクのセットアップ
ステップ 1:ソースデータベースとターゲットデータベースの構成
-
DTS コンソールにログオンします。 左側のナビゲーションペインで、[データ同期] を選択します。 上部のナビゲーションバーで、インスタンスが存在するリージョンを選択します。
-
[データ同期タスク] ページで、[タスクの作成] をクリックします。
-
[同期タスクの作成] > [ソースデータベースと宛先データベースの設定] ページで、以下のパラメーターを設定します。
ソースインスタンス
| パラメーター | 説明 |
|---|---|
| Database Type | [Relational Database] > [MySQL] |
| Access Mode | [Cloud Instance] |
| Instance Region | ソースインスタンスのリージョン。タスク購入時に選択され、後から変更できません。 |
| Cross-account Synchronization | [No] |
| Instance ID | ソースの RDS for MySQL インスタンスの ID。 |
| Database Account | ソースインスタンスのデータベースアカウント。「必要なデータベースアカウント権限」をご参照ください。 |
| Database Password | データベースアカウントのパスワード。 |
| Connection Method | [Non-encrypted Connection] または [SSL-encrypted Connection]。SSL を使用するには、事前に RDS インスタンスで SSL 暗号化を有効化してください。「Use a cloud-native certificate to enable SSL encryptionUse a cloud-native certificate to enable SSL encryption
重要
現在、暗号化 は中国本土のリージョンおよび香港 (中国) リージョンでのみ設定できます。 |
SSL 暗号化は、中国本土および中国 (香港) リージョンでのみ設定できます。
ターゲットインスタンス
| パラメーター | 説明 |
|---|---|
| Database Type | [Data Warehouse] > [DuckDB] |
| Access Mode | [Cloud Instance] |
| Instance Region | ターゲットインスタンスのリージョン。タスク購入時に選択され、後から変更できません。 |
| Cross-account Synchronization | [No] |
| RDS Instance ID | ターゲットの DuckDB ベースの分析プライマリインスタンスの ID。 |
| Database Account | ターゲットインスタンスのデータベースアカウント。「必要なデータベースアカウント権限」をご参照ください。 |
| Database Password | データベースアカウントのパスワード。 |
| Connection Method | [Non-encrypted Connection] または [SSL-encrypted Connection]
重要
現在、暗号化 は中国本土のリージョンおよび香港 (中国) リージョンでのみ設定できます。 |
DTS はクロスリージョン同期をサポートしています。このトピックでは、同一リージョンおよび同一 VPC のインスタンスを例として使用します。その他のシナリオについては、「データ同期シナリオの概要」をご参照ください。
-
[接続をテストして続行] をクリックします。
-
[DTS サーバーアクセス承認] ダイアログボックスで、[接続テスト] をクリックします。
ステップ 2:同期オブジェクトと詳細設定の構成
-
[同期オブジェクトの設定] ページで、次のパラメーターを設定します。
| パラメーター | 説明 |
|---|---|
| [Synchronization Types] | ユースケースに応じて同期タイプを選択します:<br>• フル同期のみ:[Schema Synchronization] と [Full Data Synchronization] を選択します。<br>• サービスを停止せずに継続同期:[Schema Synchronization]、[Full Data Synchronization]、[Incremental Data Synchronization] (有料) を選択します。<br><br> 説明
[Schema Synchronization] をスキップする場合は、ターゲットデータベースにターゲット テーブルが既に存在することを確認してください。[Incremental Data Synchronization] をスキップする場合は、データ整合性を維持するため、同期中にソースデータベースへの書き込みを行わないでください。 |
| [Trigger Migration Method] | トリガーの扱い方を選択します。[Schema Synchronization] を選択した場合にのみ使用できます。トリガーを使用しない場合は、このパラメーターをスキップしてください。「トリガーを同期または移行する方法を構成する」をご参照ください。 |
| [Enable Migration Evaluation] | ソースとターゲットのスキーマ (インデックス長、ストアドプロシージャ、依存テーブル) が要件を満たしているかを評価します。[Schema Synchronization] を選択した場合にのみ使用できます。[Yes] に設定すると、事前チェックの所要時間は長くなりますが、事前チェック中に評価結果を確認できます。評価結果は事前チェックの結果には影響しません。 |
| [Synchronization Topology] | [One-way Synchronization] を選択します。 |
| [Processing Mode for Existing Tables] | • [Precheck and Report Error]:ターゲットデータベースに同名のテーブルが既に存在する場合、事前チェック中にエラーを報告します。競合するテーブルの名前を変更するには、「テーブル名と列名をマッピングする」をご参照ください。<br>• [Ignore and Continue]:存在チェックをスキップします。<br><br> 警告
[Ignore and Continue] を使用する場合、競合の扱いは同期タイプによって異なります。完全同期では、DTS はターゲットのレコードを保持し、ソースのレコードをスキップします。増分同期では、ソースのレコードがターゲットのレコードを上書きします。スキーマが一致していない場合、一部のデータしか同期されなかったり、タスクが失敗したりする可能性があります。 |
| [Migrate Event] | イベントを移行するかどうかを選択します。[Yes] を選択した場合は、「イベントを同期または移行する」の要件に従ってください。 |
| [Case Sensitivity of Object Names] | ターゲットにおけるデータベース名、テーブル名、列名の大文字と小文字の区別ポリシーを設定します。デフォルトは [DTS Default Policy] です。「ターゲットデータベース内のオブジェクト名の大文字と小文字の区別ポリシー」をご参照ください。 |
| [Source Objects] | [Source Objects] ボックスで同期するオブジェクトを選択し、 |
| [Selected Objects] | オブジェクトを右クリックして名前を変更するか、WHERE 句で行をフィルタリングします。[Batch Edit] をクリックすると複数のオブジェクト名を変更できます。「テーブル名と列名をマッピングする」および「WHERE 句を使用してデータをフィルタリングする」をご参照ください。 |
-
[次へ: 詳細設定] をクリックし、必要に応じて以下のパラメーターを設定します。ほとんどのシナリオでは、デフォルト設定のままで問題ありません。
| パラメーター | 説明 |
|---|---|
| [Dedicated Cluster] | デフォルトでは、DTS は共有クラスター上でタスクを実行します。タスクの安定性を高めるには、専用クラスターを購入してください。「DTS 専用クラスター」をご参照ください。 |
| [Replicate Temporary Tables Generated by Online DDL Tools] | オンライン DDL ツールが生成する一時テーブルの扱いを制御します。pt-online-schema-change はサポートされていません。<br>• [Yes]:一時テーブルのデータを同期します。大きな一時テーブルはレイテンシーを増加させる可能性があります。<br>• [No, Adapt to DMS Online DDL]:一時テーブルのデータをスキップし、DMS の元の DDL のみを同期します。この処理中、ターゲット テーブルはロックされます。<br>• [No, Adapt to gh-ost]:一時テーブルのデータをスキップし、gh-ost の元の DDL のみを同期します。必要に応じて、シャドウテーブルとトラッシュテーブルの正規表現を構成します。この処理中、ターゲット テーブルはロックされます。 |
| [Migrate Accounts] | ソースのデータベースアカウント情報を同期するかどうかを選択します。[Yes] の場合は、アカウントを選択し、権限を確認してください。「データベースアカウントを移行する」をご参照ください。 |
| [Retry Duration upon Connection Failure] | 接続エラーが発生した後、タスクが失敗するまで DTS が再試行する時間。デフォルト:720 分。範囲:10~1,440 分。30 分以上に設定してください。この期間内に DTS が再接続できた場合、タスクは自動的に再開されます。<br><br> 説明
複数の DTS インスタンスが同じソースまたはターゲットを共有する場合、最短の再試行時間がすべてのインスタンスに適用されます。DTS は再試行期間中も課金されます。 |
| [Retry Duration for Other Errors] | 接続以外のエラー (DDL または DML の実行失敗など) に対して DTS が再試行する時間。デフォルト:10 分。範囲:1~1,440 分。10 分以上に設定してください。[Retry Duration upon Connection Failure] より短くする必要があります。 |
| [Data Rate Limit for Full Synchronization] | ターゲットデータベースへの負荷を抑えるため、完全同期のデータレートを制限します。[QPS Limit for Source Database]、[RPS Limit for Full Synchronization]、[BPS Limit for Full Synchronization (MB/s)] を設定します。[Full Data Synchronization] を選択した場合にのみ使用できます。 |
| [Data Rate Limit for Incremental Synchronization] | 増分同期のデータレートを制限します。[RPS Limit for Incremental Synchronization] と [BPS Limit for Incremental Synchronization (MB/s)] を設定します。 |
| [Remove Heartbeat Table SQL] | DTS がソースデータベースにハートビート SQL を書き込むかどうかを制御します。<br>• [Yes]:ハートビート SQL を書き込みません。DTS インスタンスで遅延が表示される場合があります。<br>• [No]:ハートビート SQL を書き込みます。ソースデータベースの物理バックアップおよびクローンに影響する可能性があります。 |
| [Environment Tag] | インスタンスの環境を識別するためのタグ。 |
| [Scenario Tag] | インスタンスのユースケースを識別するためのタグ。 |
| [Configure ETL] | 抽出、変換、ロード (ETL) 機能を構成するかどうかを選択します。「DTS の移行または同期タスクで ETL を構成する」をご参照ください。 |
| [Sensitive Data Scan and Desensitization] | 転送中に機密データを識別してマスキングする場合に有効にします。 |
-
[次へ: データ検証の設定] をクリックして、データ検証を設定します。
スキーマ検証は、過去の互換性の問題により、誤って不整合エラーを報告する場合があります。これは実際の同期結果には影響しません。誤検出を避けるため、スキーマ検証は有効化しないでください。
| パラメーター | 説明 |
|---|---|
| [Full Verification Mode] | • [Full-field verification on sampled rows]:全フィールド検証のサンプリング率 (10~100%) を設定します。検証したデータ量に基づいて課金されます。<br>• [Row count verification]:行数のみを検証し、データ内容は検証しません。無料です。 |
| [Full Verification Schedule] | [Start Now] のみサポートされています。 |
| [Full Verification Timeout] | • [Not set]:検証タスクは完了するまで実行されます。<br>• [Set]:指定した期間が経過した後にタスクを強制終了します。値は 1~72 の整数である必要があります。 |
| [Full Verification Baseline] | • [Default]:ソースとターゲットの和集合をベースラインとして使用します。<br>• [Source]:ターゲットデータベースのデータがソースと一致することを検証します。ターゲットにのみ存在するデータは無視します。<br>• [Destination]:ソースデータベースのデータがターゲットと一致することを検証します。ソースにのみ存在するデータは無視します。 |
| [Maximum RPS for Full Verification] | データベースの負荷を抑えるため、完全検証中に 1 秒あたりに読み取る行数を制限します。0 は制限なしを意味します。これと [Maximum BPS for Full Verification (byte/s)] の両方を 0 に設定した場合、レート制限は適用されません。 |
| [Maximum BPS for Full Verification (byte/s)] | |
| [Incremental Verification Baseline] | 検証する DML 操作をフィルタリングします。 |
| [Verification Objects] | [Selected Objects]デフォルトでは、すべての同期オブジェクトが含まれます。検証しないオブジェクトは、[Selected Objects] ボックスで選択して |
| [Full Verification Alert] | 検証失敗、または不整合データがしきい値を超えた場合のアラートを設定します。 |
| [Incremental Verification Alert] | 検証失敗、不整合レコード数、またはレイテンシーがしきい値を超えた場合のアラートを設定します。 |
-
[次へ: タスクを保存して事前チェック] をクリックします。
ステップ 3:事前チェックの実行と購入
-
[事前チェック合格率] が 100% に達したら、[次へ: 購入] をクリックします。
事前チェックに合格するまで、タスクは開始できません。チェック項目が失敗した場合、失敗した項目の横にある
アイコンをクリックして原因を確認し、問題を修正して事前チェックを再実行してください。警告項目をスキップするには、[確認] をクリックしてから [無視して事前チェックを再実行] をクリックします。 -
[購入] ページで、請求方法とリンク仕様を選択します。
| カテゴリ | パラメーター | 説明 |
|---|---|---|
| [基本情報] | [Billing Method] | • [サブスクリプション]:前払いです。長期利用ではコスト効率が高く、期間が長いほど割引率が高くなります。<br>• [従量課金]:時間単位で課金されます。短期利用に適しており、インスタンスはいつでもリリースして課金を停止できます。 |
| [リソースグループ] | インスタンスのリソースグループ。デフォルトは [Default Resource Group] です。「What is Resource Management?」をご参照ください。 | |
| [リンク仕様] | 同期スループットを決定します。データ量とレイテンシー要件に基づいて選択してください。「データ同期リンクの仕様」をご参照ください。 | |
| [Subscription Duration] | [サブスクリプション] の課金方法でのみ使用できます。1~9 か月、または 1、2、3、5 年を選択します。 |
-
[データ転送サービス (従量課金) 利用規約]を読み、同意して、[購入して開始]をクリックし、次に [OK] をクリックします。
-
購入が完了すると、[データ同期タスク] ページにリダイレクトされます。タスク ID をクリックしてその詳細ページを開き、[タスク管理] をクリックして同期の進捗を監視します。
フィールド型の変更が原因で発生した同期失敗の修正
同期中にソース テーブルのフィールド型が変更されると、タスクは停止します。次の手順で問題を解決します。
-
ターゲットインスタンスで、失敗したテーブル (例:
customer) を基に新しいテーブル (例:customer_new) を作成します。更新後のスキーマに合わせてフィールド型を調整します。 -
INSERT INTO SELECTを実行して、元のテーブルから新しいテーブルにデータをコピーします。両方のテーブルに同一のデータが含まれていることを確認します。 -
元のテーブルをリネームまたは削除し、新しいテーブルを元の名前 (例:
customer) にリネームします。 -
DTS コンソールで同期タスクを再起動します。