序章

今日の多くの最新のWebアプリケーション開発者は、プロジェクトでNoSQLデータベースを使用することを選択しており、MongoDBが最初の選択肢であることがよくあります。 本番シナリオでMongoDBを使用している場合は、データの損失を防ぐために定期的にバックアップを作成することが重要です。 幸い、MongoDBには、バックアップを作成して使用するためのシンプルなコマンドラインツールが用意されています。 このチュートリアルでは、これらのツールの使用方法について説明します。

既存のデータベースを改ざんすることなくバックアップがどのように機能するかを理解するために、このチュートリアルでは、新しいデータベースを作成し、それに少量のデータを追加する手順から始めます。 次に、データベースのバックアップを作成し、データベースを削除して、バックアップを使用して復元します。

前提条件

フォローするには、次のものが必要です。

ステップ1—サンプルデータベースの作成

空のデータベースのバックアップを作成することはあまり役に立ちません。そのため、このステップでは、サンプルデータベースを作成し、それにデータを追加します。

MongoDBインスタンスと対話する最も簡単な方法は、 mongo シェル。 でそれを開きます mongo 指図。

  1. mongo

MongoDBプロンプトが表示されたら、myDatabaseという名前の新しいデータベースを作成します。 use ヘルパー。

  1. use myDatabase
出力
switched to db myDatabase

MongoDBデータベース内のすべてのデータは、コレクションに属している必要があります。 ただし、コレクションを明示的に作成する必要はありません。 あなたが使用するとき insert 存在しないコレクションに書き込むメソッドの場合、データが書き込まれる前にコレクションが自動的に作成されます。

次のコードを使用して、myCollectionというコレクションに3つの小さなドキュメントを追加できます。 insert 方法:

  1. db.myCollection.insert([
  2. {'name': 'Alice', 'age': 30},
  3. {'name': 'Bill', 'age': 25},
  4. {'name': 'Bob', 'age': 35}
  5. ]);

挿入が成功すると、次のようなメッセージが表示されます。

成功したinsert()操作の出力
BulkWriteResult({
	"writeErrors" : [ ],
	"writeConcernErrors" : [ ],
	"nInserted" : 3,
	"nUpserted" : 0,
	"nMatched" : 0,
	"nModified" : 0,
	"nRemoved" : 0,
	"upserted" : [ ]
})

ステップ2—データベースのサイズを確認する

データを含むデータベースができたので、そのバックアップを作成できます。 ただし、データベースが大きい場合、バックアップは大きくなります。ストレージスペースが不足し、サーバーの速度が低下したりクラッシュしたりするリスクを回避するために、バックアップを作成する前にデータベースのサイズを確認する必要があります。

あなたは使用することができます stats メソッドとの値を検査します dataSize データベースのサイズをバイト単位で知るためのキー。

  1. db.stats().dataSize;

現在のデータベースの場合、 dataSize 少数になります:

db.stats()。datasizeの出力
592

の値に注意してください dataSize これは、バックアップのサイズの概算にすぎません。

ステップ3—バックアップの作成

バックアップを作成するには、次のコマンドラインユーティリティを使用できます。 mongodump. デフォルトでは、 mongodump MongoDBインスタンスに存在するすべてのデータベースのバックアップを作成します。 特定のデータベースのバックアップを作成するには、 -d オプションを選択し、データベースの名前を指定します。 さらに、 mongodump バックアップを保存する場所を知っている場合は、 -o オプションを選択し、パスを指定します。

あなたがまだ中にいる場合 mongo シェル、を押して終了します CTRL+D.

次のコマンドを入力して、 myDatabase のバックアップを作成し、に保存します。 ~/backups/first_backup:

  1. mongodump -d myDatabase -o ~/backups/first_backup

バックアップの作成が成功すると、次のログメッセージが表示されます。

