运行mongodump
对每秒写入多少次运行服务器是否安全?是否有可能以这种方式进行损坏的转储?
来自here:
使用
--oplog
在mongodump操作期间捕获传入的写操作,以确保备份反映一致的数据状态。
这是否意味着无论数据库转储中的写入数量是多少都一致?
如果我在凌晨1点运行mongodump --oplog
并在凌晨2点结束,那么我会运行mongorestore --oplogReplay
我会得到什么状态?
来自here:
但是,对于分片群集和副本集,使用
mongodump
和mongorestore
作为备份策略可能会出现问题。
但为什么呢?我有1个主要副本和2个副本的副本集。针对其中一个问题运行mongodump
会出现什么问题?它应该与primary相同(复制滞后差异除外)。
答案 0 :(得分:3)
docs非常清楚:
--oplog
创建一个名为
oplog.bson
的文件作为mongodump输出的一部分。oplog.bson
文件位于输出目录的顶层,包含在mongodump操作期间发生的oplog条目。此文件提供mongod实例状态的有效时间点快照。要还原到特定时间点备份,请将使用此选项创建的输出与mongorestore --oplogReplay
结合使用。如果没有
对mongos实例运行mongodump以转储分片集群的全部内容时,--oplog
,如果在转储操作期间存在写入操作,则转储将不会反映单个时刻。在更新过程中对数据库所做的更改可能会影响备份的输出。
--oplog
无效。但是,您可以使用--oplog
转储单个分片。
如果没有--oplog
,你仍然会得到一个有效的转储,只是有点不一致 - 在凌晨1点到凌晨2点之间完成的一些写操作将会丢失。
使用--oplog
,您可以在凌晨2点捕获oplog文件。转储仍然不一致,并且在还原时重播oplog会修复此问题。
转储分片群集的问题值得dedicated page in the docs。基本上是因为同步所有节点的备份的复杂性:
要创建分片群集的备份,您将停止群集平衡器,备份配置数据库,然后使用mongodump对群集中的每个分片进行备份以捕获备份数据。要捕获系统的更准确的时刻快照,您需要在获取文件系统快照之前停止所有应用程序写入;否则快照只会在一个时刻出现。
转储副本集没有问题。