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
これでなんとか元通り。