2

我有一个独立的 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

此时,我需要对localdb中的oplog集合做些什么吗?mongodb 会自动从 oplog 中删除与此数据库有关的条目吗?因为如果没有,那么最终不会Tayra找到那些 oplog 条目并重新备份它们吗?

Tbh,我还没有在我的机器上尝试过这个。我希望有人可以指向一个列出在这种情况下支持/预期的行为的文档。

4

2 回答 2

1

在提出问题后不久,我尝试了一个 MongoDb 服务器,设置为只有 1 个成员的副本集。然而我忘了回答这个问题。

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

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

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

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

于 2013-12-02T21:43:57.757 回答
0

我了解您想要一个关于 mongorestore 的文档的链接:http: //docs.mongodb.org/manual/reference/program/mongorestore/

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

1)mongodump --db DbOne --oplog

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

但是,请注意,有效进行备份的“时间点”是转储结束时,而不是命令开始时。这是一个对您来说可能无关紧要的细节,但为了完整性而包含在内。

让我知道是否还有其他事情。

最好的,查理

于 2013-09-13T20:37:45.737 回答