MongoDBのリカバリ

MongoDBのデーモンが走っているときにサーバが落ちてしまったときのリカバリ手順

もしMongoデーモンを以下のようなコマンドで走らせていれば

# ./mongod --dbpath=/tmp/db/ --fork --logpath=/var/ --logappend
/tmp/db/mongod.lock

というパスでロックファイルができているのでこれを削除します。
そしてrepairオプションをつけてもう一度mongodを起動します。

# ./mongod --repair --dbpath /tmp/db/

すると以下のように標準出力にざーっとログが流れます。

Sun Oct 31 19:58:30 MongoDB starting : pid=3892 port=27017 dbpath=/tmp/db/ 64-bit 
Sun Oct 31 19:58:30 db version v1.6.3, pdfile version 4.5
Sun Oct 31 19:58:30 git version: 278bd2ac2f2efbee556f32c13c1b6803224d1c01
Sun Oct 31 19:58:30 sys info: Linux domU-12-31-39-06-79-A1 2.6.21.7-2.ec2.v1.2.fc8xen #1 SMP Fri Nov 20 17:48:28 EST 2009 x86_64 BOOST_LIB_VERSION=1_41
Sun Oct 31 19:58:30 [initandlisten] ****
Sun Oct 31 19:58:30 [initandlisten] ****
Sun Oct 31 19:58:30 [initandlisten] need to upgrade database test with pdfile version 4.5, new version: 4.5
Sun Oct 31 19:58:30 [initandlisten]      starting upgrade
Sun Oct 31 19:58:30 [initandlisten]  test repairDatabase test
Sun Oct 31 19:58:30 allocating new datafile /tmp/db/$tmp_repairDatabase_0/test.ns, filling with zeroes...
Sun Oct 31 19:58:30 done allocating datafile /tmp/db/$tmp_repairDatabase_0/test.ns, size: 16MB,  took 0.032 secs
Sun Oct 31 19:58:30 allocating new datafile /tmp/db/$tmp_repairDatabase_0/test.0, filling with zeroes...
Sun Oct 31 19:58:31 done allocating datafile /tmp/db/$tmp_repairDatabase_0/test.0, size: 64MB,  took 0.155 secs
Sun Oct 31 19:58:31 allocating new datafile /tmp/db/$tmp_repairDatabase_0/test.1, filling with zeroes...
Sun Oct 31 19:58:31 [initandlisten] building new index on { _id: 1 } for test.users
Sun Oct 31 19:58:31 [initandlisten] done for 1 records 0.034secs
Sun Oct 31 19:58:31 done allocating datafile /tmp/db/$tmp_repairDatabase_0/test.1, size: 128MB,  took 0.274 secs
Sun Oct 31 19:58:31 [initandlisten] finished checking dbs
Sun Oct 31 19:58:31 dbexit: 

Sun Oct 31 19:58:31 [initandlisten] shutdown: going to close listening sockets...
Sun Oct 31 19:58:31 [initandlisten] shutdown: going to flush oplog...
Sun Oct 31 19:58:31 [initandlisten] shutdown: going to close sockets...
Sun Oct 31 19:58:31 [initandlisten] shutdown: waiting for fs preallocator...
Sun Oct 31 19:58:31 [initandlisten] shutdown: closing all files...
Sun Oct 31 19:58:31     closeAllFiles() finished

Sun Oct 31 19:58:31 [initandlisten] shutdown: removing fs lock...
Sun Oct 31 19:58:31 dbexit: really exiting now

再度、通常通りmongodを起動します。

# ./mongod --dbpath=/tmp/db/ --fork --logpath=/var/mongodb.log --logappend

これでなんとか元通り。