mongodb oplog 重播丢失文档的操作
mongodb oplog replay ops on missing documents
我们的一位客户正在创建每小时 mongo 转储并将它们发送给我们。然后,我们重播操作日志。但是,客户决定不再发送所有转储,而只发送紧急情况下调试所需的转储。但是,我担心的是,不发送所有内容会导致我们本地镜像的不一致。
我的主要问题如下:当您重放包含丢失文档的更新操作的操作日志时会发生什么?它会出错还是忽略操作?
为了更好地解释我的意思,这里有一个例子:
- 客户在 2017-11-27
上使用 {_id: 1}
创建条目
- 同一条目于 2017-11-28 首次更新
- 客户端发送的 oplog 仅包含 2017-11-28 之后的操作
- 我们在本地重播 oplog
{_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版本太旧了...
我们的一位客户正在创建每小时 mongo 转储并将它们发送给我们。然后,我们重播操作日志。但是,客户决定不再发送所有转储,而只发送紧急情况下调试所需的转储。但是,我担心的是,不发送所有内容会导致我们本地镜像的不一致。
我的主要问题如下:当您重放包含丢失文档的更新操作的操作日志时会发生什么?它会出错还是忽略操作?
为了更好地解释我的意思,这里有一个例子:
- 客户在 2017-11-27 上使用
- 同一条目于 2017-11-28 首次更新
- 客户端发送的 oplog 仅包含 2017-11-28 之后的操作
- 我们在本地重播 oplog
{_id: 1}
创建条目
{_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版本太旧了...