如何恢复数据库备份会影响oplog?

时间:2013-09-10 21:30:21

标签: mongodb tayra

我有一个独立的MongoDb实例。它里面有很多数据库。我只关心备份/恢复其中一个数据库,我们称之为DbOne。

使用(http://www.mongodb.com/blog/post/dont-let-your-standalone-mongodb-server-stand-alone)中的说明,我可以在此独立服务器上创建一个oplog。

使用工具Tayra,我可以记录/存储oplog条目。能够创建增量备份是我在独立实例上启用oplog的主要原因。

我打算每天使用命令

进行一次完整备份
mongodump --db DbOne --oplog

据我了解,此备份将包含我的数据库的时间点快照。

假设我要放弃自此备份以来的所有更新,我删除所有备份的oplog,并使用命令

仅恢复此完整备份
mongorestore --drop --db DbOne --oplogReplay

此时,我是否需要对local db中的oplog集合执行某些操作? mongodb会自动从oplog中删除与此数据库相关的条目吗?因为如果没有,那么Tayra最终不会找到那些oplog条目并重新备份它们?

Tbh,我还没有在我的机器上试过这个。我希望有人可以指向一个列出此方案中支持/预期行为的文档。

2 个答案:

答案 0 :(得分:1)

我已经尝试过一个MongoDb服务器,设置为只有一个成员的副本集,在提问后不久。但是我忘了回答这个问题。

我使用mongodump --db DbOne --oplog进行了备份。我执行了一些额外的更新。保持mongodb服务器不变,即仍然在复制下运行,如果我运行mongorestore命令,那么它将创建数千个oplog条目,一个用于db中每个集合的每个文档。这是一个很大的混乱。

另一种方法是关闭MongoDb并将其作为独立实例启动(即不作为副本集运行)。现在,如果我使用mongorestore进行恢复,则不会触及oplog。这很糟糕,因为oplog现在包含实际集合中不存在的条目。

我想要一种机制,可以将我的数据库以及本地数据库中的oplog信息恢复到备份发生的时间。 mongodump不备份本地数据库。

最终我停止使用mongodump,而是切换到备份整个数据目录(停止mongodb后)。切换到AWS后,我可以使用EBS快照功能执行相同操作。

答案 1 :(得分:0)

我知道你想要一个关于mongorestore的文档的链接: http://docs.mongodb.org/manual/reference/program/mongorestore/

根据我的理解,您希望进行备份,然后恢复该备份。您在上面列出的命令将执行此操作:

1)mongodump --db DbOne --oplog

2)mongorestore --drop --db DbOne --oplogReplay

但请注意,备份有效采用的“时间点”是转储结束时,命令启动时。这是一个很好的细节,对您来说可能无关紧要,但为了完整性而包括在内。

如果还有其他信息,请告诉我。

最佳, 查理