2012-08-15 75 views
6

我想每天备份一个单独的mongodb数据库,可能需要使用mongodump。为了不丢失任何数据,我希望这是渐进的,所以如果在一天中出现问题,我需要能够重播当天的变化,直到做完一个mongorestore之后的失败点。想为MongoDB做增量备份。日记? OPLOG?

我是否正确理解,我需要使用OPLOG这个?或者正在记录答案?我试着做以下操作:

  1. 将我的mongo数据库变成一个副本集,以便它创建一个oplog。 (这种感觉非常哈克)
  2. 重新启动的mongod与--oplog选项
  3. 表演应该被记录在OPLOG

但是从来都没有被存储在OPLOG变化。做这种增量备份的最佳方式是什么?我基本上在寻找类似的方法来重放mysql binlog。

感谢

回答

5

的MongoDB不提供增量备份选项开箱即用,但它是可以做到的文件快照和回放OPLOG。您是否按照文档中列出的步骤将您的服务器设置为副本集? http://www.mongodb.org/display/DOCS/Replica+Sets+-+Basics

你能告诉我们这些备份的目的吗?你有没有考虑在副本集中添加第二个节点来保证数据的持久性?

如果你已经通过设置服务器的副本集的成员的步骤走,你可以运行shell rs.status()?

另一个注意(只是为了澄清) - 日志并不意味着是一个备份策略;日志记录仅确保数据库在发生故障转移时可以返回到一致状态。强烈建议使用日记启用。

下面是备份MongoDB的文档: http://www.mongodb.org/display/DOCS/Backups

+0

感谢您的澄清,我昨天看了更多,我明白需要发生什么。我想要做的是做一个每日mongodump,将其保存到S3,并且每小时也将我的oplog保存到S3。我有,如果你会这么好心将这两项后续跟进问题: 1.我OPLOG存储在本地数据库和我能够从现在的蒙戈外壳访问它。要备份oplog,我可以将所有本地。(1-N)和local.ns文件复制到s3吗? 2.什么是重播oplogs的最佳方式?是mongorestore --oplogReplay足够吗? 非常感谢! – 2012-08-16 20:40:48

+2

mongodump --oplog确保任何OPLOG条目而转储发生可与mongorestore --oplogReplay重播创建。您不能使用mongorestore --oplogReplay来重放转储完成后发生的oplog操作。你可能会探讨一个解决方案是转储OPLOG收集每隔一小时,并使用applyOps命令:http://docs.mongodb.org/manual/reference/commands/#applyOps – Jenna 2012-08-16 22:35:15

+1

这可能是哈克..但我认为使用mongorestore --oplogReplay实际上工作。我所做的只是把oplog记录下来,移动了最终的oplog.rs。bson'到'dump/oplog.bson'并运行mongorestore --oplogReplay。这是危险的吗?如果是这样,我一定会使用applyOps技术。 – 2012-08-16 23:29:10

0

做备份,最好的办法是配置Ops Manager为您的MongoDB的基础设施的一部分,但它这样做不仅仅是备份更多...