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