MongoDBでUnclean shutdownの際にmongod.lockを消す

昨日何も考えず、VirtualBox上のUbuntu(ゲスト)でMongoDB動かしたまま、 ホストのWindowsをシャットダウンして帰ったわけなんですが、 今朝起動したところ↓のようなエラーが出て起動できませんでした。

# /usr/local/mongodb/bin/mongod --replSet replica --port 27017 --dbpath /data/replica1 --rest --nojournal
Wed Jan 25 10:01:36 [initandlisten] MongoDB starting : pid=2131 port=27017 dbpath=/data/replica1 64-bit host=ubnt
Wed Jan 25 10:01:36 [initandlisten] db version v2.0.2, pdfile version 4.5
Wed Jan 25 10:01:36 [initandlisten] git version: 514b122d308928517f5841888ceaa4246a7f18e3
Wed Jan 25 10:01:36 [initandlisten] build info: Linux bs-linux64.10gen.cc 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
Wed Jan 25 10:01:36 [initandlisten] options: { dbpath: "/data/replica1", nojournal: true, port: 27017, replSet: "replica", rest: true }
**************
Unclean shutdown detected.
Please visit http://dochub.mongodb.org/core/repair for recovery instructions.
*************
Wed Jan 25 10:01:36 [initandlisten] exception in initAndListen: 12596 old lock file, terminating
Wed Jan 25 10:01:36 dbexit:
Wed Jan 25 10:01:36 [initandlisten] shutdown: going to close listening sockets...
Wed Jan 25 10:01:36 [initandlisten] shutdown: going to flush diaglog...
Wed Jan 25 10:01:36 [initandlisten] shutdown: going to close sockets...
Wed Jan 25 10:01:36 [initandlisten] shutdown: waiting for fs preallocator...
Wed Jan 25 10:01:36 [initandlisten] shutdown: closing all files...
Wed Jan 25 10:01:36 [initandlisten] closeAllFiles() finished
Wed Jan 25 10:01:36 dbexit: really exiting now

  MongoDBのドキュメントのページのDurability and Repairの章をみると、 コマンドラインで mongod --repair するか、 mongoシェルで db.repairDatabase(); ってするかみたいです。   mongod --repairしてみると↓のようにクリアされたようです。

# ./mongod --repair
Wed Jan 25 10:47:50 [initandlisten] MongoDB starting : pid=2801 port=27017 dbpath=/data/db/ 64-bit host=ubnt
Wed Jan 25 10:47:50 [initandlisten] db version v2.0.2, pdfile version 4.5
Wed Jan 25 10:47:50 [initandlisten] git version: 514b122d308928517f5841888ceaa4246a7f18e3
Wed Jan 25 10:47:50 [initandlisten] build info: Linux bs-linux64.10gen.cc 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
Wed Jan 25 10:47:50 [initandlisten] options: { repair: true }
略
Wed Jan 25 10:48:00 [initandlisten] closeAllFiles() finished
Wed Jan 25 10:48:00 [initandlisten] journalCleanup...
Wed Jan 25 10:48:00 [initandlisten] removeJournalFiles
Wed Jan 25 10:48:00 [initandlisten] shutdown: removing fs lock...
Wed Jan 25 10:48:00 dbexit: really exiting now

  で、起動しようとしたら、それでも同じエラーが出てるがや。。。

Wed Jan 25 10:52:57 [initandlisten] exception in initAndListen: 12596 old lock file, terminating

  ↓によると、mongod.lockっていうデータディレクトリ直下にあるロック用の ファイルを消してやらないとダメみたいです。 [MongoDB]MongoDBの新機能:ジャーナリングについて詳しく| @doryokujin ブログ:勉強会はうちに帰っても勉強会 ということで。

# rm /data/replica1/mongod.lock
# rm /data/replica2/mongod.lock
# rm /data/replica3/mongod.lock

  一応、もう一発mongod --repairカマしてから、 それぞれ↓で起動してめでたしめでたし。

/usr/local/mongodb/bin/mongod --replSet replica --port 27017 --dbpath /data/replica1 --rest --nojournal
/usr/local/mongodb/bin/mongod --replSet replica --port 27018 --dbpath /data/replica2 --rest --nojournal
/usr/local/mongodb/bin/mongod --replSet replica --port 27019 --dbpath /data/replica3 --rest --nojournal

  クエリ的にも昨日入れたデータが取れて

/usr/local/mongodb/bin# ./mongo localhost:27018
MongoDB shell version: 2.0.2
connecting to: localhost:27018/test
SECONDARY> rs.slaveOk();
SECONDARY> db.posts.find( { "comments.author" : "jim" } )
{ "_id" : ObjectId("4f1e79261c0db27b00f1954c"), "author" : "joe", "created" : ISODate("2009-03-27T15:00:00Z"), "title" : "Yet another blog post", "text" : "Here is the text...", "tags" : [ "example", "joe" ], "comments" : [     {   "author" : "jim",   "comment" : "I disagree" },     {   "author" : "nancy",     "comment" : "Good post" } ] }

  画面的にもOKです。  

Scaling MongoDB
Scaling MongoDB
posted with amazlet at 12.01.25
Kristina Chodorow
Oreilly & Associates Inc
売り上げランキング: 53297