gpt4 book ai didi

mongodb - 读取 mongoDB Binlog

转载 作者:IT老高 更新时间:2023-10-28 12:29:15 29 4
gpt4 key购买 nike

在mysql中,我通过做来调试记录是如何改变的

mysqlbinlog bin-88.log | grep "record-id"--before=2 --after=2

我如何用 mongo 做类似的事情?

谢谢!

最佳答案

您可以在 MongoDB 中使用类似的方法。相当于二进制日志的是 oplog其中(如 MySQL binlog)通常用于复制。在 MongoDB 中,oplogcapped collection名为 oplog.rs,它位于 local 数据库中。作为一个有上限的集合,oplog 保留了固定数量的历史记录。您可以change the size of the oplog .

为了让 MongoDB 创建 oplog,您确实需要配置您的 mongod 以使用复制。如果你想要 oplog,你可以创建一个只有一个节点的虚拟副本集。

注意:推荐的生产配置是使用至少三个节点的复制,因为这样可以提供故障转移和数据冗余。

一系列有用的博客文章解释了 oplog 格式,开头是:Replication Internals .您可以像查询普通 MongoDB 集合一样查询它,因此您可以尝试一些更新并查看生成的命令是什么。

在给定 namespace (mydb 数据库、mycollection)中查找给定对象 ID (o2._id) 的所有更新的示例:

> use local
> db.oplog.rs.find({'ns':'mydb.mycollection', 'o2._id' : ObjectId("501c87fa9d2b5b2b54437125")})
{
"ts" : Timestamp(1344047454000, 1),
"h" : NumberLong("226994175309144171"),
"op" : "u",
"ns" : "mydb.mycollection",
"o2" : {
"_id" : ObjectId("501c87fa9d2b5b2b54437125")
},
"o" : {
"name" : "Bobby Tables",
"iq" : 180
}
}

在上面的示例中,我为 ObjectID 501c87fa9d2b5b2b54437125 的文档找到了一个更新条目 (op: u)。应用了两列更新:name、iq。

与 MySQL binlogs 的一个区别是 MongoDB oplog 是 idempotent 的列表。要应用的更改; MySQL binlog 是修改数据的语句列表。 oplog 格式允许 MongoDB 安全地多次应用条目而不会产生不必要的副作用。这也意味着您会发现影响多个文档的更新命令的结果作为 oplog 中每个文档的单独条目,而不是出现在 binlog 中的单个“UPDATE ..”语句。

关于mongodb - 读取 mongoDB Binlog,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11805057/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com