簡體   English   中英

服務器崩潰后MongoDB無法啟動

[英]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的不正常關閉。

有兩件事可以做:

  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 

我所要做的就是跑:sudo mongod --repair

然后:

sudo mongod

根據我的經驗,我通常會刪除數據庫文件夾中的“mongod.lock”文件 - 在我的情況下:

*我瀏覽到我的ubuntu即“data”文件夾中安裝數據庫的位置。(cd data); 列出文件(ls)*然后,我將通過發出“rm mongod.lock”文件刪除數據庫崩潰時自動創建的“mongod.lock”文件。

之后我會發出“./mongod”來啟動mongo deamon或者mongo來啟動mongo shell。 一切都會好起來的。

如果你沒有使用像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進程

檢查服務器上是否有足夠的可用空間。 如果沒有空間,mongodb將無法啟動。

這可能不是最好的解決方案,但如果你絕望,你可以試試這個。 似乎只有期刊對我來說是一個問題,所以我采取了以下步驟:

  1. 創建一個新的數據目錄 可能是/ var / lib / mongodb2
  2. 更新你的mongod.conf以指向新的數據目錄。
  3. 啟動 mongoDB。
  4. 如果它成功啟動,那么你可以再次關閉mongo並繼續,否則你可以在這里停止閱讀。
  5. 找到以前的數據目錄並將數據庫的文件復制到新的數據目錄(例如,admin.0 admin.1 admin.ns等)
  6. 再次啟動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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM