UTALI

書き溜めておいた技術記事や旅行記のバックアップです。

MongoDBでの障害対策

データベースを管理していると稀にテーブルが破損することがあります。大事なデータを守るために対策をとりましょう。これはMongoDBでの注意点です。

ジャーナリングを有効化する

これを有効にするにはmongodインスタンスの起動時に–journalオプションを追加することです。

mongod --journal

レプリカセットを有効にする

レプリカセットとはお互いに整合性をもった複数のデータベースのことで、これらを同時に動作させることでその中の1つが落ちた場合でもファイルの欠損が生じなくなります。

定期的にdumpファイルを取得する。

dumpファイルとはMongoDBデータベースのバイナリ形式のバックアップデータのことです。これを定期的に保存しておきバックアップを確保することで、もし元のデータベースが復旧できなくなった場合でも、dumpファイルを取得した時点での状態に戻すことができます。

dumpファイルを取得するにはmongodumpコマンドを実行します。

その構文は

mongodump -h {mongodインスタンスが動作しているアドレス} –port {mongodインスタンスが動作しているポート}

これはローカルの27017ポートで動作しているmongodのdumpを取得する例です。

mongodump -h localhost --port 27017

cronなどを利用して定期的に実行させるといいでしょう。

mongorestore

もしデータベースが破損してdumpファイルを利用して復旧する場合はmongorestoreコマンドを利用します。

ポート48004番で起動中のインスタンスのコレクションtableにデータベースitems を復旧させる例

mongorestore --collection table --db items dump/table/items.bson --port 48004

mongodumpの問題点

データベースを丸ごとコピーすることになるのでサイズの重いDBでは利用しずらいのが欠点です。