web-dev-qa-db-ja.com

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

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

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

どうした?どうすれば修正できますか?

72
Hosam Aly

ログファイルは、「古いロックファイル」があることを示しています。 MongoDBは、実行中に lock ファイルを保持します。このファイルは、開始時に作成され、停止時に削除されます。コンピューターがクラッシュした場合(またはkillを介してMongoDBがクラッシュした場合)、このファイルは削除されないため、データベースは起動しません。このファイルの存在は、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
    
171
Hosam Aly

私がしなければならなかったのは、実行することでした:須藤mongod --repair

その後:

須藤モンゴッド

3
edencorbin

私の経験に基づいて、私は通常、データベースフォルダ内にある「mongod.lock」ファイルを削除します-私の場合:

*私は、ubuntuでデータベースがインストールされている場所、つまり「データ」フォルダーを参照します(cd data);ファイルのリスト(ls)*次に、「rm mongod.lock」ファイルを発行して、データベースがクラッシュしたときに自動的に作成された「mongod.lock」ファイルを削除します。

その後、「./ mongod」を発行してmongoデーモンを起動するか、mongoを起動してmongoシェルを起動します。そして、すべてがうまくいきます。

2
samson ojo

BluepillまたはMonitなどの監視ツールを使用しなかった場合、何らかの理由でサーバーがクラッシュした後、mongoがデーモンを自動的に起動しなかったため、この問題に直面する必要があります。 Sudo service mongod restartのように手動で動作させるには、この問題を考え出しましたが、さらにいくつかのタスクを実行する必要があります。mongoデーモンを起動する前に/etc/mongod.confでdbpathを確認してください。

私にとっては

storage:
  dbPath: /var/lib/mongodb

mongodコマンドを入力すると、MongoDB starting : pid=10795 port=27017 dbpath=/data/db 64-bit Host=xyz.comと表示されます。dbpathが/etc/mongod.confに記載されているものと同じであることを確認してください

これを行うには、Sudo mongod --dbpath /var/lib/mongodbと入力し、mongodコマンドを使用して、希望するdbpathでmongoプロセスを開始します。

FYI:mongodコマンドでmongoプロセスを開始します

1
Touseef Murtaza

サーバーに十分な空き領域があるかどうかを確認してください。空きスペースがない場合、mongodbは起動しません。

0
Jeremy Lynch

みんなありがとう。また、MongoDBが何度も再起動され、古いロックファイルについて不平を言っているという問題に直面しました。 WindowsサービスリストからMongoDBを停止した後、mongod.lockファイル。その後、MongoDBサービスを正しく開始でき、正常に機能しました。

0
Keijo

これはおそらく最善の解決策ではありませんが、必死であれば、これを試すことができます。ジャーナルだけが私にとって問題であるように思えたので、私はこれらのステップを踏みました:

  1. 新しいデータディレクトリを作成する。おそらく/ var/lib/mongodb2
  2. mongod.confを更新新しいデータディレクトリを指すようにします。
  3. 開始 mongoDB。
  4. 正常に起動したら、mongoを再びシャットダウンして続行できます。それ以外の場合は、ここで読むのを停止できます。
  5. 以前のデータディレクトリを探し、データベースのファイルをコピーを新しいデータディレクトリ(例:admin.0 admin.1 admin.nsなど)にコピーします
  6. mongoDBを開始もう一度(まだ新しいデータディレクトリを使用)

これらの手順を完了した後(5分未満で完了しました)、稼働しており、すべてのデータが正常であるように見えました。

0
Jage

Mongo dataディレクトリdbpathから.lockファイルを削除するとうまくいきます。

例:Sudo sudo rm {data-directory}/mongod.lock

0
Hemant Thorat