【Linux運維入門】MongoDb啓動報錯:ERROR: child process failed, exited with error number xx

解決啓動報錯問題

今天啓動服務器的MongoDb服務時報錯

這裏寫圖片描述


出現這種錯誤的原因:

大部分是因爲mongodb 服務的不正常關閉,導致mongod 被鎖,想想可能是上次服務器斷電維護時,沒有手動關閉MongoDb服務造成的。


如何解決這種問題:

①. 刪除MongoDb安裝目錄下的 mongod.lock 文件和日誌文件 mongodb.log

②. 使用下面的命令修復MongoDb:

[root@master bin]# ./mongod --repair --dbpath /storage/mongodb/data/ --repairpath /storage/mongodb/tmp/

會執行幾分鐘的時間,耐心等待執行完成。

③. 修復完成後啓動MongoDb

[root@master bin]# ./mongod --dbpath=/storage/mongodb/data/ --port=27017 --logpath=/storage/mongodb/logs/mongodb.log --fork


如何正確關閉MongoDB


非正常關閉MongoDb服務,輕者就像上面,報個錯repair一下,再啓動即可;嚴重的可能導致MongoDB癱瘓
出現錯誤:Error: error doing query: failed

MongoDB使用mmap方式進行數據文件管理,也就是說寫操作基本是在內存中進行,寫操作會被每隔60秒(syncdelay設定)的flush到磁盤裏。如果在這60秒內flush處於停止事情我們進行kill -9那麼從上次flush之後的寫入數據將會全部丟失。如果在flush操作進行時執行kill -9則會造成文件混亂,可能導致數據全丟了,啓動時加了repair也無法恢復。


所以我們要以正確的方式關閉MongoDb,避免這些嚴重後果

第一種:使用 kill -15,killall mongod 命令關閉MongoDb服務

第二種:登錄到MongoDb控制檯,use admin,執行db.shutdownServer()

>use admin;
switched to db admin
>db.shutdownServer();
Tue Nov 18 11:03:24.164 DBClientCursor::init call() failed
server should be down...
Tue Nov 18 11:03:24.169 trying reconnect to 127.0.0.1:27017
Tue Nov 18 11:03:24.171 reconnect 127.0.0.1:27017 failed couldn't connect to server 127.0.0.1:27017
> exit
Bye


MongoDb數據可靠性選項(–dur)


在 MongoDB 1.7 版本的最新分支上,就出現了一個新的數據可靠性選項(–dur)的支持。並且在數據文件修復工具上也有了一些改進。如果在啓動MongoDB時加上–dur 則MongoDB 會在進行寫操作前記一份日誌,這和在其他一些數據庫中的binlog 類似,在MongoDB 數據文件損壞的情況下,可以使用此日誌來進行恢復。這樣就會增加數據的安全性。


小結

這篇文章介紹了兩點,第一個就是MongoDb啓動報錯,這個問題在使用MongoDb的過程中經常出現,原因就是未正常關閉導致的。同時也由這一點引出了非正常關閉MongoDb可能導致的嚴重後果,以及如何正常關閉MongoDb服務。數據無價,對待這些問題一定要謹慎。

發佈了189 篇原創文章 · 獲贊 472 · 訪問量 74萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章