(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【MongoDB】バックアップとリストアの流れ

スポンサーリンク

はじめに

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.json

bsonはバイナリで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のデータ移行のイメージを掴む一助になれば幸いです。