1. ホーム
  2. mongodb

サーバークラッシュ後にMongoDBが起動しない

2023-09-20 15:19:21

質問

私のUbuntuコンピュータがクラッシュし、それを再起動したときにMongoDBが動作しませんでした。私は次のコマンドを試して、次の出力を得ました。

$ mongo
Error: couldn't connect to server 127.0.0.1:27017 src/mongo/shell/mongo.js:91
exception: connect failed

$ service mongodb status
mongodb stop/waiting

$ service mongodb restart
stop: Unknown instance: 
start: Rejected send message, 1 matched rules; type="method_call",
       sender=":1.57" (uid=1000 pid=2227 comm="start mongodb ")
       interface="com.ubuntu.Upstart0_6.Job" member="Start" error name="(unset)"
       requested_reply="0"
       destination="com.ubuntu.Upstart" (uid=0 pid=1 comm="/sbin/init")

$ tail /var/log/mongodb/mongodb.log
[initandlisten] exception in initAndListen: 12596 old lock file, terminating
dbexit: 
[initandlisten] shutdown: going to close listening sockets...
[initandlisten] shutdown: going to flush diaglog...
[initandlisten] shutdown: going to close sockets...
[initandlisten] shutdown: waiting for fs preallocator...
[initandlisten] shutdown: closing all files...
[initandlisten] closeAllFiles() finished
dbexit: really exiting now

(出力はウェブサイトのレイアウトに合わせて再フォーマットされます。)

何が起きたのでしょうか?どうすれば直せますか?

どのように解決するのですか?

ログファイルには "old lock file" . MongoDB は ロック ファイルを保持しています。このファイルは起動時に作成され、停止時に削除されます。コンピュータがクラッシュしたとき (あるいは MongoDB がクラッシュしたとき、たとえば kill などで) クラッシュすると、このファイルは削除されないので、データベースは起動しません。このファイルがあるということは、MongoDB が正しくシャットダウンされていないことを示しています。

2つのことを行うことができます。

  1. これが開発用マシンで、データベースを使用していない (そしてプログラムも使用していない) 場合は、ファイルを手動で削除できます。Ubuntu 12.10で動作するMongoDB 2.2.2の場合、このファイルは /var/lib/mongodb/mongod.lock . 他のバージョンでは、このファイルは別のパスにあるか、ファイル名が mongo.lock .

  2. より安全なルートは、MongoDBの 耐久性と修理 のガイドに従うことです。まとめると、上記のような構成のマシンでは、以下のコマンドを実行する必要があります。

    sudo -u mongodb mongod --repair --dbpath /var/lib/mongodb/
    sudo service mongod start