MongoDBでゆるふわDB体験

第11回 MongoDBのバックアップ

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

はじめに

本連載ではこれまでMongoDBの機能面に着目してきましたが,今回から数回に分けてMongoDBの非機能面を紹介します。非機能面の中でも,今回はMongoDBの運用に欠かせないバックアップについて説明します。なお,MongoDBは最新バージョンの2.4を対象としています。

コマンド表記について
$ : コマンドラインで実行するコマンド
> : Mongoシェルで実行するコマンド

MongoDBのバックアップの概要

MongoDBをバックアップするには,データそのもののバックアップと,コンフィグオプションのバックアップが必要です。

コンフィグオプションは,mongodの起動引数かコンフィグファイルで指定します。どちらの場合も,mongod起動シェルやコンフィグファイルなどのファイルをコピーするだけでバックアップ可能ですので,今回の記事では割愛します。

データのバックアップには一般的にフルバックアップと差分バックアップを組み合わせて使用しますが,MongoDBに差分バックアップの機能はありません。したがって,今回はフルバックアップとリストアの方法について紹介します。

[参考]

差分バックアップはヒューマンエラーによるデータ障害から復旧する目的でとられることがありますが,その目的にはMongoDBの遅延レプリケーションという機能が該当します。遅延レプリケーションについては,公式サイトを参照してください。

MongoDBでフルバックアップを行うには,以下の2通りの方法があります。

  1. データファイルをコピーする方法
  2. mongodumpを利用する方法

データファイルをコピーする方法

データファイルをコピーする方法は,データの変換が無いためとても手軽で高速ですが,その間データベースを停止するか,ロックしておく必要があります。多くの場合は,レプリカセットのセカンダリに対してこの方法でバックアップを取ります。もちろん,その際はOplogの溢れが発生しないように注意しなければなりません。Oplogのサイズを変更する方法は,公式サイトを参照してください。

mongodumpを利用する方法

mongodumpを利用する方法では,オンラインバックアップが可能です。また,データをバイナリ(BSON)形式でダンプするため,データの変換に時間がかかる代わりに,ファイルサイズを比較的小さく抑えられる利点があります。ただし,インデックスはダンプされずにリストア時に再構築されるため,大きなインデックスがある場合にはリストアに時間がかかることに注意してください。

データファイルをコピーする方法を試してみよう

まずは,データファイルをコピーする方法でフルバックアップとリストアを試してみましょう。データディレクトリへのパスは,デフォルトで/data/dbです。コンフィグオプションでdbpathを指定している場合は,それがデータディレクトリへのパスです。今回はデータディレクトリがデフォルトのまま/data/dbであるとして進めます。

バックアップ

mongodを停止し,データファイルをディレクトリごとコピーします。

$ cp -rp /data/db /path/to/backup/mongobackup1-2013-4-24

これでフルバックアップが完了しました。何の問題も無くmongodを再開することができます。

$ mongod

それでは,データベースを停止せずに,ロックを使ってバックアップする方法も試してみましょう。

> use admin
> db.fsyncLock()

これでデータベースをロックしました。次に,データファイルをディレクトリごとコピーします。

$ cp -rp /data/db /path/to/backup/mongobackup2-2013-4-24

最後にロックを解除します。

> db.fsyncUnlock()

これでデータベースを停止せずにバックアップを取得することができました。

リストア

まず,mongodを停止して古いデータディレクトリを削除します。

$ rm -rf /data/db

リストアするには,コピーしておいたデータディレクトリを再配置するだけでOKです。

$ cp -rp /path/to/backup/mongobackup1-2013-4-24 /data/db

これでリストアが完了しました。mongodを起動しましょう。以下のような表示が出て起動できない場合,古いロックファイルを削除してください。

$ mongod
old lock file: /data/db/mongod.lock.
$ rm /data/db/mongod.lock
$ mongod

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

著者プロフィール

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

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

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

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

Twitter:@syokenz


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

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

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

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

Twitter:@fetarodc


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

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

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

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

Facebook:Atsushi Hayashida

コメント

コメントの記入