Data Transmission Service (DTS) を使用すると、ApsaraDB for MongoDB のレプリカセットインスタンスから AnalyticDB for MySQL V3.0 クラスターへ、完全なデータ移行および増分データ移行を含むデータの移行が可能です。
仕組み
MongoDB はドキュメント指向型データベースであり、AnalyticDB for MySQL V3.0 はリレーショナル分析データベースです。移行の設定を行う前に、MongoDB の概念とリレーショナルデータベースの概念との対応関係を理解してください。
| MongoDB の概念 | リレーショナル相当 | 備考 |
|---|---|---|
| ドキュメント | 行 | MongoDB のドキュメントは、型付きフィールドを持つ BSON オブジェクトです。DTS では、各フィールドを bson_value() 式を使用して宛先列にマッピングします。 |
| コレクション | テーブル | コレクションはスキーマが柔軟です。移行前に、AnalyticDB for MySQL でターゲットテーブルのスキーマを定義する必要があります。 |
| データベース | スキーマ | MongoDB のデータベース名は、宛先のスキーマ名に対応します。 |
_id フィールド | プライマリキー列 | _id フィールドはデフォルトで ObjectId 型であり、AnalyticDB for MySQL では VARCHAR 型に対応します。 |
DTS はソースの ApsaraDB for MongoDB インスタンスからデータを読み取り、bson_value() 式を使用して各 BSON フィールドを宛先列にマッピングし、AnalyticDB for MySQL V3.0 のターゲットテーブルにデータを書き込みます。
前提条件
開始する前に、以下の条件を満たしていることを確認してください。
(シャードクラスターをソースとする場合のみ)すべてのシャードノードのエンドポイント。シャードノード間でユーザー名とパスワードが一貫している必要があります。詳細については、「シャードまたは ConfigServer コンポーネントのエンドポイント申請」をご参照ください。
ソースインスタンスの合計データサイズよりも大きな利用可能なストレージ容量を持つ、宛先の AnalyticDB for MySQL V3.0 クラスター。詳細については、「クラスターの作成」をご参照ください。
宛先データベースの利用可能なストレージ容量は、ソースデータベースのデータ総量に対して少なくとも 10 % 大きくすることを推奨します。
宛先クラスター内に、プライマリキー列を備えたデータベースおよびテーブルを作成済みであること。詳細については、「CREATE DATABASE」および「CREATE TABLE」をご参照ください。
宛先クラスターで、次のコマンドを実行して複数ステートメント機能を有効化済みであること:
複数ステートメント機能は、AnalyticDB for MySQL V3.1.9.3 以降を必要とします。マイナーバージョンの確認および更新については、「クラスターのマイナーバージョンを更新する」をご参照ください。
SET ADB_CONFIG ALLOW_MULTI_QUERIES=true;
宛先テーブルの設計要件:
プライマリキー列は単一列である必要があります(複合プライマリキーはサポートされていません)。プライマリキー列には
bson_value("_id")を割り当ててください。宛先テーブルのデータ型は、ソースデータと互換性がある必要があります。たとえば、MongoDB の
_idフィールドが ObjectId 型の場合、AnalyticDB for MySQL の対応する列は VARCHAR 型である必要があります。任意の列に _id または _value という名前を付けないでください。これらの名前を付けると、移行タスクが失敗します。
課金
| 移行タイプ | タスク構成料金 | データ転送料金 |
|---|---|---|
| フルデータ移行 | 無料 | この例では無料です。アクセス方法 を パブリック IP アドレス に設定した場合、インターネットトラフィック料金が発生します。詳細については、「課金対象項目」をご参照ください。 |
| インクリメンタルデータ移行 | 有料です。詳細については、「課金概要」をご参照ください。 | — |
移行タイプ
| 移行タイプ | 説明 |
|---|---|
| 完全なデータ移行 | DTS は、ソースの ApsaraDB for MongoDB インスタンスから宛先の AnalyticDB for MySQL V3.0 クラスターへ、すべての既存データを移行します。 |
| 増分データ移行 | 完全なデータ移行が完了した後、DTS はソースから宛先へ、新規の INSERT、UPDATE、DELETE 操作を継続的に移行します。増分更新については、$set コマンドを使用した更新のみがサポートされます。 |
移行中のサービス継続性を確保するには、完全データ移行 および 増分データ移行 の両方を選択してください。完全データ移行のみを選択した場合、データの不整合を防ぐため、移行中にソースデータベースへの書き込みを停止してください。
必要なデータベースアカウント権限
| データベース | 完全なデータ移行 | 増分データ移行 |
|---|---|---|
| ソース ApsaraDB for MongoDB | ソースデータベースに対する読み取り権限 | ソースデータベース、admin データベース、local データベースに対する読み取り権限 |
| 宛先の AnalyticDB for MySQL V3.0 | 宛先データベースに対する読み取りおよび書き込み権限 | 宛先データベースに対する読み取りおよび書き込み権限 |
MongoDB アカウントの管理については、「アカウント管理」をご参照ください。AnalyticDB for MySQL のアカウントについては、「データベースアカウントの作成」をご参照ください。
注意事項
ブロッキング問題 — 移行開始前に解決してください:
移行対象として選択できるのはコレクションのみです。データベースレベルでの選択はサポートされていません。
コレクションを移行対象として選択し、宛先データベース内のコレクション名を変更するなどの操作を行う場合、1 つのタスクで最大 1,000 個のコレクションをサポートします。それ以上のコレクションを移行する場合は、複数のタスクを作成してください。
DTS は SRV エンドポイント経由で MongoDB に接続できません。
DTS は admin または local データベースからのデータ移行はできません。
スタンドアロンの MongoDB データベース、Azure Cosmos DB for MongoDB クラスター、Amazon DocumentDB エラスティッククラスターから、DTS を使用して完全なデータを移行できます。
シャードクラスターソースでは、各コレクションの
_idフィールドは一意である必要があります。Mongos ノードの数は 10 を超えることはできません。インスタンスに孤立ドキュメントが含まれていてはなりません。孤立ドキュメントの詳細については、MongoDB ドキュメントおよびDTS よくある質問をご参照ください。宛先クラスターのディスク使用率が 80 % を超えると、DTS タスクが遅延し、エラーが返されます。開始前に必要なストレージ容量を見積もってください。
宛先クラスターのデータ型がソースデータと互換性がない場合、移行タスクは失敗します。
DTS タスク実行中に宛先クラスターのバックアップが実行されている場合、移行タスクは失敗します。
トランザクション情報は保持されません。トランザクションは宛先で個別のレコードに変換されます。
増分データ移行の要件:
ソースデータベースで oplog 機能が有効化されており、oplog エントリが少なくとも 7 日間保持されている必要があります。あるいは、チェンジストリームが有効化されており、DTS が過去 7 日間のデータ変更をサブスクライブできる必要があります。DTS が操作ログを取得できない場合、タスクは失敗します。例外的なケースでは、データの不整合や損失が発生する可能性があり、これらは DTS のサービスレベルアグリーメント (SLA) の対象外となります。
可能であれば、oplog メソッドを使用してください。これはチェンジストリームよりも遅延が低くなります。
チェンジストリームは、ソースデータベースが MongoDB V4.0 以降を実行している場合にのみサポートされます。
Amazon DocumentDB の非エラスティッククラスターでは、チェンジストリームを使用する必要があります:移行方法 を ChangeStreamChange Streams に、アーキテクチャ を Sharded Cluster に設定します。
移行中の運用制限:
完全なデータ移行中は、スキーマやコレクション(配列型の更新を含む)を変更しないでください。スキーマ変更により、タスクが失敗したり、データの不整合が発生したりする可能性があります。
ソースデータベースがシャードクラスターであり、Balancer がデータのリバランスを積極的に行っている場合、増分移行の遅延が増加する可能性があります。
DTS はソースおよび宛先データベースの読み取り・書き込みリソースを使用します。本番ワークロードへの影響を最小限に抑えるため、非ピーク時間帯に移行を実行してください。
完全なデータ移行中、同時実行の INSERT 操作により、宛先コレクションに断片化が発生します。移行後、宛先のストレージ使用量がソースよりも大きくなる可能性があります。
浮動小数点および倍精度:
DTS は ROUND(COLUMN, PRECISION) を使用して FLOAT および DOUBLE 値を取得します。FLOAT のデフォルト精度は 38 桁、DOUBLE のデフォルト精度は 308 桁です。開始前に、これらの設定がビジネス要件を満たすことを確認してください。
失敗したタスクの動作:
DTS は、最大 7 日間、失敗したタスクを自動的に再試行します。ワークロードを宛先に切り替える前に、失敗したタスクを停止または解放するか、DTS アカウントの書き込み権限を取り消してください。そうしないと、タスクが再開された際にソースデータが宛先データを上書きする可能性があります。
DTS タスクが失敗した場合、DTS のテクニカルサポートが 8 時間以内に復旧を試みます。復旧中、タスクが再起動され、タスクパラメーター(データベースパラメーターではない)が変更される場合があります。
移行遅延の測定:
DTS は、宛先で最新に移行されたレコードのタイムスタンプとソースの現在時刻を比較することで、増分移行の遅延を計算します。ソースで長期間更新が行われていない場合、報告される遅延は不正確になる可能性があります。遅延の読み取りを更新するには、ソースで更新操作を実行してください。
移行タスクの作成
ステップ 1:データ移行ページへ移動
以下のいずれかの方法を使用してください。
DTS コンソール
DMS コンソール
正確なナビゲーションパスは、お使いの DMS コンソールのモードとレイアウトによって異なる場合があります。「シンプルモード」と「DMS コンソールのレイアウトとスタイルをカスタマイズする」をご参照ください。
ステップ 2:ソースおよび宛先データベースの構成
タスクの作成 をクリックし、以下のパラメーターを構成します。
ソースデータベース
| パラメーター | 説明 |
|---|---|
| タスク名 | DTS タスクの名前です。DTS が自動的に名前を生成します。タスクを識別しやすいように、意味のある名前を指定してください。名前は一意である必要はありません。 |
| 既存の接続の選択 | ソースデータベースがすでに DTS に登録されている場合は、ドロップダウンリストから選択してください。DTS が残りのパラメーターを自動入力します。そうでない場合は、以下に示すパラメーターを構成してください。DMS コンソールでは、DMS データベースインスタンスの選択 からインスタンスを選択してください。「データベース接続の管理」をご参照ください。 |
| データベースタイプ | MongoDB を選択します。 |
| アクセス方法 | Alibaba Cloud インスタンス を選択します。 |
| インスタンスリージョン | ソースの ApsaraDB for MongoDB インスタンスが存在するリージョンです。 |
| Alibaba Cloud アカウント間でのデータ複製 | 現在の Alibaba Cloud アカウント内のインスタンスを使用する場合は、いいえ を選択します。 |
| アーキテクチャ | ソースインスタンスのデプロイメントアーキテクチャです。レプリカセット を選択します。ソースが シャードクラスター の場合、シャードアカウント および シャードパスワード も指定する必要があります。 |
| 移行方法 | 増分データ移行に使用する方法です。Oplog(推奨):ソースで oplog が有効化されている場合にサポートされます。ApsaraDB for MongoDB では、oplog がデフォルトで有効化されています。この方法は ChangeStream よりも遅延が低くなります。ChangeStream:ソースでチェンジストリームが有効化されている場合にサポートされます。ソースアーキテクチャが シャードクラスター で ChangeStream を使用する場合、シャードアカウントおよびパスワードは不要です。ソースが Amazon DocumentDB(非エラスティッククラスター)の場合、ChangeStream のみがサポートされます。 |
| インスタンス ID | ソースの ApsaraDB for MongoDB インスタンスの ID です。 |
| 認証データベース | 認証資格情報を格納するデータベースです。デフォルト値は admin です。 |
| データベースアカウント | ソースインスタンスのデータベースアカウントです。「必要なデータベースアカウント権限」セクションをご参照ください。 |
| データベースパスワード | データベースアカウントのパスワードです。 |
| 暗号化 | 接続暗号化方法です。オプション: 暗号化なし、SSL 暗号化、または Mongo Atlas SSL。利用可能なオプションは、アクセス方法 および アーキテクチャ の選択内容によって異なります。アーキテクチャ が シャードクラスター で 移行方法 が Oplog の場合、SSL 暗号化は利用できません。SSL 暗号化を選択した自己管理レプリカセットでは、CA 証明書をアップロードして接続を検証する必要があります。 |
宛先データベース
| パラメーター | 説明 |
|---|---|
| 既存の接続の選択 | 宛先クラスターがすでに DTS に登録されている場合は、ドロップダウンリストから選択してください。そうでない場合は、以下に示すパラメーターを構成してください。 |
| データベースタイプ | AnalyticDB for MySQL 3.0 を選択します。 |
| アクセス方法 | Alibaba Cloud インスタンス を選択します。 |
| インスタンスリージョン | 宛先の AnalyticDB for MySQL V3.0 クラスターが存在するリージョンです。 |
| インスタンス ID | 宛先の AnalyticDB for MySQL V3.0 クラスターの ID です。 |
| データベースアカウント | 宛先クラスターのデータベースアカウントです。「必要なデータベースアカウント権限」セクションをご参照ください。 |
| データベースパスワード | データベースアカウントのパスワードです。 |
ステップ 3:接続性のテストと続行
ページ下部の 接続性のテストと続行 をクリックします。
DTS サーバーの CIDR ブロックは、ソースデータベースおよびターゲットデータベースのセキュリティ設定に追加する必要があります。DTS により自動的に追加することも、手動で追加することもできます。詳細については、「DTS サーバーの CIDR ブロックをオンプレミスデータベースのセキュリティ設定に追加する」をご参照ください。アクセス方法として [Alibaba Cloud Instance] を使用しない自己管理データベースの場合、[接続テスト] を [DTS サーバーの CIDR ブロック] ダイアログボックスでクリックします。
ステップ 4:移行対象の構成
対象の構成 ページで、以下のパラメーターを設定します。
| パラメーター | 説明 |
|---|---|
| 移行タイプ | 履歴データのみを移行する場合は、完全データ移行 を選択します。移行中に宛先を同期状態に保つ場合は、完全データ移行 および 増分データ移行 の両方を選択します。完全データ移行のみを選択した場合、移行中にソースへの書き込みを行わないでください。 |
| 同期対象の DDL および DML 操作 | 増分データ移行中に、インスタンスレベルで移行する DDL および DML 操作です。コレクションレベルで操作を構成するには、選択済みのオブジェクト 内のコレクションを右クリックし、移行する操作を選択します。 |
| テーブルのマージ | いいえ(デフォルト): 各コレクションを個別のテーブルに移行します。はいアラート通知設定: 複数のソースコレクションを 1 つの送信先テーブルにマージします。DTS は、データソースを識別するために __dts_data_source 列を追加します。「複数テーブルマージ機能を有効化する」をご参照ください。[はい] を選択した場合、タスクで選択されたすべてのソーステーブルが 1 つの送信先テーブルにマージされます。マージしないコレクションについては、別のタスクを作成してください。 |
| 競合するテーブルの処理モード | [事前チェックとエラーの報告]:送信先にソースと同じ名前のコレクションが存在する場合、事前チェックは失敗します。必要に応じて、オブジェクト名マッピングを使用して移行されるコレクションの名前を変更してください。詳細については、「オブジェクト名のマップ」をご参照ください。[エラーを無視して続行]:重複するコレクション名に対する事前チェックをスキップします。DTS は、送信先の既存レコードと同じプライマリキーを持つレコードをスキップします。データの不整合が発生する可能性があります。 |
| ソースオブジェクト | ソースオブジェクト から 1 つ以上のコレクションを選択し、 |
選択済みのオブジェクトセクションの構成:
宛先データベース(スキーマ)の名前変更:
選択済みのオブジェクト で、ソースデータベースを右クリックします。

