序章

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

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

前提条件

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

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

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

MongoDBインスタンスと対話する最も簡単な方法は、mongoシェルを使用することです。 mongoコマンドで開きます。

  1. mongo

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

  1. use myDatabase
出力
switched to db myDatabase

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

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

  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と呼ばれる別のコマンドラインユーティリティを使用できます。 使用する前に、CTRL+Dを押してmongoシェルを終了してください。

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

次に、collectionfindメソッドを呼び出します。

  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 }

結論

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

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