最近再用mongodb做開發,在linux上嘛,習慣性的會使用kill -9 PID來關閉服務。
結果每次關閉再重啓mongodb後,mongodb總會自己關閉。看日誌也沒看出什麼來,然後就百度唄。
發現用kill -9殺死mongodb的後果挺嚴重。
然後去官網逛了一圈,查了一下
MongoDB使用的是內存映射存儲引擎:
它會把磁盤IO操作轉換成內存操作,如果是讀操作,內存中的數據起到緩存的作用,如果是寫操作,內存還可以把隨機的寫操作轉換成順序的寫操作,總之可以大幅度提升性能。
寫操作會被每隔60秒(syncdelay設定)的flush到磁盤裏。如果在這60秒內flush處於停止事情我們進行kill -9那麼從上次flush之後的寫入數據將會全部丟失。
如果在flush操作進行時執行kill -9則會造成文件混亂,可能導致數據全丟了。
官方描述:
Sending a KILL signal kill -9 will probably cause damage as mongod will not be able to cleanly exit. (In such a scenario, run the repairDatabase command.)
幸虧發現的早啊...不然指不定出什麼事故
最後查到可以用以下方法關閉mongodb
1、使用killall mongod
2、使用kil -15 PID
3、在admin用戶下執行db.shutdownServer()命令