【问题标题】:Reading mongoDB Binlogs读取 mongoDB Binlog
【发布时间】:2012-08-02 01:16:39
【问题描述】:

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

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

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

谢谢!

【问题讨论】:

    标签: mongodb binlog


    【解决方案1】:

    您可以在 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) 的所有更新的示例:

    > 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
        }
    }
    

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

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

    【讨论】:

    • +1,比我的更彻底一点!当你说“不是查询日志”时,听起来 binlog 是查询日志,但它们实际上是 insert/update/delete 语句日志(binlog 没有不修改的查询)。
    • @WesFreeman:感谢您的反馈.. 我更新了最后一段以澄清statement 而不是query
    【解决方案2】:

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

    你可以像这样从 shell 查询它:

    use local;
    db.oplog.rs.find(); // specify "ns" and "_id" here, if desired
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-06
      • 2012-11-11
      • 1970-01-01
      • 2023-03-13
      相关资源
      最近更新 更多