MongoDBでmongodumpを利用してバックアップを取得する

ローカル環境のMacBookPro2016が不調で再起動を繰り返した際にMongoDBのデータが消えていたのでバックアップを取得することにしました。
Linux環境を想定しています。

ユーザバックアップはうまくできなかったので、Databaseのバックアップのみを行なっています。

1.バックアップ方法について

バックアップ方法については公式サイトを参照するといくつかの方法があるようです。
企業向けのバックアップマネージャー等もあるみたいですね。

小規模な個人用途では物理的なSnapshot取得か論理バックアップ取得(mongodump)が簡単そうです。
ここでは論理バックアップ(mongodump)を使ったやり方を実践します。

公式ドキュメント(mongodump)

2. バックアップ取得

実際の運用を想定してmongod起動時に--authオプション指定(ユーザ認証が必要)を前提としています。

バックアップコマンド

mongodumpコマンドを利用します。
Linuxのコマンドとして入力します。

各データベース単位でユーザ認証を分けていると思いますので、その想定で、Database単位でバックアップを取得します。

指定するオプション
--port: DBアクセス時のポート番号
-u: ユーザ名
-p: パスワード
--db: データベース名
--out: バックアップの出力先

mongodump --port 47017 -u kensuke -p kensukepass --db common --out /Users/kensuke/Desktop/mongodump/test

リストアコマンド

mongorestoreコマンドを利用します。
同じくLinuxのコマンドとして入力します。

オプションとしては認証データベース(取得したデータベース名)が必須となります。

--port: DBアクセス時のポート番号
-u: ユーザ名
-p: パスワード
--authenticationDatabase: データベース名

mongorestore --port 47017 -u kensuke -p kensukepass --authenticationDatabase common /Users/kensuke/Desktop/mongodump/test1

複数メッセージが出力されますが、以下がでればリストアできています。
finished restoring (database名).(collection名) (1 document)

バックアップの運用

上記コマンドですが、1つのデータベースしかバックアップされませんし、ユーザもバックアップされません。

そのため、データベースをバックアップするコマンドをシェル化しておくのと、ユーザはmongo queryで再度作成する必要があります。

ユーザのリカバリまで一回でできたら楽だったんですけどね。

シェルを毎日時刻起動しておけばバックアップ運用は完了です。

英会話