77

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

(出力はWebサイトのレイアウトに一致するように再フォーマットされています。)

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

4

8 に答える 8

178

ログファイルは、「古いロックファイル」があることを示しています。MongoDBは、実行中はロックファイルを保持します。起動時にこのファイルを作成し、停止時に削除します。コンピューターがクラッシュした場合(またはMongoDBがクラッシュした場合などkill)、このファイルは削除されないため、データベースは起動しません。このファイルの存在は、MongoDBのクリーンでないシャットダウンを示しています。

2つのことができます:

  1. これが開発マシンであり、データベースを使用していない(プログラムも使用していない)場合は、ファイルを手動で削除できます。Ubuntu12.10で実行されているMongoDB2.2.2の場合、にあり/var/lib/mongodb/mongod.lockます。他のバージョンの場合、ファイルは別のパスにあるか、という名前である可能性がありますmongo.lock

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

    sudo -u mongodb mongod --repair --dbpath /var/lib/mongodb/
    sudo service mongod start
    
于 2012-12-04T10:00:31.230 に答える
3

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

それから:

sudo mongod

于 2015-10-29T14:07:22.450 に答える
3

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

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

その後、「。/ mongod」を発行してmongoデーモンを開始するか、mongoを発行してmongoシェルを開始します。そして、すべてがうまくいくでしょう。

于 2016-06-01T10:35:04.280 に答える
1

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

私にとっては

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プロセスを開始します。

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

于 2018-10-30T04:58:37.930 に答える
0

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

于 2015-01-31T06:34:25.630 に答える
0

これはおそらく最善の解決策ではありませんが、必死になっている場合はこれを試すことができます。ジャーナルだけが問題だったようだったので、次の手順を実行しました。

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

これらの手順を完了した後(5分未満かかりました)、私は稼働していて、すべてのデータに問題がないように見えました。

于 2017-12-02T23:07:34.620 に答える
0

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

于 2018-10-03T05:47:10.433 に答える
0

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

例えばsudo sudo rm {data-directory}/mongod.lock

于 2018-12-18T10:15:50.493 に答える