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
(ウェブサイトのレイアウトに合わせて再フォーマットされた出力。)
どうした?どうすれば修正できますか?
ログファイルは、「古いロックファイル」があることを示しています。 MongoDBは、実行中に lock ファイルを保持します。このファイルは、開始時に作成され、停止時に削除されます。コンピューターがクラッシュした場合(またはkill
を介してMongoDBがクラッシュした場合)、このファイルは削除されないため、データベースは起動しません。このファイルの存在は、MongoDBのクリーンシャットダウンを示しています。
次の2つのことができます。
これが開発マシンであり、データベースを使用していない場合(およびプログラムを使用していない場合)、ファイルを手動で削除できます。 Ubuntu 12.10で実行されているMongoDB 2.2.2の場合、/var/lib/mongodb/mongod.lock
。他のバージョンの場合、ファイルは別のパスにあるか、mongo.lock
。
より安全なルートは、MongoDBの 耐久性と修理 ガイドに従うことです。要約すると、上記の構成のマシンでは、次のコマンドを実行する必要があります。
Sudo -u mongodb mongod --repair --dbpath /var/lib/mongodb/
Sudo service mongod start
私がしなければならなかったのは、実行することでした:須藤mongod --repair
その後:
須藤モンゴッド
私の経験に基づいて、私は通常、データベースフォルダ内にある「mongod.lock」ファイルを削除します-私の場合:
*私は、ubuntuでデータベースがインストールされている場所、つまり「データ」フォルダーを参照します(cd data);ファイルのリスト(ls)*次に、「rm mongod.lock」ファイルを発行して、データベースがクラッシュしたときに自動的に作成された「mongod.lock」ファイルを削除します。
その後、「./ mongod」を発行してmongoデーモンを起動するか、mongoを起動してmongoシェルを起動します。そして、すべてがうまくいきます。
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プロセスを開始します
サーバーに十分な空き領域があるかどうかを確認してください。空きスペースがない場合、mongodbは起動しません。
みんなありがとう。また、MongoDBが何度も再起動され、古いロックファイルについて不平を言っているという問題に直面しました。 WindowsサービスリストからMongoDBを停止した後、mongod.lock
ファイル。その後、MongoDBサービスを正しく開始でき、正常に機能しました。
これはおそらく最善の解決策ではありませんが、必死であれば、これを試すことができます。ジャーナルだけが私にとって問題であるように思えたので、私はこれらのステップを踏みました:
これらの手順を完了した後(5分未満で完了しました)、稼働しており、すべてのデータが正常であるように見えました。
Mongo dataディレクトリdbpath
から.lock
ファイルを削除するとうまくいきます。
例:Sudo sudo rm {data-directory}/mongod.lock