首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正在读取mongoDB Binlog

正在读取mongoDB Binlog
EN

Stack Overflow用户
提问于 2012-08-04 08:59:12
回答 2查看 4.9K关注 0票数 5

在mysql中,我通过执行以下操作来调试记录的更改

mysqlbinlog bin-88.log | grep“记录-id”--之前=2--之后=2

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

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2012-08-04 10:48:41

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

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

注意:建议的生产配置是使用至少具有三个节点的复制,因为这提供了故障转移和数据冗余。

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

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

代码语言:javascript
复制
> 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的文档的更新条目(opu)。应用了两个列更新: name、iq。

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

票数 6
EN

Stack Overflow用户

发布于 2012-08-04 10:38:28

mongodb中有一个oplog,但只有当你有一个副本集时才会填充它。这是个capped collection

您可以像这样从shell中查询它:

代码语言:javascript
复制
use local;
db.oplog.rs.find(); // specify "ns" and "_id" here, if desired
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11805057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档