解決啓動報錯問題
今天啓動服務器的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服務。數據無價,對待這些問題一定要謹慎。