- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
在mysql中,我通过做来调试记录是如何改变的
mysqlbinlog bin-88.log | grep "record-id"--before=2 --after=2
我如何用 mongo 做类似的事情?
谢谢!
最佳答案
您可以在 MongoDB 中使用类似的方法。相当于二进制日志的是 oplog其中(如 MySQL binlog)通常用于复制。在 MongoDB 中,oplog
是 capped 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/
1、binlog简介 binlog即binary log,二进制日志文件。它记录了数据库所有执行的DDL和DML语句(除了数据查询语句select、show等),以事件形式记录并保存在二进制
如果MySQL服务器启用了二进制日志,你可以使用mysqlbinlog工具来恢复从指定的时间点开始 (例如,从你最后一次备份)直到现在或另一个指定的时间点的数据。“mysqlbinlog:用于处理二
我想编写一个服务来跟踪 mysql bin 日志以获取有关数据库更改的通知。 有没有开源的库可以读取和解析ROW格式的mysql bin log? 最佳答案 使用mysqlbinlog。 The se
canal 定位:基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了mysql。 原理: canal模拟mysql slave的交互协议,伪装自己为mysql sla
以前备份binlog时,都是先在本地进行备份压缩,然后发送到远程服务器中。但是这其中还是有一定风险的,因为日志的备份都是周期性的,如果在某个周期中,服务器宕机了,硬盘损坏了,就可能导致这段时间的bi
mysql binlog3种格式,row,mixed,statement. 解析工作 mysqlbinlog --base64-output=DECODE-ROWS -v mysql-bin.00
要禁用给定表的 bin 日志记录,我知道我可以使用以下命令: replicate-ignore-table=db_name.tbl_name 但是我不确定需要在哪里执行它? 谢谢 最佳答案 您必须将其
我正在设置复制,但我面临的问题是,当我执行插入更新的任何查询甚至创建表时,二进制日志文件没有被更新。这里是我的主人 my.cnf server-id = 1 log_bin
如果我正在读取 MySql binlog,我可以获得同一事务中发生哪些语句的指示吗? 最佳答案 有nothing built-in yet ,但也许this page会提供一些帮助。他们提供了一个 a
我不同意这个问题得到了有效的回答:decode mysqlbinlog in C# . 我有,我认为是同一个问题:我想从 C# 应用程序中读取 MySql 二进制日志,但不知道文件的格式。如何正确解析
我有许多运行 5.1.63 版的 mysql 服务器,本周早些时候在对从属服务器运行一些查询时,我注意到从属服务器上的一些数据本应使用主服务器上的更新语句删除。 我最初的想法是: 团队中的某个人正在更
在mysql中,我通过做来调试记录是如何改变的 mysqlbinlog bin-88.log | grep "record-id"--before=2 --after=2 我如何用 mongo 做类似
例如,在创建新表或更新现有表上的数据时,这些事件将存储在mysql binlog中,也就是MySQL数据库的二进制日志。 二进制日志在MySQL复制中非常有用,主服务器将数据从二进制日志发送到远
我读到过,MariaDB 的 Maxscale(BinLog Server) 可用于将 bin 日志从 MySQL 集群中继到单个 BinLog Server,但是我想知道是否可以从不同的 MySQL
抱歉,这个问题可能非常基本,但我找不到任何东西来解决这个问题。 我有一个 aws rds,当我尝试获取我的 binlog 列表时,它只向我显示 2 个最新的列表。 SHOW BINARY LOGS;
我正在尝试查看 MySQL binlog 文件以追踪特定查询的来源。我使用 SHOW BINARY LOGS 查询来获取现有日志文件的名称,但是当尝试使用 mysqlbinlog 命令访问时,我不断收
我们希望打开查询日志记录,以便我们可以找到更改数据的查询。 是否可以将事务日志写入数据库?binlog和普通查询日志有什么区别? 最佳答案 如果启用,二进制日志将包含所有修改数据的查询。但您应该注意格
我有几个实时数据库需要迁移到新服务器。这些是经常使用的大型数据库。 我想在新服务器上使用从服务器设置复制并开始跨服务器移植数据。但是,我想尝试避免对当前主数据执行 mysqldump 以获得初始 bi
我在一对服务器上设置了复制。一个是主人,第二个是奴隶。 最近在 master 上,binlog 文件被过早清除(通过文件名,所以 mysql 没有阻止过早删除文件)。 现在 SLAVE 有状态: Go
如果全过程使用的是Mysql用户,应该可以正常启动。 如果用的ROOT用户,可能不能正常启动,原因是新建的目录权限不对。 可能会这样的错误提示: /usr/loc
我是一名优秀的程序员,十分优秀!