Data Transmission Service (DTS) は、ApsaraDB for MongoDB のレプリカセットから PolarDB for MySQL クラスターへデータを同期します。本トピックでは、同期タスクの作成から実行までの手順を説明します。
事前準備
同期タスクを作成する前に、以下の準備作業を完了してください。
宛先クラスターの設定
ソースデータの合計サイズより大きな空きストレージ容量を持つ PolarDB for MySQL クラスターを作成します。(推奨:少なくとも 10 % の余裕を確保)「カスタム購入」および「サブスクリプションクラスターの購入」をご参照ください。
宛先クラスターに、プライマリキー列を含むデータベースおよびテーブルを作成します。「データベースの管理」をご参照ください。
宛先テーブルのスキーマ設計時の注意点:
MongoDB の ObjectId
_idフィールドに対応する列には、varchar を使用します。列名に _id または _value を指定しないでください。
必要な権限を持つアカウントの設定
| データベース | 必要な権限 | 参考情報 |
|---|---|---|
| ソース ApsaraDB for MongoDB | ソースデータベース、管理者データベース、およびローカルデータベースでの読み取り | アカウント管理 |
| 宛先 PolarDB for MySQL | 宛先データベースに対する読み取りおよび書き込み権限 | データベースアカウントの作成と管理 |
(シャードクラスターのみ)シャードエンドポイントの申請
ソースがシャードクラスターの場合、すべてのシャードノードに対してエンドポイントを申請します。すべてのシャードノードは、同一のアカウントパスワードおよびエンドポイントを共有する必要があります。「シャードのエンドポイント申請」をご参照ください。
課金
| 同期タイプ | 料金 |
|---|---|
| 完全データ同期 | 無料 |
| 増分データ同期 | 課金対象です。「課金概要」をご参照ください。 |
同期タイプ
| タイプ | 説明 |
|---|---|
| 完全データ同期 | ソース ApsaraDB for MongoDB インスタンスの既存データを、宛先 PolarDB for MySQL クラスターに同期します。 |
| 増分データ同期 | 完全データ同期の完了後、挿入、更新、削除操作を継続的に同期します。$set コマンドを使用して更新されたドキュメントのみが対象となります。 |
制限事項
ソースデータベースの制限事項
| 制限事項 | 詳細 |
|---|---|
| アウトバウンド帯域幅 | ソースサーバーには十分なアウトバウンド帯域幅が必要です。帯域幅が不足していると、同期速度が低下します。 |
| コレクション数の上限 | オブジェクト名の変更が必要な場合、1 つのタスクで最大 1,000 個のコレクションをサポートします。1,000 個を超えるコレクションを同期する場合は、複数のタスクを設定してください。 |
| 非対応データベース | DTS は、admin、config、local データベースからのデータ同期をサポートしません。 |
| 非対応ソースタイプ | スタンドアロン型の ApsaraDB for MongoDB インスタンス、Azure Cosmos DB for MongoDB クラスター、Amazon DocumentDB エラスティッククラスターはサポートされていません。 |
| Oplog または Change Stream | Oplog 機能を有効化し、操作ログを最低 7 日間保持するか、または Change Stream を有効化し、DTS が過去 7 日間以内の変更をサブスクライブ可能である必要があります。いずれの条件も満たさない場合、DTS がログを取得できず、タスクが失敗したりデータの不整合が発生したりする可能性があります。 |
| ストリーム バージョンの変更 | Change Stream を使用するには、MongoDB v4.0 以降が必要です。 |
| Amazon DocumentDB 非エラスティッククラスター | 移行方法 を ChangeStream に、アーキテクチャ を Sharded Cluster に設定します。 |
| 完全同期中の操作 | データベースまたはコレクションのスキーマ変更、ARRAY 型データの変更を行わないでください。完全同期のみ(増分同期なし)を実行する場合は、ソースデータベースへの書き込みを禁止します。 |
シャードクラスター固有の追加制限事項:
各コレクションの
_idフィールドは一意である必要があります。_id値が重複すると、データの不整合が発生します。mongos ノードの数は 10 を超えてはなりません。
インスタンスには孤立ドキュメントを含めてはなりません。MongoDB ドキュメントおよびよくある質問トピックをご参照ください。
ApsaraDB for MongoDB の balancer が有効化されている場合、インスタンスに遅延が発生する可能性があります。
宛先データベースおよびタスクの制限事項
| 制限事項 | 詳細 |
|---|---|
| 同期対象オブジェクトの種類 | 同期対象として選択できるのはコレクションのみです。 |
| プライマリキーの要件 | 宛先テーブルには、一意の単一列プライマリキー(複合プライマリキーは非対応)が必要です。プライマリキー列には bson_value("_id") を割り当てます。 |
| 予約済み列名 | 宛先テーブルには、_id または _value という名前の列を含めることはできません。 |
| トランザクション | トランザクションは保持されません。同期されたトランザクションは、個別のレコードに変換されます。 |
| 文字セット | データに稀少文字や絵文字(4 バイト文字)が含まれる場合、宛先データベースおよびテーブルは UTF8mb4 文字セットを使用する必要があります。DTS スキーマ同期を利用する場合は、character_set_server パラメーターを UTF8mb4 に設定します。 |
| FLOAT/DOUBLE の精度 | DTS は ROUND(COLUMN,PRECISION) を使用して FLOAT および DOUBLE 値を処理します。精度が指定されていない場合、DTS は FLOAT に対してデフォルトで 38 桁、DOUBLE に対して 308 桁を適用します。同期開始前にこれらのデフォルト値を確認してください。 |
| オフピーク時間 | 非ピーク時間帯に同期を実行してください。完全データ同期では、両方のデータベースの読み取りおよび書き込みリソースが使用されるため、サーバー負荷が増加する可能性があります。 |
| 同期後のストレージ | 完全同期完了後、同時 INSERT 操作により宛先コレクションに断片化が発生し、ソースよりも高いストレージ使用量になる可能性があります。 |
| 失敗したタスクの再開 | DTS は、失敗したタスクを最大 7 日間再開しようと試みます。ワークロードを宛先に切り替える前に、失敗したタスクを停止または解放するか、REVOKE を使用して DTS の書き込み権限を取り消してください。そうしないと、タスクが再開された際にソースデータが宛先データを上書きする可能性があります。 |
| 同期遅延の計算 | DTS は、増分同期の遅延を、宛先で最新に同期されたデータのタイムスタンプとソースの現在時刻に基づいて計算します。ソースでの更新が長期間行われていない場合、遅延の測定値が不正確になる可能性があります。遅延を更新するには、ソースで更新操作を実行してください。 |
| タスク障害の復旧 | DTS タスクが失敗した場合、DTS テクニカルサポートが 8 時間以内に復旧を試みます。タスクは再起動され、タスクパラメーター(データベースパラメーターではない)が変更される可能性があります。 |
データ同期タスクの作成
タスクの構成は、以下の 5 ステップで構成されます:
データ同期ページに移動します。
ソースおよび宛先データベースを構成します。
同期対象のオブジェクトを構成します。
事前チェックを実行します。
インスタンスを購入します。
ステップ 1:データ同期ページに移動
以下のいずれかの方法を使用します。
DTS コンソール
DMS コンソール
実際の手順は、DMS コンソールのモードおよびレイアウトによって異なる場合があります。詳細については、「シンプルモード」および「DMS コンソールのレイアウトとスタイルのカスタマイズ」をご参照ください。
ステップ 2:ソースおよび宛先データベースの構成
タスクの作成 をクリックします。
(任意)右上隅の 新規構成ページ をクリックします。
- 「以前のバージョンに戻る」が表示されている場合は、このステップはスキップしてください(すでに新バージョンが表示されています)。 - 可能な限り、新バージョンの構成ページをご利用ください。
以下のパラメーターを使用して、ソースおよび宛先データベースを構成します。
一般
| パラメーター | 説明 |
|---|---|
| タスク名 | DTS タスクの名前です。DTS が自動的に名前を生成しますが、タスクを識別しやすいように記述的な名前を指定することを推奨します。名前は一意である必要はありません。 |
ソースデータベース
| パラメーター | 説明 |
|---|---|
| 既存の接続を選択 | ソースインスタンスが既に DTS に登録済みの場合は、ドロップダウンリストから選択してください。DTS が残りのパラメーターを自動的に設定します。それ以外の場合は、以下に示すパラメーターを手動で構成してください。DMS コンソールでは、DMS データベースインスタンスの選択 ドロップダウンリストからインスタンスを選択します。 |
| データベースタイプ | MongoDB を選択します。 |
| アクセス方法 | Alibaba Cloud インスタンス を選択します。 |
| インスタンスリージョン | ソース ApsaraDB for MongoDB インスタンスが存在するリージョンです。 |
| Alibaba Cloud アカウント間でのデータ複製 | ソースデータベースが現在の Alibaba Cloud アカウントに属する場合は、いいえ を選択します。 |
| アーキテクチャ | ソースインスタンスのアーキテクチャです。本例では レプリカセット を選択します。ソースが シャードクラスター の場合は、シャードアカウント および シャードパスワード も指定します。 |
| 移行方法 | 増分データを同期する方法です。選択肢: Oplog(推奨)または ChangeStream。<br>- Oplog:Oplog 機能が有効化されている必要があります。ApsaraDB for MongoDB インスタンスでは Oplog がデフォルトで有効化されており、ログの高速プル機能により同期遅延が低減されます。<br>- ChangeStream:Change Stream が有効化されている必要があります。MongoDB v4.0 以降で利用可能です。Amazon DocumentDB イネラスティッククラスターでは ChangeStream のみを使用できます。アーキテクチャ が シャードクラスター の場合、シャードアカウント および シャードパスワード のパラメーターは不要です。「Change Streams」をご参照ください。 |
| インスタンス ID | ソース ApsaraDB for MongoDB インスタンスの ID です。 |
| 認証データベース | アカウント認証情報が格納されているデータベースです。デフォルト: admin。 |
| データベースアカウント | 必要な権限を持つアカウントです。 |
| データベースパスワード | データベースアカウントのパスワードです。 |
| 暗号化 | 接続の暗号化方法です:暗号化なし、SSL 暗号化、または Mongo Atlas SSL。利用可能なオプションは、アクセス方法 および アーキテクチャ の設定によって異なります — コンソールに表示されるオプションが適用されます。 説明 アーキテクチャ が シャードクラスター で、移行方法 が Oplog の場合、SSL 暗号化は利用できません。Alibaba Cloud 以外のアクセス方法で SSL 暗号化を使用する自己管理 MongoDB(レプリカセットアーキテクチャ)では、CA 証明書をアップロードして接続を検証してください。 |
宛先データベース
| パラメーター | 説明 |
|---|---|
| 既存の接続を選択 | 宛先インスタンスが既に DTS に登録済みの場合は、ドロップダウンリストから選択してください。DTS が残りのパラメーターを自動的に設定します。それ以外の場合は、以下に示すパラメーターを手動で構成してください。 |
| データベースタイプ | PolarDB for MySQL を選択します。 |
| アクセス方法 | Alibaba Cloud インスタンス を選択します。 |
| インスタンスリージョン | 宛先 PolarDB for MySQL クラスターが存在するリージョンです。 |
| Alibaba Cloud アカウント間でのデータ複製 | 宛先データベースが現在の Alibaba Cloud アカウントに属する場合は、いいえ を選択します。 |
| PolarDB クラスター ID | 宛先 PolarDB for MySQL クラスターの ID です。 |
| データベースアカウント | 必要な権限を持つアカウントです。 |
| データベースパスワード | データベースアカウントのパスワードです。 |
| 暗号化 | 接続の暗号化方法です。「SSL 暗号化の設定」をご参照ください。 |
接続テストと続行 をクリックします。
・DTS サーバーの CIDR ブロックを、両方のデータベースのセキュリティ設定に追加する必要があります。DTS により自動的に追加される場合がありますが、手動で追加することもできます。詳細については、「DTS サーバーの CIDR ブロックをオンプレミスデータベースのセキュリティ設定に追加する」をご参照ください。・[アクセス方法] が [Alibaba Cloud インスタンス] でない自己管理データベースの場合、[接続テスト] をクリックし、[DTS サーバーの CIDR ブロック] ダイアログボックスで操作します。
ステップ 3:同期対象オブジェクトの構成
オブジェクトの構成 ステップで、以下のパラメーターを設定します。
| パラメーター | 説明 |
|---|---|
| 同期タイプ | 増分データ同期 がデフォルトで選択されています。必要に応じて 完全データ同期 を選択します。スキーマ同期 は選択できません。 |
| 競合テーブルの処理モード | 事前チェックとエラー報告(デフォルト):タスク開始前にテーブル名の競合をチェックします。同一のテーブル名が存在する場合、事前チェックは失敗し、タスクは開始できません。競合するテーブルを削除または名前変更できない場合は、「オブジェクト名マッピング」機能を使用してテーブル名を変更してください。<br>エラーを無視して続行:競合チェックをスキップします。 警告 このオプションはデータの不整合を引き起こす可能性があります。完全同期中は、主キーまたは一意キーが一致する既存の宛先レコードが保持されます。増分同期中は、それらのレコードが上書きされます。スキーマが異なる場合、初期化が失敗したり、一部の列のみが同期されたりする可能性があります。 |
| 宛先インスタンスにおけるオブジェクト名の大文字小文字の扱い | 送信先のデータベース名、テーブル名、および列名の大文字小文字のポリシー。デフォルト: [DTS デフォルトポリシー]。詳細については、「送信先インスタンス内のオブジェクト名の大文字小文字を指定する」をご参照ください。 |
| ソースオブジェクト | ソースオブジェクト セクションから 1 つ以上のコレクションを選択し、 |
選択済みオブジェクト セクションで、オブジェクトマッピングを構成します。(任意)同期不要のフィールドを削除するには、該当行の後に表示される
アイコンをクリックします。データベース名の変更:選択済みオブジェクト 内のデータベースを右クリックし、
スキーマ名 を PolarDB for MySQL のターゲットデータベース名に変更し、
OK をクリックします。コレクション名の変更:選択済みオブジェクト 内のコレクションを右クリックし、
テーブル名 を PolarDB for MySQL のターゲットテーブル名に変更します。
(任意)フィルター条件を指定します。「フィルター条件の指定」をご参照ください。

