Ubuntu14.04でMongoDBバックアップを作成して使用する方法
序章
今日の多くの最新のWebアプリケーション開発者は、プロジェクトでNoSQLデータベースを使用することを選択しており、MongoDBが最初の選択肢であることがよくあります。 本番シナリオでMongoDBを使用している場合は、データの損失を防ぐために定期的にバックアップを作成することが重要です。 幸い、MongoDBには、バックアップを作成して使用するためのシンプルなコマンドラインツールが用意されています。 このチュートリアルでは、これらのツールの使用方法について説明します。
既存のデータベースを改ざんすることなくバックアップがどのように機能するかを理解するために、このチュートリアルでは、新しいデータベースを作成し、それに少量のデータを追加する手順から始めます。 次に、データベースのバックアップを作成し、データベースを削除して、バックアップを使用して復元します。
前提条件
フォローするには、次のものが必要です。
- sudo非rootユーザーを含む1つの64ビットUbuntu14.04ドロップレット
- サーバーにインストールされたMongoDB3.0.7。これはこのMongoDBインストールガイドに従って実行できます。
ステップ1—サンプルデータベースの作成
空のデータベースのバックアップを作成することはあまり役に立ちません。そのため、このステップでは、サンプルデータベースを作成し、それにデータを追加します。
MongoDBインスタンスと対話する最も簡単な方法は、mongo
シェルを使用することです。 mongo
コマンドで開きます。
mongo
MongoDBプロンプトが表示されたら、use
ヘルパーを使用して、myDatabaseという新しいデータベースを作成します。
use myDatabase
出力
switched to db myDatabase
MongoDBデータベース内のすべてのデータは、コレクションに属している必要があります。 ただし、コレクションを明示的に作成する必要はありません。 insert
メソッドを使用して存在しないコレクションに書き込む場合、データが書き込まれる前にコレクションが自動的に作成されます。
次のコードを使用して、insert
メソッドを使用して、myCollectionというコレクションに3つの小さなドキュメントを追加できます。
db.myCollection.insert([ {'name': 'Alice', 'age': 30}, {'name': 'Bill', 'age': 25}, {'name': 'Bob', 'age': 35} ]);
挿入が成功すると、次のようなメッセージが表示されます。
成功したinsert()操作の出力
BulkWriteResult({ "writeErrors" : [ ], "writeConcernErrors" : [ ], "nInserted" : 3, "nUpserted" : 0, "nMatched" : 0, "nModified" : 0, "nRemoved" : 0, "upserted" : [ ] })
ステップ2—データベースのサイズを確認する
データを含むデータベースができたので、そのバックアップを作成できます。 ただし、データベースが大きい場合、バックアップは大きくなります。ストレージスペースが不足し、サーバーの速度が低下したりクラッシュしたりするリスクを回避するために、バックアップを作成する前にデータベースのサイズを確認する必要があります。
stats
メソッドを使用し、dataSize
キーの値を調べて、データベースのサイズをバイト単位で知ることができます。
db.stats().dataSize;
現在のデータベースの場合、dataSize
の値は小さい数値になります。
db.stats()。datasizeの出力
592
dataSize
の値は、バックアップのサイズの概算にすぎないことに注意してください。
ステップ3—バックアップの作成
バックアップを作成するには、mongodump
というコマンドラインユーティリティを使用できます。 デフォルトでは、mongodump
はMongoDBインスタンスに存在するすべてのデータベースのバックアップを作成します。 特定のデータベースのバックアップを作成するには、-d
オプションを使用して、データベースの名前を指定する必要があります。 さらに、mongodump
にバックアップの保存場所を知らせるには、-o
オプションを使用して、パスを指定する必要があります。
まだmongo
シェル内にいる場合は、CTRL+D
を押してシェルを終了します。
次のコマンドを入力して、 myDatabase のバックアップを作成し、~/backups/first_backup
に保存します。
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に接続します。
mongo myDatabase
dropDatabase
メソッドを使用してデータベースを削除します。
db.dropDatabase();
削除が成功すると、次のメッセージが表示されます。
dropDatabase()の出力
{ "dropped" : "myDatabase", "ok" : 1 }
これで、コレクションのfind
メソッドを使用して、以前に挿入したすべてのデータがなくなったことを確認できます。
db.myCollection.find();
データベースに表示するデータがないため、このコマンドからの出力はありません。
ステップ5—データベースの復元
mongodump
を使用して作成されたバックアップを使用してデータベースを復元するには、mongorestore
と呼ばれる別のコマンドラインユーティリティを使用できます。 使用する前に、CTRL+D
を押してmongo
シェルを終了してください。
mongorestore
の使用は非常に簡単です。 必要なのは、バックアップを含むディレクトリのパスだけです。 ~/backupts/first_backup
に保存されているバックアップを使用してデータベースを復元する方法は次のとおりです。
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
に接続します。
mongo myDatabase
次に、collection
でfind
メソッドを呼び出します。
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マニュアルを参照してください。