AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
MongoDB Branding Shape
Click here >
Docs Menu

以下を用いた移行: mongomirror

は、既存の MongoDB レプリカセットから MongoDB Atlas レプリカセットにデータを手動で移行するためのツールです。「mongomirror のダウンロード」を参照してください。

では、既存のレプリカセットまたはアプリケーションをシャットダウンする必要はなく、ユーザーまたはロール データをインポートせず、configデータベース をコピーしません。

以下の場合は を使用します。

  • MongoDB Atlas の外部でホストされている MongoDB デプロイから MongoDB Atlas クラスターへのデータセットの 1 回限りの移行の実行。

  • ある Atlas クラスターから別の Atlas クラスターへのデータセットの 1 回限りの移行の実行。

データのインポートおよび移行ツールの選択」も参照してください。

  • ソースMongoDBデプロイはレプリカセットである必要があります。ソースがスタンドアロンのMongoDBデプロイである場合は、を実行中前に、スタンドアロンをレプリカセットに変換します。

  • ソース レプリカセットでは MongoDB バージョン 2.6 以降を実行する必要があります。

  • ソースMongoDBレプリカセットは、無料クラスター(以前は M0)または Flex クラスターにすることはできません。

  • ソースMongoDBレプリカセットには、時系列コレクション内のデータを含めることはできません。

  • 手順中はいつでも featureCompatibilityVersion フラグを変更しないでください。

  • MongoDB 4.4以前のバージョンから MongoDB 7.0以降のバージョンを実行する Atlas クラスターに移行する場合は、コレクションからgeoHaystack インデックスをすべて削除します。

  • TTL インデックスとは互換性がありません。既存の TTL インデックスをすべて削除し、移行プロセスが完了した後に再度ビルドします。既存のインデックスがクエリ パフォーマンスにとって重要で、削除を避けたい場合は、別の方法についてサポートにお問い合わせください

  • 移行プロセスの実行中は、renameCollection コマンドの使用や、$out 集計ステージを含む集計パイプラインの実行など、名前空間の変更を行わないでください。

  • プロセスの一部として実行される最初の同期の一部として、renameCollection コマンドまたは $out 集計ステージは使用できません。

  • 移行の初期同期段階では、プライマリを再起動しないでください。

  • お使いの MongoDB 配置に、インデックス キー制限を超えるキーを持つインデックスが含まれている場合は、ライブ移行を開始する前に、インデックスを変更して、大きすぎるキーが含まれないようにします。

には、 ソースレプリカセットへのネットワーク アクセス権が必要です。ソースレプリカセットに認証が必要な場合は、を実行中ときにユーザー認証情報を含めます。少なくとも次の特権を持つデータベースユーザーを指定します。

  • すべてのデータベースとコレクションを読み取ります。admin データベースの readAnyDatabase ロールがこの要件をカバーします。

  • oplog を読みとります。「Oplog アクセス権限」を参照してください。

  • getParameter コマンドを実行します。

