写作时的Mongodump

时间:2017-10-03 13:33:59

标签: mongodb mongodump

运行mongodump对每秒写入多少次运行服务器是否安全?是否有可能以这种方式进行损坏的转储?

来自here

  

使用--oplog在mongodump操作期间捕获传入的写操作,以确保备份反映一致的数据状态。

这是否意味着无论数据库转储中的写入数量是多少都一致?

如果我在凌晨1点运行mongodump --oplog并在凌晨2点结束,那么我会运行mongorestore --oplogReplay我会得到什么状态?

来自here

  

但是,对于分片群集和副本集,使用mongodumpmongorestore作为备份策略可能会出现问题。

但为什么呢?我有1个主要副本和2个副本的副本集。针对其中一个问题运行mongodump会出现什么问题?它应该与primary相同(复制滞后差异除外)。

1 个答案:

答案 0 :(得分:3)

docs非常清楚:

  

--oplog

     

创建一个名为oplog.bson的文件作为mongodump输出的一部分。 oplog.bson文件位于输出目录的顶层,包含在mongodump操作期间发生的oplog条目。此文件提供mongod实例状态的有效时间点快照。要还原到特定时间点备份,请将使用此选项创建的输出与mongorestore --oplogReplay结合使用。

     

如果没有--oplog,如果在转储操作期间存在写入操作,则转储将不会反映单个时刻。在更新过程中对数据库所做的更改可能会影响备份的输出。

     对mongos实例运行mongodump以转储分片集群的全部内容时,

--oplog无效。但是,您可以使用--oplog转储单个分片。

如果没有--oplog,你仍然会得到一个有效的转储,只是有点不一致 - 在凌晨1点到凌晨2点之间完成的一些写操作将会丢失。

使用--oplog,您可以在凌晨2点捕获oplog文件。转储仍然不一致,并且在还原时重播oplog会修复此问题。

转储分片群集的问题值得dedicated page in the docs。基本上是因为同步所有节点的备份的复杂性:

  

要创建分片群集的备份,您将停止群集平衡器,备份配置数据库,然后使用mongodump对群集中的每个分片进行备份以捕获备份数据。要捕获系统的更准确的时刻快照,您需要在获取文件系统快照之前停止所有应用程序写入;否则快照只会在一个时刻出现。

转储副本集没有问题。