Mysql 主从复制过程中,数据交换主要是依托于mysql的Binlog,本文将对mysql的binlog进行详细的解析,从二进制来分析binlog的语义。
binlog又分为3中,statement格式,row格式,mixed格式。
statement 格式就是把所有数据变化的sql记录下来,但是如果出现now() rand()等函数时,会造成主从不一致的情况。
mixed格式是将row和statement结合起来,DML用row,DDL用statement。
row格式是比较复杂的,下面会详细介绍。
首先,我们先来做个测试,执行以下sql语句。
我们做了对于一个空的数据库做了6个操作,其中,1和2为DDL,row格式不记录。6为查询语句,row格式也不记录。重点分析中间的3条。
背景:
Mysql binlog 采用小端存储,fe 62 69 6a 应解析为 6a6962fe。
Mysql binlog的开头。
在binlog中,所有改变都被记录为event,每个event的前19个Byte为头。头的解析规则为: