mongodb oplog 重播丢失文档的操作

mongodb oplog replay ops on missing documents

我们的一位客户正在创建每小时 mongo 转储并将它们发送给我们。然后,我们重播操作日志。但是,客户决定不再发送所有转储,而只发送紧急情况下调试所需的转储。但是,我担心的是,不发送所有内容会导致我们本地镜像的不一致。

我的主要问题如下:当您重放包含丢失文档的更新操作的操作日志时会发生什么?它会出错还是忽略操作?

为了更好地解释我的意思,这里有一个例子:

{_id: 1}条目的更新操作会怎样?会报错吗?会不会因为没有文档要用这样的_id更新而被忽略?

P.S。目前使用 mongo 2.4

However, my worry is, that not sending everything will lead to inconsistencies on our local mirror.

这是正确的。不发送所有内容意味着您的副本不再是镜像,而更像是一个叉子。换句话说,它可能对 troubleshooting/reproduction 用途毫无用处。

oplog 应用程序假定数据库处于特定状态才能正常工作。将 oplog 应用于随机状态没有什么意义,而且它从来没有被设计成这样工作。即使它没有因断言错误而崩溃,数据库也处于未定义状态。

您可以在 https://github.com/mongodb/mongo/wiki/Replication-Internals

中阅读有关 MongoDB 复制内部的更多信息

P.S. currently using mongo 2.4

注意: MongoDB 2.4 版本太旧,不再支持。截至撰写本文时,最新的 MongoDB 版本是 3.4.10。请考虑升级到受支持的版本。

如果客户在上次转储后向您发送了所有 oplog,则不会丢失阻止 oplog 应用的信息,因为所有信息(插入、更新、删除)都在 oplog 中。

是的。 2.4版本太旧了...