(任意)同期対象の DDL および DML 操作の選択 セクションで、同期対象の増分操作を選択します。

フィールドのマッピング:DTS はコレクションデータを自動的にマッピングし、値の割り当て 列に
bson_value()式を生成します。式が要件を満たすことを確認したうえで、各フィールドについて 列名、型、長さ、精度 を構成します。重要宛先テーブルのプライマリキー列には
bson_value("_id")を割り当てます。各bson_value()式では、ドキュメントの階層構造に従ってフィールドおよびそのサブフィールドの両方を指定してください。親フィールドのみ(例:bson_value("person"))を指定しても、そのサブフィールドは宛先に同期されません。正しい式を持つフィールド
列名 を、宛先 PolarDB for MySQL テーブル内の対応する列名に設定します。
型 を、ソースデータと互換性のある型から選択します。データ型のマッピングについては、「データ型マッピング」セクションをご参照ください。
(任意)長さ および 精度 を設定します。
各フィールドについて同様の手順を繰り返します。
誤った式を持つフィールド
行の [アクション] 列にある
アイコンをクリックします。+ 列の追加 をクリックします。

列名、型、長さ、精度 を設定します。
値の割り当て に正しい
bson_value()式を入力します。例については、「フィールドマッピングの例」セクションをご参照ください。各フィールドについて同様の手順を繰り返します。
重要- 宛先テーブルのプライマリキー列には
bson_value("_id")を割り当てます。 - 各bson_value()式では、ドキュメントの階層構造に従ってフィールドおよびそのサブフィールドの両方を指定してください。親フィールドのみ(例:bson_value("person"))を指定しても、そのサブフィールドは宛先に同期されません。OK をクリックします。
次へ:高度な設定 をクリックし、以下のパラメーターを構成します。
| パラメーター | 説明 |
|---|---|
| タスクスケジューリング用専用クラスター | デフォルトでは、DTS はタスクを共有クラスターにスケジュールします。同期の安定性を向上させるには、専用クラスターをご購入ください。詳細については、「DTS 専用クラスターとは」をご参照ください。 |
| 宛先データベースのエンジンタイプの選択 | 宛先データベースのストレージエンジンです。選択肢:InnoDB(デフォルト)または X-Engine(OLTP ワークロード向け)。 |
| 接続失敗時の再試行時間 | DTS が接続失敗時に再試行する時間範囲です。有効値:10~1440 分。デフォルト:720 分。30 分より大きい値を設定してください。この範囲内に DTS が再接続できた場合、タスクは再開されます。そうでない場合、タスクは失敗します。同じソースまたは宛先データベースを複数のタスクが共有し、再試行範囲が異なる場合、最も短い範囲が優先されます。再試行中も課金は継続されます。 |
| その他の問題発生時の再試行時間 | DTS が失敗した DDL または DML 操作を再試行する時間範囲です。有効値:1~1440 分。デフォルト:10 分。10 分より大きく、かつ 接続失敗時の再試行時間 より小さい値を設定してください。 |
| 完全データ同期のスロットリング有効化 | 完全同期中の読み取り/書き込みリソース使用量を制限し、データベースサーバーの負荷を軽減します。ソースデータベースへのクエリ数(QPS)、完全データ移行の RPS、完全移行のデータ移行速度(MB/s) を構成します。完全データ同期 が選択されている場合にのみ利用可能です。 |
| 同期対象データのテーブルにおいて、プライマリキー _id は 1 つのデータ型のみ許可 | 完全同期中に DTS が _id のデータ型をスキャンするかどうかを制御します。はいアラート通知設定:スキャンをスキップします。いいえ:型をスキャンします。完全データ同期 が選択されている場合にのみ表示されます。 |
| 増分データ同期のスロットリング有効化 | 増分同期中のリソース使用量を制限します。増分データ同期の RPS および 増分同期のデータ同期速度(MB/s) を構成します。 |
| 環境タグ | タスクを分類するための任意のタグです。 |
| ETL の構成 | 抽出・変換・書き出し(ETL)機能を有効化するかどうかを指定します。はいETL の設定:コードエディタにデータ処理文を入力します。「」をご参照ください。いいえ:ETL を無効化します。 |
| モニタリングとアラート | アラートを設定するかどうかを指定します。 [はい]: アラートのしきい値と通知の連絡先を設定します。 [いいえ]: アラートは設定されません。 詳細については、「モニタリングとアラートの設定」をご参照ください。 |
ステップ 4:設定の保存と事前チェックの実行
このタスクの API パラメーターをプレビューするには、次へ:タスク設定の保存と事前チェック の上にポインタを合わせ、OpenAPI パラメーターのプレビュー をクリックします。
続行するには、次へ:タスク設定の保存と事前チェック をクリックします。
DTS はタスク開始前に事前チェックを実行します。事前チェックに合格した場合のみ、タスクが開始されます。
事前チェックが失敗した場合、各失敗項目の横にある 詳細の表示 をクリックし、問題を修正したうえで 再び事前チェック をクリックしてください。
アラートがトリガーされた場合:無視できない項目については、問題を修正して事前チェックを再実行してください。無視可能な項目については、アラート詳細の確認 > 無視 > OK > 再び事前チェック の順にクリックしてください。アラートを無視すると、データの不整合が発生する可能性があります。
ステップ 5:インスタンスの購入
成功率 が 100% に達するまで待機し、次へ:インスタンスの購入 をクリックします。
購入 ページで、以下のパラメーターを構成します。
| パラメーター | 説明 |
|---|---|
| 課金方法 | サブスクリプション:前払い方式。長期利用に適したコスト効率の高い課金方法です。従量課金:1 時間単位で課金されます。短期利用に適しています。不要になった場合は、インスタンスをリリースして課金を停止してください。 |
| リソースグループ設定項目 | 同期インスタンスが属するリソースグループです。デフォルト値: デフォルトリソースグループ。詳細については、「リソース管理とは |
| インスタンスクラス | インスタンスクラスインスタンスクラスは同期処理の速度を決定します。詳細については、「」をご参照ください。 |
| サブスクリプション期間 | 「サブスクリプション」課金方法でのみ利用可能です。選択肢:1~9 か月、または 1 年、2 年、3 年、5 年。 |
Data Transmission Service(従量課金)サービス利用規約 を読み、同意します。
購入して開始 をクリックし、ダイアログボックスで OK をクリックします。
タスクが開始された後は、タスクリストで進行状況を監視してください。
データ型マッピング
以下の表は、MongoDB のデータ型と PolarDB for MySQL のデータ型の対応関係を示しています。
| MongoDB のデータ型 | PolarDB for MySQL のデータ型 | 備考 |
|---|---|---|
| ObjectId | VARCHAR | 文字列表現として格納されます。 |
| String | VARCHAR | |
| Document | VARCHAR | |
| DbPointer | VARCHAR | |
| Array | VARCHAR | |
| Date | DATETIME | |
| TimeStamp | DATETIME | |
| Double | DOUBLE | 精度が指定されていない場合、ROUND(COLUMN,PRECISION) を使用してデフォルトで 308 桁が適用されます。 |
| 32 ビット整数(BsonInt32) | INTEGER | |
| 64 ビット整数(BsonInt64) | BIGINT | |
| Decimal128 | DECIMAL | |
| Boolean | BOOLEAN | |
| Null | VARCHAR |
フィールドマッピングの例
以下の例では、ソースドキュメント構造および宛先テーブルスキーマを前提としています。
ソース ApsaraDB for MongoDB インスタンスのデータ構造
{
"_id": "62cd344c85c1ea6a2a9f****",
"person": {
"name": "neo",
"age": 26,
"sex": "male"
}
}宛先 PolarDB for MySQL クラスターのテーブルスキーマ
| 列名 | 型 | 備考 |
|---|---|---|
| mongo_id | varchar | プライマリキー |
| person_name | varchar | |
| person_age | decimal |
新規列の構成
すべての 3 つの宛先列には、person がサブフィールドを含む親フィールドであるため、ネストされたフィールド式が必要です。
| 列名 | 型 | 値の割り当て |
|---|---|---|
| mongo_id | STRING | bson_value("_id") |
| person_name | STRING | bson_value("person","name") |
| person_age | DECIMAL | bson_value("person","age") |
bson_value("person") のみを指定しても、name、age、sex などのサブフィールドは個別の列に同期されません。bson_value() 式には、常に完全な階層パスを指定してください。
この構成後、宛先テーブルには以下の構造でデータが受信されます:
| mongo_id | person_name | person_age |
|---|---|---|
| 62cd344c85c1ea6a2a9f**** | neo | 26 |