阅读mongoDB Binlogs

Pra*_*nna 5 binlog mongodb

在MySQL中,我通过执行调试如何更改记录

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

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

谢谢!

Ste*_*nie 5

您可以在MongoDB中使用类似的方法。的二进制日志相当于是OPLOG其中(如MySQL的二进制日志)通常用于复制。MongoDB中的oplog一个封顶集合称为oplog.rs其住在local数据库中。作为封顶的收藏,oplog保留了固定的历史记录。您可以更改oplog的大小

为了让MongoDB创建操作日志,您确实需要配置您mongod以使用复制。如果需要操作日志,则可以创建仅具有一个节点的虚拟副本集。

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

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

o2._id在给定名称空间(mydb数据库,mycollection)中查找给定对象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
    }
}
Run Code Online (Sandbox Code Playgroud)

在上面的例子,我发现的更新条目(opu用于与对象ID的文件)501c87fa9d2b5b2b54437125。应用了两列更新:名称,iq。

与MySQL二进制日志要注意的一个区别是,MongoDB oplog是要应用的幂等更改的列表。MySQL binlog是修改数据的语句列表。该oplog格式使MongoDB可以安全地多次应用条目,而不会产生有害的副作用。这也意味着您会发现影响多个文档的update命令的结果作为操作日志中每个文档的单独条目,而不是像binlog中出现的单个“ UPDATE ..”语句。


Eve*_*man 0

mongodb 中有一个 oplog,但只有当您有副本集时才会填充它。这是一个有上限的集合

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

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