そのようなユーザーが存在しない場合は、ソースMongoDBレプリカセットにユーザーを作成します。 MongoDB Server のバージョンによって、組み込みロールが異なります。自分のMongoDB Serverバージョンに基づいて組み込みロールを選択し、 で適切なコマンドを実行します。mongosh

  • ソースクラスターの場合、ユーザーには readAnyDatabaseclusterMonitor、および backup ロールが必要です。

    ライブ移行プロセスを実行するデータベースユーザーがこれらのロールを持っていることを確認するには、 admin データベースで db.getUser() コマンドを実行します。

    use admin
    db.getUser("admin")
    {
    "_id" : "admin.admin",
    "user" : "admin",
    "db" : "admin",
    "roles" : [
    {
    "role" : "backup",
    "db" : "admin"
    },
    {
    "role" : "clusterMonitor",
    "db" : "admin"
    }
    {
    "role" : "readAnyDatabase",
    "db" : "admin"
    }
    ]
    } ...

    さらに、ソースクラスターのデータベースユーザーには、 admin データベース上の oplog を読み取るロールが必要です。詳細については、「Oplog アクセス」を参照してください。

  • MongoDB 3.4 を実行しているソースクラスターの場合、ユーザーには少なくとも clusterMonitorreadAnyDatabase の両方のロールが必要です。以下に例を挙げます。

    use admin
    db.createUser(
    {
    user: "mySourceUser",
    pwd: "mySourceP@$$word",
    roles: [ "clusterMonitor", "readAnyDatabase" ]
    }
    )
  • MongoDB 3.2 を実行しているソースクラスターの場合、ユーザーには少なくとも clusterManagerreadAnyDatabase の両方のロールと、local データベースに対する読み取りアクセス権が必要です。これには、以下のコマンドで作成できるカスタムロールが必要です。

    use admin
    db.createRole(
    {
    role: "migrate",
    privileges: [
    { resource: { db: "local", collection: "" }, actions: [ "find" ] }
    ],
    roles: ["readAnyDatabase", "clusterManager"]
    }
    )
    db.createUser(
    {
    user: "mySourceUser",
    pwd: "mySourceP@$$word",
    roles: [ "migrate" ]
    }
    )
  • MongoDB 2.6 または 3.0 を実行しているソースクラスターの場合、ユーザーには少なくとも readAnyDatabase ロールが必要です。以下に例を挙げます。

    use admin
    db.createUser(
    {
    user: "mySourceUser",
    pwd: "mySourceP@$$word",
    roles: [ "readAnyDatabase" ]
    }
    )

宛先 Atlas の配置:

  • 無料クラスターまたは Flex クラスターにすることはできません。

  • レプリカセットでなくてはなりません。

  • ソースクラスターのMongoDB のバージョンと同じかそれ以降のバージョンが必要です。アップグレード パス を参照してください。

  • ソースクラスターと重複する名前空間を含めることはできません。が宛先クラスター上で重複する名前空間を検出すると、プロセスを開始する前に失敗します。宛先クラスターに重複する名前空間が含まれている場合は、--drop を使用して宛先クラスターからすべてのデータを削除するか、--includeNamespace を使用してソースクラスターからインポートする名前空間を一覧表示します。

  • そのIP アクセス リストには、以下のいずれかを含めなければなりません。

    • が実行中いるサーバーのパブリックIPアドレス、または

    • VPC ピアリング用に設定されている場合は、ピアリングの VPC CIDR ブロック(またはそのサブセット)、あるいはピア VPC のセキュリティ グループのいずれか。

    注意

    クラスター内の任意のノードのパブリック IP アドレスを確認するには、コマンドラインから nslookup ツールを使用します。詳しくは、「Atlas クラスターのパブリック IP の変更」を参照してください。

には、宛先クラスターへのネットワーク アクセス権が必要です。

実行するには、Atlas admin ロールを持つデータベースユーザーを指定する必要があります。詳細については、 「データベースユーザーの設定」 を参照してください。

重要

は、 MongoDB 6.0+ ソースクラスターと 6.0+ 宛先クラスター間の移行ではサポートされていません。6.0.x 以降のソースレプリカセットから 6.0.x 以降の宛先レプリカセットへの移行には、 を使用できません。

を使用して、以前のバージョンのソースレプリカセットからMongoDBバージョン 6.0 の宛先レプリカセットに移行できます。

代替の方法として、ソースレプリカセットを 6.0+ または 7.0+ にアップグレードし、このライブ移行手順に従ってアップグレードされたレプリカセットをAtlasに移行することもできます。

は、次の移行パスをサポートします。

ソース レプリカセット
MongoDBバージョン
ターゲット Atlas レプリカセット
MongoDBバージョン

5.0

6.0

4.4

6.0

4.2

6.0

4.0

6.0

3.6

6.0

3.4

6.0

3.2

6.0

3.0

6.0

2.6

6.0

注意

macOS 64 ビットでは、mongomirrorファイルをダウンロードした後、初めて開こうとするとセキュリティアラートが表示されます。続行するには、「 セキュリティ設定を無効にしてアプリを開く 」を参照してください。