スキーマ名 を、宛先の AnalyticDB for MySQL V3.0 クラスター内のデータベース名に設定します。

(任意)増分データ移行中に移行する DDL および DML 操作を選択します。

OK をクリックします。
宛先テーブルの名前変更:
選択済みのオブジェクト で、コレクションを右クリックします。

テーブル名 を、宛先クラスター内のテーブル名に設定します。

(任意)完全なデータ移行のフィルター条件を設定します。「フィルター条件の指定」をご参照ください。

(任意)増分データ移行の DDL および DML 操作を選択します。

ソースフィールドと宛先列のマッピング: DTS は各フィールドに対して
bson_value()式を自動生成します。各列のマッピングを確認および調整してください。各列について:フィールドに異なる式が必要な場合(たとえば、ネストされたサブフィールド):列の横にある
をクリックし、+ 列の追加 をクリックします。
列名、型、長さ、および 精度 を設定します。
値の割り当て 列に
bson_value()式を入力します。「フィールドマッピングの例」セクションを参考にしてください。各フィールドについて繰り返します。
重要プライマリキー列には
bson_value("_id")を割り当ててください。サブフィールドには、ネストされたbson_value()式を使用します:bson_value("parent", "child")。単独でbson_value("parent")を使用すると、サブフィールドの増分変更をキャプチャできません。OK をクリックします。
ステップ 5:高度な設定の構成
次へ:高度な設定 をクリックし、以下の設定を行います。
| パラメーター | 説明 |
|---|---|
| タスクスケジューリング用の専用クラスター | デフォルトでは、DTS はタスクを共有クラスターにスケジュールします。より高い安定性を確保するには、専用クラスターを購入してください。「DTS 専用クラスターとは」をご参照ください。 |
| 接続失敗時の再試行時間 | 接続失敗後に DTS が再試行する時間です。有効な値:10~1,440 分。デフォルト:720 分。30 分を超える値を設定してください。この期間内に DTS が再接続した場合、タスクは再開します。複数のタスクが同じソースまたは宛先を共有する場合、最も最近設定された値が適用されます。再試行中は、インスタンスに対して課金されます。 |
| その他の問題発生時の再試行時間 | DDL または DML 操作の失敗後に DTS が再試行する時間です。有効な値:1~1,440 分。デフォルト:10 分。10 分を超える値を設定してください。この値は、接続失敗時の再試行時間 よりも小さくする必要があります。 |
| 完全なデータ移行のスロットリングの有効化 | 完全なデータ移行中の読み取り/書き込み操作を制限し、ソースおよび宛先への負荷を軽減します。ソースデータベースへのクエリ数(QPS)、完全データ移行の RPS、および 完全移行のデータ移行速度(MB/s) を構成します。完全データ移行 が選択されている場合にのみ利用可能です。 |
| 単一テーブル内でプライマリキー _id に使用できるデータ型は 1 種類のみ | 移行タイプ が 完全データ移行 に設定されている場合にのみ利用可能です。はい:DTS は完全移行フェーズで、ソースデータ内のプライマリキーのデータ型をスキャンしません。いいえ:DTS は完全移行フェーズで、ソースデータ内のプライマリキーのデータ型をスキャンします。 |
| 増分データ移行のスロットリングの有効化 | 増分データ移行中の操作を制限します。増分データ移行の RPS および 増分移行のデータ移行速度(MB/s) を構成します。増分データ移行 が選択されている場合にのみ利用可能です。 |
| 環境タグ | DTS インスタンスを識別するための任意のタグです。 |
| ETL の構成 | 抽出・変換・書き出し (ETL) 機能を有効にするかどうか。はい: コードエディタにデータ処理文を入力します。詳細については、「データ移行またはデータ同期タスクで ETL を設定する」をご参照ください。いいえ: ETL は無効になります。 |
| モニタリングとアラート | はい: アラートのしきい値と通知連絡先を設定します。DTS は、タスクが失敗した場合、または移行遅延がしきい値を超えた場合に連絡先に通知します。詳細については、「DTS タスクを作成するときにモニタリングとアラートを設定する」をご参照ください。いいえ: アラートは設定されていません。 |
ステップ 6:事前チェックの実行
次へ:タスク設定の保存と事前チェック をクリックします。
保存前に API パラメーターを表示するには、次へ:タスク設定の保存と事前チェック の上にポインタを合わせ、OpenAPI パラメーターのプレビュー をクリックします。
DTS は移行を開始する前に事前チェックを実行します。事前チェックが成功した場合にのみ、タスクが開始されます。
項目が失敗した場合、詳細の表示 をクリックして原因を確認し、問題を解決してから再度事前チェックを実行してください。
アラートがトリガーされた場合:
ブロッキングアラートの場合は、問題を解決してから再度事前チェックを実行してください。
非ブロッキングアラートの場合は、アラートの詳細の確認 > 無視 > OK をクリックし、その後 再び事前チェック をクリックしてください。アラートを無視すると、データの不整合が発生する可能性があります。
ステップ 7:インスタンスの購入および開始
成功率 が 100% に達するまで待ち、その後 次へ:インスタンスの購入 をクリックします。
インスタンスの購入 ページで、以下の設定を行います。
パラメーター 説明 リソースグループ 移行インスタンスのリソースグループです。デフォルト: [デフォルト リソースグループ]。詳細については、「Resource Management とは? インスタンスクラス 移行速度クラス。ワークロードに基づいて選択してください。詳細については、「データ移行インスタンスのインスタンスクラス」をご参照ください。 Data Transmission Service(従量課金)サービス利用規約 のチェックボックスをオンにして、規約を読み、同意してください。
購入および開始 をクリックし、確認ダイアログで OK をクリックします。
データ移行 ページで、移行の進行状況を監視してください。
完全なデータ移行のみの場合:タスクのステータスが 完了 になり、タスクは自動的に停止します。
完全および増分データ移行の場合:タスクのステータスが 実行中 となり、タスクは無期限に継続します。ワークロードを宛先に切り替える準備ができたら、タスクを手動で停止してください。
データ型のマッピング
| MongoDB のデータ型 | AnalyticDB for MySQL V3.0 のデータ型 |
|---|---|
| ObjectId | VARCHAR |
| String | VARCHAR |
| Document | VARCHAR |
| DbPointer | VARCHAR |
| Array | VARCHAR |
| Date | DATETIME |
| TimeStamp | DATETIME |
| Double | DOUBLE |
| 32-bit integer (BsonInt32) | INTEGER |
| 64-bit integer (BsonInt64) | BIGINT |
| Decimal128 | DECIMAL |
| Boolean | BOOLEAN |
| Null | VARCHAR |
フィールドマッピングの例
この例では、ネストされたオブジェクトを含む MongoDB ドキュメントのフィールドを、AnalyticDB for MySQL V3.0 のテーブルの列にマッピングする方法を示します。
ソースの MongoDB データ構造
{
"_id": "62cd344c85c1ea6a2a9f****",
"person": {
"name": "neo",
"age": 26,
"sex": "male"
}
}ターゲットの AnalyticDB for MySQL 3.0 クラスターのテーブル構造
| 列名 | 型 | 備考 |
|---|---|---|
| mongo_id | VARCHAR | プライマリキー列 |
| person_name | VARCHAR | — |
| person_age | DECIMAL | — |
新規列の構成
ネストされたフィールドの場合は、bson_value("parent", "child") を使用し、bson_value("parent") を使用しないでください。bson_value("person") を使用すると、person オブジェクト全体が単一の値として扱われ、name、age、sex などのサブフィールドの増分更新をキャプチャできません。
| 列名 | 型 | 値の割り当て | 備考 |
|---|---|---|---|
| mongo_id | STRING | bson_value("_id") | プライマリキー。最上位の _id フィールドをマッピングします。 |
| person_name | STRING | bson_value("person", "name") | name サブフィールドを person 内でマッピングします。 |
| person_age | DECIMAL | bson_value("person", "age") | age サブフィールドを person 内でマッピングします。 |
次のステップ
移行タスクのステータスが 実行中 になり、増分移行の遅延がほぼ 0 になった時点で、宛先の AnalyticDB for MySQL V3.0 クラスターはソースと同期状態になります。ワークロードを宛先クラスターに切り替え、DTS タスクを停止してください。