开发者社区> 问答> 正文

如何正确关闭MongoDB?

由于被同事kill -9后导致MongoDB瘫痪
错误:Error: error doing query: failed
首先MongoDB使用mmap方式进行数据文件管理,也就是说写操作基本是在内存中进行,写操作会被每隔60秒(syncdelay设定)的flush到磁盘里。如果在这60秒内flush处于停止事情我们进行kill -9那么从上次flush之后的写入数据将会全部丢失。
如果在flush操作进行时执行kill -9则会造成文件混乱,可能导致数据全丢了,启动时加了repair也无法恢复
该如何避免?

展开
收起
落地花开啦 2016-02-05 16:09:26 2944 0
1 条回答
写回答
取消 提交回答
  • 喜欢技术,喜欢努力的人

    避免方法
    第一种 使用正确的关闭方法
    使用 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 数据文件损坏的情况下,可以使用此日志来进行恢复。据说其对性能的影响不大。

    2019-07-17 18:37:53
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Data as a Service - 数据即服务 -- MongoDB⾼级应⽤模式 立即下载
阿里云MongoDB云服务构建 立即下载
饿了么高级架构师陈东明:MongoDB是如何逐步提高可靠性的 立即下载