前書き

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

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

前提条件

従うには、次のものが必要です。

  • sudo non-root userを含む1つの64ビットUbuntu 14.04ドロップレット

  • サーバーにインストールされたMongoDB 3.0.7は、https://www.digitalocean.com/community/tutorials/how-to-install-mongodb-on-ubuntu-14-04 [このMongoDBインストールガイド]に従って実行できます。

手順1-サンプルデータベースの作成

空のデータベースのバックアップを作成することはあまり有用ではないため、この手順ではサンプルデータベースを作成し、そこにデータを追加します。

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

mongo

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

use myDatabase

出力

switched to db myDatabase

MongoDBデータベース内のすべてのデータは、_collection_に属している必要があります。 ただし、コレクションを明示的に作成する必要はありません。 `+ 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`シェルを開き、* Database *に接続します。

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`シェルを開き、 + Database`に接続します。

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バックアップ戦略の詳細については、https://docs.mongodb.org/manual/core/backups/ [MongoDB 3.0マニュアル]を参照してください。