[英]MongoDB won't start after server crash
我的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在運行時保留一個鎖文件。 它在啟動時創建此文件,並在文件停止時刪除它。 當計算機崩潰(或MongoDB崩潰,例如通過kill
)時,不會刪除此文件,因此數據庫無法啟動。 此文件的存在表明MongoDB的不正常關閉。
有兩件事可以做:
如果這是一台開發機器並且您沒有使用過您的數據庫(並且沒有您的程序),則可以手動刪除該文件。 對於在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
我所要做的就是跑:sudo mongod --repair
然后:
sudo mongod
根據我的經驗,我通常會刪除數據庫文件夾中的“mongod.lock”文件 - 在我的情況下:
*我瀏覽到我的ubuntu即“data”文件夾中安裝數據庫的位置。(cd data); 列出文件(ls)*然后,我將通過發出“rm mongod.lock”文件刪除數據庫崩潰時自動創建的“mongod.lock”文件。
之后我會發出“./mongod”來啟動mongo deamon或者mongo來啟動mongo shell。 一切都會好起來的。
如果你沒有使用像Bluepill或Monit等監控工具,你將不得不面對這個問題,因為在服務器崩潰后由於某種原因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進程
檢查服務器上是否有足夠的可用空間。 如果沒有空間,mongodb將無法啟動。
這可能不是最好的解決方案,但如果你絕望,你可以試試這個。 似乎只有期刊對我來說是一個問題,所以我采取了以下步驟:
完成這些步驟(花了不到5分鍾)后,我啟動並運行,所有數據似乎都沒問題。
多謝你們。 我們還遇到了一個問題,即MongoDB一次又一次地重新啟動它正在抱怨舊的鎖文件 。 我從Windows服務列表中刪除了MongoDB,然后刪除了mongod.lock
文件。 之后我能夠正確啟動MongoDB服務並且運行正常。
從mongo數據目錄dbpath
刪除.lock
文件對我.lock
。
例如sudo sudo rm {data-directory}/mongod.lock
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.