问题标签 [mongodb-oplog]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
535 浏览

mongodb - 使用 mongorestore 进行 oplogreplay 和 --numInsertionWorkersPerCollection / 同时使用 mongorestore 进行 oplog 重播

如果我将 mongorestore 与 -- numInsertionWorkersPerCollection > 1 一起用于 oplogreplay,它不会带来任何性能提升。我有一台 8 核机器和 64 GB RAM,我的完整 oplog 大小约为 1 GB(同一集合中约有 100 万个请求)。所以我不认为硬件是这里的限制。请让我知道这背后的原因可能是什么。

基本上,我将 mongorestore 与同步(用于更新辅助的 oplog)进行比较。在同步的情况下,我们默认有 16 个工作人员可以同时应用 oplog,我希望我也可以对 mongorestore 做同样的事情。

0 投票
0 回答
411 浏览

mongodb - 具有多个查询和 oplog 的 mongodump

注意:这个问题通常更适合数据库管理员堆栈交换,但是我有一种预感,它需要一些编程来解决,所以我把它贴在这里。


有没有办法传递多个查询以在mongodump一次传递中过滤多个集合?我怀疑没有(在没有骰子的情况下浏览了文档),但我可能在此过程中错过了一些东西。

使用该--oplog选项可以确保您拥有一个point-in-time snapshot数据库。

如果您可以在同一命令中转储多个集合,则这是正确的。但是,如果您想用不同的查询过滤多个集合,那么如果您必须连续运行多个命令,那就不再适用了,因为在第一个命令完成和第二个命令开始之间可能已经存在会影响第一个结果的操作。

我考虑过并行运行几个命令,但是我认为这会对生产系统造成不必要的压力,特别是因为它们都会转储一个oplog,因为你事先不知道哪个会先完成,你需要oplog命令的最后完成的。

此刻,我正在考虑通过监视自己并以在运行转储命令的整个过程中oplog有效的格式来转储我自己的解决方案。mongorestore

但是,在我尝试重新发明轮子之前,我想知道是否有支持的方式来实现我想要的,或者至少有一些库已经这样做了,因为我认为这不是一个独特的用例。

0 投票
1 回答
500 浏览

java - 使用java查询mongo oplog的时间戳字段

我正在尝试使用 java 查询 mongo oplog 集合的时间戳字段。

下面是代码。

当我在上面运行一段代码时,它什么也不返回。

下面是转换后的查询。

我使用 robomongo 执行了相同的查询,它也没有返回任何内容。

但是当我将查询更改为使用 Timestamp 并执行它时,它会返回 oplog 记录列表。下面是工作中的 mongo 查询。

如何使用 java 获取上述查询?或者有没有其他方法可以使用java查询oplog时间戳字段?

0 投票
0 回答
589 浏览

mongodb - Mongo 3.4 oplog时间戳到纪元

我正在尝试将 oplog ts 字段转换为 unix 纪元时间。

操作日志文件

当我运行 python 实用程序时,我得到低于输出

https://github.com/mongodb-labs/mongo-connector/issues/324

不确定如何在 3.4 中读取 oplog 时间戳。

谢谢帕里

0 投票
1 回答
642 浏览

mongodb - 应用 oplog 但发现重复键错误

Mongo 版本是 3.0.6,我有一个通过 mongodump 和 mongorestore 使用 --oplogReplay 选项将 oplog 从另一个数据库应用到目标数据库的过程。

但是我多次发现重复的关键错误消息,源数据库和目标数据库具有相同的结构(独立和字段),不可能在目标上重复记录,因为它应该首先在源数据库上出错。

错误信息看起来像这样

今天我发现了一个这样的神秘信息

什么意思?我的理解是,mongorestore 有“--stopOnError”选项,表示默认过程,如果有任何错误,恢复过程将跳过并继续。但是我遇到了上述错误,然后恢复过程随时终止。:(

0 投票
1 回答
1512 浏览

mongodb - mongodump --oplog 和每个数据库还原

我需要能够从备份中恢复单个数据库,甚至是单个集合。由于mongodump --oplog仅适用于完整实例(副本集),因此我进行了以下过程以仅过滤要从 --oplog 选项生成的 oplog.bson 还原的数据库中的条目。有人可以告诉我这是正确的还是我遗漏了什么?

  1. 首先我只恢复我需要的数据库(在这个例子中数据库是测试)

    mongorestore -d test dump/test

  2. 将 --oplog 选项生成的oplog.bson文件恢复到随机集合中

    mongorestore -d oplog -c oplog dump/oplog.bson

  3. 从恢复的oplog.bson集合中仅转储引用我正在恢复的数据库的文档

    mongodump -d oplog -c oplog -q "{ns:/^test[.]/}" -o oplog

  4. 使用带有过滤操作的最后转储使用 --oplogReplay 选项进行还原

    mongorestore --oplogReplay oplog/oplog

  5. 最后我删除了临时 oplog 集合。

    mongo --eval "db.getSisterDB('oplog').dropDatabase()"

提前致谢!

0 投票
1 回答
939 浏览

mongodb - mongodb oplog:“插入”操作是否添加“创建集合”操作?

当我们插入一个文档时,如果数据库和/或集合不存在,它们会在插入之前创建。oplog 中是否提供此“创建数据库/集合”操作?

我感兴趣的原因是因为我们想从 v2.4 升级到 v3.2 但根据https://jira.mongodb.org/browse/SERVER-17634,“applyOps”命令将在插入操作时失败如果集合丢失。

0 投票
1 回答
404 浏览

mongodb - 使用 golang 从已经运行的集群的主实例中重放另一个 mongodb 实例中的 oplog

我正在从运行的主 mongodb 实例中以 json 格式存储 oplog

但是我无法找到任何方法将这些操作日志推送到另一个主要的 mongodb 实例中并重播它们,以便可以同步两个数据库

这是我为重放操作日志而编写的代码

0 投票
0 回答
108 浏览

mongodb - Mongo Oplog - 提取更新细节

假设我在inventory集合中有一个看起来像的条目

我发出命令

我有一个 oplog tailer,并且想知道,具体来说,"accessories"它已添加到此文档的tags字段中。据我所知,oplog 总是规范化使用$set$unset维护幂等性的命令。在这种情况下,描述更新的条目字段将显示类似

这使得无法知道此更新实际添加了哪些标签。有没有办法做到这一点?我也很好奇通过删除修改字段的类似情况,例如通过$pull. 欢迎使用 oplog tailer 领域之外的解决方案,以及指向此命令规范化过程文档的指针 - 我找不到它。

谢谢!

0 投票
2 回答
485 浏览

mongodb - mongodb oplog 对丢失文档的重播操作

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

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

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

  • 客户{_id: 1}在 2017-11-27创建条目
  • 相同条目于 2017-11-28 首次更新
  • 客户端通过 oplog 发送仅包含 2017-11-28 向前的操作
  • 我们在本地重播 oplog

使用 输入的更新操作会发生什么{_id: 1}?会出错吗?由于没有使用此类_id 更新的文档,它会被忽略吗?

PS目前使用mongo 2.4