成功したバックアップ作成ログ
2015-11-24T18:11:58.590-0500  writing myDatabase.myCollection to /home/me/backups/first_backup/myDatabase/myCollection.bson
2015-11-24T18:11:58.591-0500  writing myDatabase.myCollection metadata to /home/me/backups/first_backup/myDatabase/myCollection.metadata.json
2015-11-24T18:11:58.592-0500  done dumping myDatabase.myCollection (3 documents)
2015-11-24T18:11:58.592-0500  writing myDatabase.system.indexes to /home/me/backups/first_backup/myDatabase/system.indexes.bson

バックアップは単一のファイルではないことに注意してください。 実際には、次の構造を持つディレクトリです。

MongoDBバックアップのディレクトリ構造
first_backup
└── myDatabase
    ├── myCollection.bson
    ├── myCollection.metadata.json
    └── system.indexes.bson

ステップ4—データベースを削除する

作成したバックアップをテストするには、別のサーバーで実行されているMongoDBインスタンスを使用するか、現在のサーバーのデータベースを削除します。 このチュートリアルでは、後者を実行します。

を開きます mongo シェルを作成し、myDatabaseに接続します。

  1. mongo myDatabase

を使用してデータベースを削除します dropDatabase 方法。

  1. db.dropDatabase();

削除が成功すると、次のメッセージが表示されます。

dropDatabase()の出力
{ "dropped" : "myDatabase", "ok" : 1 }

これで、 find 以前に挿入したすべてのデータがなくなっていることを確認するためのコレクションのメソッド。

  1. db.myCollection.find();

データベースに表示するデータがないため、このコマンドからの出力はありません。

ステップ5—データベースの復元

を使用して作成されたバックアップを使用してデータベースを復元するには mongodump、と呼ばれる別のコマンドラインユーティリティを使用できます mongorestore. 使用する前に、 mongo を押してシェル CTRL+D.

使用する mongorestore とてもシンプルです。 必要なのは、バックアップを含むディレクトリのパスだけです。 に保存されているバックアップを使用してデータベースを復元する方法は次のとおりです。 ~/backupts/first_backup:

  1. mongorestore ~/backups/first_backup/

復元操作が成功すると、次のログメッセージが表示されます。

正常な復元ログ
2015-11-24T18:27:04.250-0500  building a list of dbs and collections to restore from /home/me/backups/first_backup/ dir
2015-11-24T18:27:04.251-0500  reading metadata file from /home/me/backups/first_backup/myDatabase/myCollection.metadata.json
2015-11-24T18:27:04.252-0500  restoring myDatabase.myCollection from file /home/me/backups/first_backup/myDatabase/myCollection.bson
2015-11-24T18:27:04.309-0500  restoring indexes for collection myDatabase.myCollection from metadata
2015-11-24T18:27:04.310-0500  finished restoring myDatabase.myCollection (3 documents)
2015-11-24T18:27:04.310-0500  done

復元されたデータを調べるには、まず、 mongo シェルして接続します myDatabase.

  1. mongo myDatabase

次に、 find あなたの方法 collection.

  1. db.myCollection.find();

すべてがうまくいけば、以前に挿入したすべてのデータを表示できるはずです。

find()の出力
{ "_id" : ObjectId("5654e76f21299039c2ba8720"), "name" : "Alice", "age" : 30 }
{ "_id" : ObjectId("5654e76f21299039c2ba8721"), "name" : "Bill", "age" : 25 }
{ "_id" : ObjectId("5654e76f21299039c2ba8722"), "name" : "Bob", "age" : 35 }

結論

このチュートリアルでは、使用方法を学びました mongodumpmongorestore MongoDBデータベースをバックアップおよび復元します。 バックアップの作成はコストのかかる操作であり、MongoDBインスタンスのパフォーマンスを低下させる可能性があることに注意してください。 したがって、オフピーク時にのみバックアップを作成することをお勧めします。

MongoDBバックアップ戦略の詳細については、MongoDB3.0マニュアルを参照してください。