我有一个独立的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,我还没有在我的机器上试过这个。我希望有人可以指向一个列出此方案中支持/预期行为的文档。
答案 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
但请注意,备份有效采用的“时间点”是转储结束时,不命令启动时。这是一个很好的细节,对您来说可能无关紧要,但为了完整性而包括在内。
如果还有其他信息,请告诉我。
最佳, 查理