このチュートリアルでは、MongoDB に付属するコマンドライン ユーティリティ mongorestoreとmongodumpを使用してバックアップを作成し、データを復元するためのプロセスを説明します。
セルフホスト型配置のバックアップを管理対象のMongoDB Atlas 配置に復元するには、「 mongorestore でのシード処理 」を参照してください。
完全管理型バックアップ方法として MongoDB Atlas 内のクラウドバックアップを使用すると、クラスターのクラウド サービス プロバイダーのネイティブなスナップショット機能を使用して、ローカライズされたバックアップ ストレージが提供されます。
Considerations
配置
mongorestoreとmongodumpユーティリティは BSONデータ ダンプと連係性があり、小規模の配置のバックアップを作成するのに便利です。 バックアップが回復しやすく中断しないようにするには、MongoDB Atlas の クラウドバックアップ に備わる、 ファイル システムのスナップショット またはブロックレベルのディスク スナップショットを使用します。
注意
MongoDB Atlas を使用したシャーディングされたクラスターのバックアップ
mongodumpとmongorestoreをシャーディングされたクラスターのバックアップ戦略として使用するには、「データベース ダンプを使用した自己管理型シャーディングされたクラスターのバックアップ 」を参照してください。
シャーディングされたクラスターではバックアップと復元に次のいずれかの連携的なプロセスも利用できます。これによりシャード間のトランザクションはアトミック性が継続的に保証されます。
パフォーマンスへの影響
mongodump と mongorestore は実行中の mongod インスタンスとやり取りすることで動作するため、実行中のデータベースのパフォーマンスに影響を及ぼす可能性があります。これらのツールは実行中のデータベース インスタンスにトラフィックを生成するだけでなく、メモリを介してすべてのデータを読み取るようにデータベースに強制します。MongoDB は使用頻度の低いデータを読み取る際に、アクセス頻度の高いデータを排除するため、データベースの通常のワークロードのパフォーマンスを低下させる恐れがあります。
MongoDB のツールを使用してデータをバックアップする場合は、次のガイドラインを考慮してください。
バックアップの内容とバックアップへの反映時点を特定できるようにファイルにラベルを付けます。
と
mongodumpのパフォーマンスへの影響がユースケースで受け入れられない場合は、MongoDBMongoDB Atlas Atlas でmongorestoreファイルシステムのスナップショット や バックアップ などの代替のバックアップ戦略を使用します。mongodumpがレプリカセットの一貫したバックアップを取得できるようにするには、--oplogオプションを使用してバックアップ操作中に受信した書込みを取得するか、バックアップ中はレプリカセットへの書込みをすべて停止する必要があります。シャーディングされたクラスターのレプリカセットについては、「データベースダンプを使用した自己管理型シャードクラスターのバックアップ 」を参照してください。
MongoDB のテスト用配置にバックアップを復元して、使用できることを確認します。
シャーディングされたクラスターのバックアップで不整合が発生する可能性を減らすには、バックアップ中はバランサーを停止し、すべての書込み (write) 操作を停止して、スキーマ変換を停止する必要があります。
Tip
MongoDB インスタンスのバックアップについては、「 自己管理型配置のバックアップ メソッド 」と「 MongoDB Atlas クラウドバックアップ」を参照してください。 MongoDB Database Tools の次の参照ドキュメントも考慮に入れましょう。
出力形式
mongorestore と mongodump は複数の BSON ファイルの代わりに、単一ファイルのアーカイブ ファイルにデータを出力できます。アーカイブ ファイルは、非連続的なファイル書込みをサポートする特殊な形式です。アーカイブ ファイルを使用すると、MongoDB からの同時バックアップと MongoDB への復元が可能になるほか、バックアップと復元操作の実行中にディスク I/O を最適化します。
アーカイブ ファイルを標準出力(stdout)に出力することもできます。標準出力への書き込みは、ネットワーク越しのデータ移行、ディスク I/O のフットプリントの削減、MongoDB ツールおよびストレージエンジンの両方での同時実行性の向上を可能にします。
アーカイブ ファイルの詳細については、 --archiveオプションを参照してください。
古いバックアップ
バックアップはデータベースの現在の状態のスナップショットを提供します。バックアップから復元する場合、復元されたデータベースにはバックアップ作成後に行われた変更は含まれないため、データが失われる可能性があります。
手順
次を使用したデータベースのバックアップ: mongodump
注意
MongoDB Atlas を使用したシャーディングされたクラスターのバックアップ
mongodumpとmongorestoreをシャーディングされたクラスターのバックアップ戦略として使用するには、「データベース ダンプを使用した自己管理型シャーディングされたクラスターのバックアップ 」を参照してください。
シャーディングされたクラスターではバックアップと復元に次のいずれかの連携的なプロセスも利用できます。これによりシャード間のトランザクションはアトミック性が継続的に保証されます。
データベースを除外するlocal
mongodump は local データベースの内容を出力から除外します。
必要なアクセス権
アクセス制御 mongodumpが有効になっている MongoDBfind 配置に対して を実行するには、バックアップするデータベースごとに アクションを許可する特権が必要です。組み込みのbackupロールは、任意のデータベースのバックアップを実行するために必要な特権を提供します。
backup ロールには、データベース プロファイリングの実行中に作成される system.profile コレクションをバックアップする追加の権限があります。
基本的なmongodump 操作
mongodumpユーティリティは、実行中のmongodに接続してデータをバックアップします。
このユーティリティを使用すると、サーバー全体、データベース、またはコレクションのバックアップを作成したり、クエリを使用してコレクションの一部だけをバックアップしたりできます。
引数なしで mongodumpを実行すると、コマンドはローカルシステム上のポート 27017 にある MongoDB インスタンス(localhost など)に接続し、現在のディレクトリに dump/ という名前のデータベース バックアップを作成します。
同じマシンのデフォルト ポート27017 で実行中の mongod インスタンスからデータをバックアップするには、次のコマンドを使用します。
mongodump
MongoDB インスタンスのホストとポートは、次のいずれかの方法で指定できます。
SRV または標準接続文字列のいずれかを使用して、
--uri文字列にホスト名とポートを指定します。mongodump --uri="mongodb+srv://username:password@cluster0.example.mongodb.net" <additional_options> --host文字列にホスト名とポートを指定します。mongodump --host="mongodb0.example.com:27017" <additional_options> --hostと--portにホスト名とポートを指定します。mongodump --host="mongodb0.example.com" --port=27017 <additional_options>
mongodump は mongodb.example.net ホストのポート 27017 で待機する mongod 経由でアクセス可能なデータのコピーを保持する BSON ファイルを書き込みます。詳細については、「非ローカルの mongod インスタンスからのバックアップの作成」を参照してください。
別の出力ディレクトリを指定するには、 --out
or -oオプションを使用します。
mongodump --out=/opt/backup/mongodump-1
データベース ダンプに含まれるデータ量を制限するには、--db と --collection を mongodump のオプションとして指定できます。以下に例を挙げます。
mongodump --collection=myCollection --db=test
この操作は、現在の作業ディレクトリの dump/ サブディレクトリにあるデータベース test から myCollection という名前のコレクションのダンプを作成します。
mongodump はバックアップ データ フォルダーに出力ファイルがある場合は、そのファイルを上書きします。mongodump コマンドを複数回実行する前に、出力フォルダー(デフォルトは dump/ フォルダー)のファイルが不要であることを確認するか、フォルダーまたはファイルの名前を変更してください。
oplog を使用したバックアップの作成
と オプションは--oplog mongodumpoplog エントリを収集し、本番環境のデータベースでバックアップを実行できるようにします。後でバックアップから データベースを復元すると、 データベースはバックアップ プロセスが完了したときと同じになります。
--oplog を使用する場合、mongodump はソース データベースのすべてのデータ、およびバックアップ手順の最初から最後までのすべての oplog エントリをコピーします。この操作を mongorestore
--oplogReplay と組み合わせると、mongodump がダンプ ファイルの作成を完了した時点に対応する特定の時点を反映したバックアップを復元できます。
非ローカルのmongod インスタンスからのバックアップの作成
mongodump の --host および --port オプションを使用すると、リモート ホストに接続してバックアップを行うことができます。次の例で考えてみましょう。
mongodump \ --host=mongodb1.example.net \ --port=3017 \ --username=user \ --password="pass" \ --out=/opt/backup/mongodump-1
上記のように、任意の mongodump コマンドで、ユーザー名とパスワードの認証情報を指定して、データベース認証を設定できます。
次を使用したデータベースの復元: mongorestore
注意
MongoDB Atlas を使用したシャーディングされたクラスターのバックアップ
mongodumpとmongorestoreをシャーディングされたクラスターのバックアップ戦略として使用するには、「データベース ダンプを使用した自己管理型シャーディングされたクラスターのバックアップ 」を参照してください。
シャーディングされたクラスターではバックアップと復元に次のいずれかの連携的なプロセスも利用できます。これによりシャード間のトランザクションはアトミック性が継続的に保証されます。
アクセス制御
アクセス制御 が有効になっている MongoDB 配置にデータを復元する場合、データに コレクション データを含まずにrestore をsystem.profile オプションなしで実行する 場合mongorestore 、--oplogReplay ロールはバックアップからデータを復元するために必要な特権を提供します。 。
バックアップ データに system.profile コレクション データが含まれている場合や --oplogReplay を使用して実行する場合は、追加の権限が必要です。
| バックアップ データに 組み込みロール |
|
|
基本的なmongorestore 操作
mongorestore ユーティリティは、mongodump によって作成されたバイナリ バックアップを復元します。デフォルトでは、mongorestore は dump/ ディレクトリ内のデータベース バックアップを検索します。
mongorestore ユーティリティは、実行中の mongod に直接接続してデータを復元します。
mongorestore はデータベースのバックアップ全体またはバックアップのサブセットを復元できます。
注意
すべての MongoDB コレクションには、デフォルトで UUIDが付属します。MongoDB がコレクションを復元する場合、復元されたコレクションは元の UUID を保持します。UUID がないコレクションを復元する場合、MongoDB は復元されたコレクションのために UUID を生成します。
コレクション UUID について詳しくは、「コレクション」を参照してください。
mongorestoreを使用してアクティブなmongodに接続するには、次のプロトタイプ形式のコマンドを使用します。
mongorestore --uri <connection string> <path to the backup>
次の例で考えてみます。
mongorestore /opt/backup/mongodump-1
ここで、 mongorestoreは、 /opt/backup/mongodump-1ディレクトリ内のデータベースのバックアップを、デフォルト ポート27017のローカルホスト インターフェースで実行されているmongodインスタンスにインポートします。
Oplog ファイルを使用したデータのバックアップと復元
mongodumpの実行中に発生する可能性のある書込みをキャプチャするには、 mongodump --oplogを使用します。 mongodumpは、実行中に発生した書き込みごとにoplogエントリを含むoplog.bsonファイルを作成します。 mongorestore
--oplogReplayを使用して oplog 操作を適用できます。
例については、「 mongodump の例 」と「 mongorestoreの例 」を参照してください。
oplog.bsonファイルのすべてのデータが復元されます。
mongorestore --oplogReplay ではデータを任意の時点に復元できません。 mongorestore --oplogReplayを使用して、復元されたデータがmongodump --oplogの実行中に発生した書込みを伴う最新のものになるようにします。
注意
--oplog はレプリカセットと併用するためのものです。 シャーディングされたクラスター(シャーディングされた環境の構成要素であるレプリカセットを含む)については、「データベース ダンプを使用して自己管理型シャーディングされたクラスターをバックアップする 」を参照してください。
また、データベースに挿入するときにオブジェクトの整合性を確認するには、 mongorestore --objcheckオプションを使用するか、バックアップから復元する前にデータベースから各コレクションを削除するためにmongorestore --dropオプションを使用することも検討してください。
非ローカルの インスタンスへのバックアップの復元mongod
デフォルトでは、 mongorestoreは localhost インターフェースとデフォルト ポート( 27017 )で実行されている MongoDB インスタンスに接続します。 別のホストまたはポートに復元する場合は、 --hostと--portオプションを使用します。
次の例では、 --hostと--portオプションを指定しています。
mongorestore --host=mongodb1.example.net --port=3017
アクセス制御を適用する インスタンスに復元する場合は、 --usernameと--authenticationDatabaseも含めます。 --passwordオプションを省略すると、 mongorestoreでパスワードの入力を求められます。
mongorestore \ --host=mongodb1.example.net \ --port=3017 \ --username=user \ --authenticationDatabase=admin \ /opt/backup/mongodump-1