MongoDB ツールを使用した自己管理型配置のバックアップと復元
項目一覧
このチュートリアルでは、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
mongodump
oplog エントリを収集し、本番環境のデータベースでバックアップを実行できるようにします。後でバックアップから データベースを復元すると、 データベースはバックアップ プロセスが完了したときと同じになります。
--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