在MySQL中,我通过执行调试如何更改记录
mysqlbinlog bin-88.log | grep“ record-id” --before = 2 --after = 2
我如何对mongo做类似的事情?
谢谢!
您可以在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)
在上面的例子,我发现的更新条目(op:u用于与对象ID的文件)501c87fa9d2b5b2b54437125。应用了两列更新:名称,iq。
与MySQL二进制日志要注意的一个区别是,MongoDB oplog是要应用的幂等更改的列表。MySQL binlog是修改数据的语句列表。该oplog格式使MongoDB可以安全地多次应用条目,而不会产生有害的副作用。这也意味着您会发现影响多个文档的update命令的结果作为操作日志中每个文档的单独条目,而不是像binlog中出现的单个“ UPDATE ..”语句。
mongodb 中有一个 oplog,但只有当您有副本集时才会填充它。这是一个有上限的集合。
您可以像这样从 shell 查询它:
use local;
db.oplog.rs.find(); // specify "ns" and "_id" here, if desired
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3830 次 |
| 最近记录: |