正確關閉mongodb的方法,轉載于http://www.cnblogs.com/buro79xxd/archive/2011/03/23/1993220.html
如何正確關閉MongoDB
由于被同事kill -9后導致MongoDB癱瘓
錯誤:Error: error doing query: failed
首先MongoDB使用mmap方式進行數據文件管理,也就是說寫操作基本是在內存中進行,寫操作會被每隔60秒(syncdelay設定)的flush 到磁盤里。如果在這60秒內flush處于停止事情我們進行kill -9那么從上次flush之后的寫入數據將會全部丟失。
如果在flush操作進行時執行kill -9則會造成文件混亂,可能導致數據全丟了,啟動時加了repair也無法恢復。
避免方法
第一種 使用正確的關閉方法
錯誤:Error: error doing query: failed
首先MongoDB使用mmap方式進行數據文件管理,也就是說寫操作基本是在內存中進行,寫操作會被每隔60秒(syncdelay設定)的flush 到磁盤里。如果在這60秒內flush處于停止事情我們進行kill -9那么從上次flush之后的寫入數據將會全部丟失。
如果在flush操作進行時執行kill -9則會造成文件混亂,可能導致數據全丟了,啟動時加了repair也無法恢復。
避免方法
第一種 使用正確的關閉方法
官方文檔說明要使用 kill -15,killall mongod或者在client的shell里,use admin,執行db.shutdownServer()即可!
第二種
通過replication 使用 一個slave,或者用replica set 來避免單結點數據丟失。
第三種 1.7以后出現類似于binlog的功能
在 MongoDB 1.7 版本的最新分支上,就出現了一個新的數據可靠性選項(–dur)的支持。并且在數據文件修復工具上也有了一些改進。如果在啟動MongoDB時加上–dur 則MongoDB 會在進行寫操作前記一份日志,這和在其他一些數據庫中的binlog 類似,在MongoDB 數據文件損壞的情況下,可以使用此日志來進行恢復。據說其對性能的影響不大。
posted on 2012-07-30 19:55 小一敗涂地 閱讀(931) 評論(0) 編輯 收藏 所屬分類: mongdb、redis、memcache、消息隊列等