写作时Mongodump

Ily*_*min 2 mongodb mongodump

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

这里

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

这是否意味着无论数据库转储中有多少写入都会保持一致?

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

这里

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

但为什么?我有 1 个主要和 2 个次要的副本集。运行mongodump中的次要问题是什么?它应该与主相同(复制滞后差异除外)。

Ale*_*lex 5

文档是它很清楚:

--oplog

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

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

--oplog对 mongos 实例运行 mongodump 以转储分片集群的全部内容时无效。但是,您可以使用--oplog转储单个分片。

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

有了--oplog凌晨 2 点捕获的 oplog 文件。转储仍然不一致,并且在恢复时重放 oplog 可以解决此问题。

转储分片集群的问题值得在文档中专门的页面。主要是因为同步所有节点备份的复杂性:

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

转储副本集没有问题。