を起動すると、次のことを行います。

  1. TLS 経由で Atlas に接続します。

  2. 最初の同期を実行し、コレクションを既存の MongoDB レプリカセットから MongoDB Atlas の宛先クラスターにコピーします。

  3. 最初の同期後、レプリカセットのoplogで受信変更を継続的に追跡し、Atlas の宛先クラスターで再生します。は configデータベースをコピーしません。ソース クラスターまたは宛先クラスターのいずれかで有効にし、--compressors を使用して許可される圧縮ライブラリを指定すると、 はワイヤ圧縮を使用します。

    では、宛先クラスター上のすべてのインデックスは、ソースクラスターでインデックスがどのようにビルドされたかに関係なくフォアグラウンドで作成されます。フォアグラウンドインデックス構築は、データベース上の他のすべての操作をブロックします。詳しくは、格納済みコレクションでのインデックス構築操作 を参照してください。

一度起動すると、 はシャットダウンされるまで継続的に次のことを実行します。

  • 最初の同期段階でシャットダウンした場合は、再起動する前に、宛先クラスターが空であることを確認するか、--drop を使用して実行してください。

  • oplog のテーリング段階で をシャットダウンすると、このプロセスにより oplog のテーリングが停止します。 を再起動することで、--bookmarkFile を使用して、最後に処理されたoplogレコードからテーリングを再開できます。

1

ソースレプリカセットに認証が必要な場合は、を実行中ときにユーザー認証情報を含める必要があります。要件については、ソース レプリカセットで必要なアクセス権限 を参照してください。

mongomirror を実行するときにこれらの認証情報を指定する必要があるため、このユーザーのユーザー名とパスワードをメモしておきます。

2
  1. まだ表示されていない場合は、プロジェクトを含む組織をナビゲーション バーの Organizations メニューで選択します。

  2. まだ表示されていない場合は、ナビゲーション バーの Projects メニューからプロジェクトを選択します。

  3. サイドバーで、 Security見出しの下のDatabase & Network Accessをクリックします。

[ データベースとネットワーク アクセス ] ページが表示されます。

3

実行するには、Atlas admin ロールを持つデータベースユーザーを指定する必要があります。データベースデータベースユーザーの作成に関するドキュメントについては、データベースユーザーの構成を参照してください。

そのようなユーザーが存在しない場合は、ユーザーを作成します。

  1. まだ表示されていない場合は Database Users タブをクリックします。

  2. Add New Database User をクリックします。

  3. Atlas admin ユーザーを追加します。

を実行中ときにこれらの認証情報を指定する必要があるため、新しいユーザーに選択したユーザー名とパスワードをメモしておきます。

4

実行するホストがクラスターのIPアクセス リストにない場合は、リストを更新します。次のいずれかを指定できます。

  • が実行されるサーバーのパブリックIPアドレス、または

  • VPCピアリング用に設定されている場合、ピアの VPC CIDR ブロック(またはサブネット)、あるいは、ピア VPC のセキュリティ グループのいずれか。

5
  1. まだ表示されていない場合は、希望するプロジェクトを含む組織を選択しますナビゲーション バーのOrganizationsメニュー

  2. まだ表示されていない場合は、ナビゲーション バーのProjectsメニューから目的のプロジェクトを選択します。

  3. サイドバーで、 Database見出しの下のClustersをクリックします。

[ Clusters (クラスター) ] ページが表示されます。

6

データを移行する Atlas クラスターのConnectをクリックします。

7

Atlas クラスターのホスト名情報は、Atlas ユーザインターフェースから取得できます。

注意

を使用してデータを移行する場合、ドライバーを使用する必要はありません。

  1. Connect ダイアログボックスから [Shell] をクリックします。

  2. ドロップダウンリストから、[3.4 or earlier] を選択します。接続文字列は次の例のようになります。この例は、読みやすくするために複数行に分割されています。

    mongodb://<db_username>:<db_password>@
    00.foo.mongodb.net:27017,
    01.foo.mongodb.net:27017,
    02.foo.mongodb.net:27017/test?
    ssl=true&replicaSet=myAtlasRS&authSource=admin
  3. テキスト エディターで、replicaSet の値を貼り付け、フォワードスラッシュ(/)を追加し、次の例のようにホスト リストをカンマで区切った値として追加します。

    myAtlasRS/00.foo.mongodb.net:27017,01.foo.mongodb.net:27017,02.foo.mongodb.net:27017

この値を次のステップの --destination に使用します。

8

移行プロセスを完了するには、データ転送を確認して Atlas に切り替えます。

