一、Binlog类型
binlog的格式有三种,这也反应了mysql的复制技术:基于SQL语句的复制(statement-based replication, SBR),基于行的复制(row-based replication, RBR),混合模式复制(mixed-based replication, MBR)。相应地,binlog的格式也有三种:
STATEMENT
ROW
MIXED
使用命令查看mysql binlog的格式
mysql>showvariables like 'binlog_format'
使用mysqlbinlog解析的binlog:
MIXED(STATEMENT):
# at 193(开始位置)
#110708 10:03:06(时间截) server id(产生该事件的服务id) 1 end_log_pos(日志的结束位置) 280 Query(事件类型) thread_id=10 exec_time=0 error_code=0
SETTIMESTAMP=1310090586/*!*/;
insert into tvalues(17)
/*!*/;
ROW模式:
BEGIN
/*!*/;
# at 174
# at 214
#110708 10:49:22server id 1 end_log_pos 214 Table_map: `test`.`t` mapped to number 14
#110708 10:49:22server id 1 end_log_pos 248 Write_rows: table id 14 flags: STMT_END_F
BINLOG '
MnAWThMBAAAAKAAAANYAAAAAAA4AAAAAAAEABHRlc3QAAXQAAQMAAQ==
MnAWThcBAAAAIgAAAPgAAAAAAA4AAAAAAAEAAf/+MgAAAA==
'/*!*/;
# at 248
#110708 10:49:22server id 1 end_log_pos 317 Query thread_id=1 exec_time=0 error_code=0
SETTIMESTAMP=1310093362/*!*/;
COMMIT
STATEMENT是基于sql语句级别的binlog,每一条修改数据的sql都会被保存到binlog里;ROW是基于行级别的,他会记录每一行记录的变化,就是将每一行的修改都记录到binlog里面,记录的非常详细,但sql语句并没有在binlog里,在replication里面也不会因为存储过程触发器等造成Master-Slave数据不一致的问题,但是有个致命的缺点日志量比较大.由于要记录每一行的数据变化,当执行update语句后面不加where条件的时候或alter table的时候,产生的日志量是相当的大。MIXED:在默认情况下是statement,但是在某些情况下会切换到row状态,如当一个DML更新一个ndb引擎表,或者是与时间用户相关的函数等。在主从的情况下,主机上now,uuid函数执行在备机执行不一致,所以对于这种情况就必须把STATEMENT模式更改为ROW模式,因为ROW模式会直接写值而不是写语句。同样ROW模式还可以减少从机的相关计算,如在主机中存在统计写入等操作时,从机就可以免掉该计算把值直接写入从机。当然从从业务角度来说,ROW还有其深远意义。
二、binlog记录
每个binlog的开始都是由4个字节:fe 62 69 6e,组成的魔数(后面三个字节就是bin)。
然后接下来的就是一条记录的内容它包括:Common-Header,这部分不同版本的大小不一样,4.0以上的都是19个字节。在这个之后就是BODY。
Common-Header格式:(单位:字节)
Timestamp(4) |
Type(1) |
Server_id(4) |
Total_size(4) |
End_log_pos(4) |
Flag(2) |
Timestamp:从1970开始
Type:此log event type如FORMAT_DESCRIPTION_EVENT、QUERY、LOAD_EVENT等,其中每个binlog的第一条记录的类型都是FORMAT_DESCRIPTION_EVENT,它记录了该binlog的相关信息,如版本,这些信息对于后序分析binlog记录是有用的,所以对于任务要读取binlog的内容的工具都必须先读取第一条记录。QUERY包括我们经常操作的如:create,drop,update,insert等。
Server_id:创建这个事件的server id。防止循环主从导致的主机被从写。The master's server id (is preserved in therelay log; used to prevent from infinite loops in circular replication).
Total_size:该记录的大小,包括common_header及body。
End_log_pos:此下一条记录的开始位置。也是此条记录结束位置的上一个字节。
Flag:标志位。
QUERY类型的记录:
QUERY类型的记录除了开始的common-header之外,在body的开头是一个Post-header,然后之后才是真正的body内容。
Query Post-Header:(单位字节)
Thread_id(4) |
Exec_time(4) |
Db_len(1) |
Error_code(2) |
Status_var_len(2) |
Thread_id:is used to distinguish temporary tables that belong to differentclients.
Exec_time:The time from whenthe query started to when it was logged in the binlog, in seconds.QUERY到达到这个binlog事件生成的时间间隔。
Db_len:当前数据库的名称长度。
Error_code:执行出错的错误号。
相关推荐
MySQL Binlog Digger是一款免费的,且基于图形界面的binlog挖掘分析工具与sql审计工具。当发生误删、误增、误改时,它可以帮助我们从binlog中快速定位到误操作的重做语句(redo sql),同时推理出回滚语句(undo sql)。...
在本主题中,我们将深入探讨如何使用MySQL binlog查看工具来理解和分析binlog文件。 首先,理解MySQL binlog的格式至关重要。MySQL的binlog有两种格式:Statement-based(基于语句)和Row-based(基于行)。基于...
该工具支持在线和离线两种模式的binlog分析,能够帮助用户在误操作后快速找回丢失的数据。 在描述中,MySQL Binlog Digger强调了以下几个关键功能: 1. **Undo SQL回滚语句**:在数据恢复过程中,能够提供undo sql...
这里,binlog_format设置为ROW,意味着以行级格式记录binlog,这样可以更精确地跟踪更改。 2. **检查binlog状态**:在MySQL客户端中,使用`show variables like '%log_bin%'`查看binlog是否已开启,`show master ...
MySQL Binlog Digger分析工具。其他人下载,需要积分太多,我只需要5个积分
MySQL Binlog Digger 4.19安装包,mysql日志回滚、解析、挖掘、支持离线在线 支持解析全sql字段语句
MySQL Binlog Digger基于图形界面,免安装的日志分析工具,能对在线binlog与离线binlog进行分析,在选定在线binlog或离线binlog日志后,可对数据库、表、binlog开始时间、binlog结束时间、误操作的重做类型进行信息...
MySQL的binlog(二进制日志)是数据库系统中非常关键的一个组件,它记录了所有改变数据库状态的事务操作,对于数据恢复、主从复制、审计和数据分析等任务至关重要。今天我们将深入探讨如何利用binlog进行分析,特别...
MySQL Binlog Digger是一个免费的,且基于图形界面的binlog挖掘分析工具。它可以为数据恢复提供有力的参考依据,它可以对在线binlog与离线binlog进行挖掘分析,在设定过滤条件后便可以进行精确过滤,从而得到我们所...
总结,基于Python解析和转换MySQL binlog是一项涉及数据库操作记录分析的重要任务。通过理解binlog的原理和Python相关库,我们可以实现高效的数据同步、迁移和分析功能,同时为数据库管理带来便利。对于`reverse-sql...
MySQL Binlog Digger是一款免费的,且基于图形界面的binlog挖掘分析工具与sql审计工具。当发生误删、误增、误改时,它可以帮助我们从binlog中快速定位到误操作的重做语句(redo sql),同时推理出回滚语句(undo sql)。...
模板中的处理器配置将包含捕获binlog事件、解析事件、转换数据格式以及将数据写入Hive的逻辑。 2. **数据捕获**:使用`TailFile`或`GetTail`处理器监听MySQL的binlog文件。这些处理器可以从MySQL服务器的日志文件中...
MySQL Binlog Digger基于图形界面,免安装的日志分析工具,能对在线binlog与离线binlog进行分析,在选定在线binlog或离线binlog日志后,可对数据库、表、binlog开始时间、binlog结束时间、误操作的重做类型进行信息...
MySQL binlog有三种格式:STATEMENT、ROW和MIXED。每种格式都有其特点: 1. **STATEMENT模式**:基于SQL语句的复制。在这种模式下,每条修改数据的SQL语句会被记录到binlog中。优点是日志文件较小,减少了磁盘I/O,...
MySQL Binlog Digger是一款免费的,且基于图形界面的binlog挖掘分析工具与sql审计工具。当发生误删、误增、误改时,它可以帮助我们从binlog中快速定位到误操作的重做语句(redo sql),同时推理出回滚语句(undo sql)。...
mysql_binlog是 MySQL 二进制日志解析器的一个干净的、 mysql_binlog Rust 实现,包括对 MySQL 5.7 中引入的 JSONB 类型的支持。 它的主要目的是处理基于行的日志消息,但它对旧的基于语句的复制有基本的支持。 它...
`binlog_parser`可能利用了诸如`pymysql`、`mysqlbinlog`这样的Python库来与MySQL交互,解析binlog格式,并将其转换为Python对象。这些库通常提供解析binlog事件、连接到MySQL服务器以及执行SQL查询的能力。 在实际...
mysql通过binlog同步数据到redis的方法 本文档介绍了使用mysql的binlog机制同步数据到redis的方法。该方法通过模仿mysql的slave角色,从master获取数据库变化的数据,写入activeMQ,再同步到redis,实现数据同步的...