MongoDBでゆるふわDB体験

第11回 MongoDBのバックアップ

この記事を読むのに必要な時間:およそ 2 分

mongodumpを利用する方法を試してみよう

では次に,mongodumpでのフルバックアップとリストアを試してみましょう。

バックアップ

mongodを起動したままの状態で,mongodumpを実行します。

$ mongodump

すると,カレントディレクトリにdumpディレクトリが作成され,その中にデータベースごとのダンプファイルが保存されます。

$ ls dump/test/
customers.bson   ← customersコレクションの全バイナリデータ
customers.metadata.json   ← customersコレクションのメタデータ
system.indexes.bson   ← testデータベースのシステムインデックス
[参考]

--outオプションを指定することで,ダンプファイルの保存先を変更することができます。

$ mongodump --out /opt/backup/mongodump-2013-4-24

リストア

mongodumpを使ってバックアップした場合は,mongorestoreを使ってリストアします。ただし,mongorestoreはデータのinsertしか行いませんので,注意が必要です。すなわち,データベースを完全にリストアしたい場合は,一度mongodを停止して古いデータディレクトリを削除するか,mongodを起動したまま全てのデータベースを削除してからmongorestoreを実行する必要があります。

今回は,一度mongodを停止して古いデータディレクトリを削除してからmongorestoreを実行する方法を試してみます。mongodを停止し,以下のコマンドを実行してください。

$ rm -rf /data/db

/data/dbディレクトリを作成して,mongodを起動します。

$ mkdir /data/db
$ mongod

mongodを起動したままの状態で,mongorestoreを実行します。引数には,ダンプファイルへのパスを指定します。

$ mongorestore ./dump

これでリストアが完了しました。

mongodumpのオプション

mongodumpには複数のオプションがあります。ここでは,代表的なものをとりあげて紹介します。

コレクション単位でのバックアップ

--dbオプションでバックアップ対象のデータベースを指定し,さらに--collectionオプションで,バックアップ対象をコレクション単位で絞り込むことができます。

$ mongodump --db test --collection customers
クエリ指定でのバックアップ

-qオプションで,バックアップ対象のデータをクエリで指定することができます。

$ mongodump --db test --collection customers -q "{'rank':'Special member'}"
リモートバックアップ

mongodumpを使用して,リモートマシン上で稼働しているMongoDBのバックアップをとることが可能です。実際の運用では,ハードウェア障害に備えて,ダンプファイルは別のマシン上に置いておく方が良いでしょう。

たとえば,ホスト名mongo.example.comの37017ポートで動作している認証有りのmongodのダンプファイルを取得するには,以下のように指定します。

$ mongodump --host mongo.example.com --port 37017 --username user --password pass

これ以外のオプションについては,公式サイトのmongodumpのページをご参照ください。mongorestoreにも,リモートリストアやコレクション単位でのリストアなど,多くのオプションがあります。詳しくは公式サイトのmongorestoreのページをご参照ください。

まとめと次回のテーマ

今回はMongoDBのバックアップについて紹介しました。システムに障害はつきものです。いざという時に大切なデータをロストして泣かないためにも,きちんとバックアップ運用について設計しておきましょう。

次回はMongoDBの監視について紹介する予定です。お楽しみに!

著者プロフィール

藤崎祥見(ふじさきしょうけん)

野村総合研究所 OpenStandia所属。オープンソースのR&Dとセミナー講師を担当。

Debian,Ubuntu,Liferayのコミュニティで活動した後,MongoDBの翻訳に関わり,丸の内MongoDB勉強会を始める。

実家がお寺で,住職の資格を所持する坊主系エンジニア。

Twitter:@syokenz


渡部徹太郎(わたなべてつたろう)

野村総合研究所 OpenStandia所属。オープンソースを使ったSIやサポートの業務に従事。

藤崎と共同で丸の内MongoDB勉強会を始める。

趣味は自宅サーバ。好きなものはLinuxとRuby。

Twitter:@fetarodc


林田敦(はやしだあつし)

野村総合研究所 OpenStandia所属。オープンソースを使ったSIや製品開発業務に従事。

丸の内MongoDB勉強会では広報兼雑用係を務める。

趣味はレザークラフト,ダイビング,スキー,キャンプ,ジェットスキー,カメラ等々。作って滑って撮って潜れるエンジニア。

Facebook:Atsushi Hayashida