が最初の同期を完了し、レプリカセットのoplogを追跡したら、宛先 Atlas クラスターに切り替えられます。

1

これにより、ソースクラスター上で追加の書込み (write) が発生しなくなります。

2

これは、ソース クラスターと宛先クラスターがコンシステントな状態にあるということです。

3

Atlas クラスターが最新になったら、 mongomirror を停止します。

4

次のいずれかの検証方法を使用して、データが宛先クラスターに転送されていることを確認します。次の検証方法は、ソースまたは宛先クラスターがデータを書き込んでいないことを確認した後にのみ使用してください。

  • ドキュメント数を取得し、クラスター間で比較するためには、ソースクラスターと宛先クラスターの各コレクションで db.collection.countDocuments() メソッドを使用します。

  • ソースクラスターのコレクションをクエリし、正しいドキュメント、インデックス、コレクション、メタデータ、およびビューが宛先クラスターに同じ値で存在することを確認するスクリプトを書きます。スクリプト内で、ソースクラスターおよび宛先クラスターに次のコマンドを使用します。

    • インデックスの転送を確認し、結果を比較するには、ddb.collection.getIndexes() メソッドを使用します。

    • メタデータの転送を確認し、結果を比較するには、db.getCollectionInfos() メソッドを使用します。

5

クラスター パネルの [Connect] ボタンから提供される Atlas 接続文字列を使用して、クライアント アプリケーションを更新します。

Atlas への接続の詳細については、「クライアント ライブラリ経由でクラスターに接続する」を参照してください。

は進行状況をターミナルの標準出力にログします。最初の同期中に、 はコピーしたコレクションごとにプログレス バーをログします。(例: )。

2024-08-09T16:35:50.227-0000 [#....................] park.events 2179/34184 (6.4%)
2024-08-09T16:35:50.227-0000 [#############........] zoo.animals 29000/49778 (58.3%)

oplog を追跡する場合、 はソースクラスターの最新のoplogエントリーとデスティネーション クラスターで最後に処理されたoplogエントリーとの間の遅延時間を秒単位で記録します。(例: )。

2024-12-12T16:22:17.027-0800 Current lag from source: 6s

6 秒の遅延時間は、処理された最後のoplogエントリー は、ソースクラスターで使用可能な最新エントリーより 6 秒前に発生したということを示します。

注意

が追いつくのにかかる時間は、1 秒あたりに到着するエントリー数に応じて、6 秒より長くなるか短くなる場合があります。

遅延時間が 0 秒であれば、 は、最新のoplogエントリーの 1 秒未満前に到着したエントリーを処理しているということになります。

ソースクラスターにインデックスがある場合、 はデスティネーションクラスターに同じインデックスをビルドします。進行ログは、インデックス作成プロセスの開始時刻と終了時刻を示します。インデックス構築の進捗状況を見るには、次の方法があります。

  • 宛先クラスターのプライマリ ノードで currentOp コマンドを使用します。command フィールドには実行中の操作に関する情報が表示されます。インデックス構築エントリーは、次のようになります。

    "command" : {
    "createIndexes" : "perfs",
    "indexes" : [
    {
    "key" : {
    "animal" : "text"
    },
    "name" : "animal_text"
    }
    ]...
  • 宛先クラスターの mongodb ログ をダウンロードし、インデックス関連の行の最近のエントリーを検索します。インデックスの構築に関連するログ メッセージは次のようになります。

    {"t":{"$date":"2024-08-09T16:35:50.227+00:00"},"s":"I", "c":"INDEX", "id":20447, "ctx":"conn1080","msg":"Index build: completed","attr":{"buildUUID":{"uuid":{"$uuid":"c4a62739-bf19-456d-bbd6-7baa29f1063b"}}}}

ネットワークと CPU リソースの競合を回避するには、レプリカセットの mongod インスタンスホスト以外のホストで 実行する。

  • は、セカンダリがある場合と同様に、ソース レプリカセットのパフォーマンスに影響します。

    • 最初の同期段階では、負荷はデータセットのサイズに応じて増加します。

    • 最初の同期が完了すると、負荷は 1 時間あたりに使用される oplog ギガバイトに応じて増えます。

の構文、オプション、および例については、 mongomirror参照ページ をご覧ください。