我有一个独立的MongoDB实例。里面有很多数据库。我只关心其中一个数据库的备份/恢复,我们称之为dbone。
使用(http://www.mongodb.com/blog/post/dont-let-your-standalone-mongodb-server-stand-alone中的说明,我可以在此独立服务器上创建oplog。
使用工具Tayra,我可以记录/存储oplog条目。能够创建增量备份是我在独立实例上启用oplog的主要原因。
我打算每天备份一次,使用命令

mongodump --db DbOne --oplog

据我所知,此备份将包含数据库的时间点快照。
假设我要放弃此备份后的所有更新,则删除所有backedup oplog,并使用命令仅还原此完整备份
mongorestore --drop --db DbOne --oplogReplay

此时,是否需要对localdb中的oplog集合执行某些操作?MongoDB会自动从oplog中删除与这个数据库相关的条目吗?因为如果不是,那么Tayra不会最终找到这些oplog条目并再次备份它们吗?
tbh,我还没在我的机器上试过。我希望有人可以指向一个文档,其中列出了此场景中支持/预期的行为。

最佳答案

在问了这个问题之后不久,我就尝试了一个mongodb服务器,设置为只有一个成员的副本集。但是我忘了回答这个问题。
我用mongodump --db DbOne --oplog做了备份。我执行了一些额外的更新。保持mongodb服务器的原样,即仍在复制下运行,如果我运行mongorestore命令,那么它将创建数千个oplog条目,每个条目对应数据库中每个集合的每个文档。真是一团糟。
另一种方法是关闭MongoDB并将其作为独立实例启动(即不作为副本集运行)。现在,如果我使用mongorestore恢复,oplog将不会被触摸。这很糟糕,因为oplog现在包含了实际集合中不存在的条目。
我想要一种机制,可以将本地数据库中的数据库和oplog信息恢复到备份发生时的状态。mongodump不备份本地数据库。
最终我停止使用mongodump,转而备份整个数据目录(在停止mongodb之后)。一旦我们切换到aws,我可以使用ebs快照功能来执行相同的操作。

关于mongodb - 如何恢复数据库备份会影响oplog?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18729062/

10-11 13:26