はじめに
MongoDBにて以下記事で作成したデータベース名「test」コレクション名「user」のデータをバックアップし、データを削除した後にリストアして復旧する手順を紹介します。
環境情報
- Debian GNU/Linux 9
- MongoDB shell version: 3.2.11
事前確認
バックアップを行うためにはmongodbプロセスが動いている必要があります。
# ps aux | grep mongo mongodb .. /usr/bin/mongod --unixSocketPrefix=/run/mongodb --config /etc/mongodb.conf
データ数を確認するとデータ件数は3です。
# mongo MongoDB shell version: 3.2.11 connecting to: test > db.user.count() 3
ここからデータをバックアップし、データを削除した後にバックアップからリストアを行います。
MongoDBのバックアップ
mongodumpにて行います。--outにはバックアップファイルを格納するディレクトリ名を指定します。
# mongodump --port 27017 --out ~/mongobkup/ .. writing admin.system.users to .. done dumping admin.system.users (1 document) .. writing admin.system.version to .. done dumping admin.system.version (1 document) .. writing test.user to .. done dumping test.user (3 documents)
test.userの他にもデフォルトで作成されているadmin.system.usersやadmin.system.versionもバックアップされました。
作成されたファイル群は以下です。
# tree --charset=C mongobkup/
mongobkup/
|-- admin
| |-- system.users.bson
| |-- system.users.metadata.json
| |-- system.version.bson
| `-- system.version.metadata.json
`-- test
|-- user.bson
`-- user.metadata.jsonbsonはバイナリでjsonはテキストです。
# file user.bson user.bson: data # file user.metadata.json user.metadata.json: ASCII text, with no line terminators
ちなみにmongodbプロセスが落ちている場合は以下のようにコマンドエラーとなります。
# mongodump --port 27017 --out ~/mongobkup/ ... Failed: error connecting to db server: no reachable servers
MondoDBのデータリストア
まずはリストア検証のためにデータを削除します。
本手順でデータは全て消えてしまうのでコマンド発行はご注意ください。
# mongo
MongoDB shell version: 3.2.11
connecting to: test
> db.user.count()
3
> db.user.remove({})
WriteResult({ "nRemoved" : 3 })
> db.user.count()
0
> exit
byeデータベースtestをリストアすべく先ほどのディレクトリを指定してmongorestoreを行うと
# mongorestore --port 27017 --authenticationDatabase test ~/mongobkup/ building a list of dbs and collections to restore from /root/mongobkup dir reading metadata for test.user from /root/mongobkup/test/user.metadata.json restoring test.user from /root/mongobkup/test/user.bson restoring indexes for collection test.user from metadata finished restoring test.user (3 documents) restoring users from /root/mongobkup/admin/system.users.bson done
確かに3件のドキュメントがリストア完了し、実機を見てもリストアが完了しています。
~# mongo MongoDB shell version: 3.2.11 connecting to: test > db.user.count() 3
終わりに
コマンド一発でバックアップ&リストアが行えるので他サーバへのDB移行もサクッと行えます。
本記事がMongoDBのデータ移行のイメージを掴む一助になれば幸いです。