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