原创:转载请说明出处谢谢!
参考源:
1、源码log_event。h log_event。cc包。c
2,internals-en。epub
一、目的
,,本系列文件主要为了说明
1,为什么说行格式较声明更占空间
2,为什么说行格式的binlog更加安全
3、插入/更新/删除是生成的行binlog如何直接看懂二进制格式
4、DDL生成的binlog是怎么样的
5、插入选择/创建表如何生成的行binlog
二、使用版本和数字显示
本系列文章重要解释MYSQL 5.6后行格式的binlog格式以及和事物有关的事件,按照官方的说法
binlog的格式经历了几个阶段
“v1: mysql 3.23
v3: mysql 4.0.2到4.1
v4: mysql 5.0以上
v2版本只是短暂的存在过,当然我们要解析当然是v4版本的binlog
因为要看是5.6以上的binlog
关于多字节的数字显示,一般使用低位优先模式,做到和操作系统无关,除非刻意说明
关于低位优先参考:
http://blog.itpub.net/7728585/viewspace-2124159/
三,binlog的魔法数
关于MYSQL BINLOG的作用就不做过多的解析了,在BINLOG中存储的是一种称之为事件的条目,
它们以二进制的格式存储,平时我们使用的mysqlbinlog工具也就是对这种二进制格式的文件
进行解析,得到直观的输出。这里不用mysqlbinlog而改为直接看二进制文件,当然我会对比
MYSQLBINLOG的输出和二进制解析的过程
每一个binlog文件都有4个字节的魔法数,其值固定为
[root@testmy mysqld。1)# hexdump简历test.000005
可以看到
铁62 69 6 e。斌
四、binlog事件的总体构架
一个事件包括了
事件标题
事件数据
其事件数据中又分为
固定的数据(贴头)
可变数据
事件标题:全部的活动统一固定的格式
固定的数据(贴头):每一事件类固定
变量数据:就是可以变化实际值了
关于事件的类型比较多详细参考末尾源码的截取
五、本系列文章要讨论的事件
而这里我们只要讨论5.6,5.7中和行binlog格式和innodb
联系比较紧密的几种事件如下:
query_log_event/QUERY_EVENT typecode=02
Format_description_log_event/FORMAT_DESCRIPTION_EVENT, typecode=15
Xid_log_event/XID_EVENT, typecode=16
Table_map_log_event/TABLE_MAP_EVENT typecode=19
Write_rows_log_event/WRITE_ROW_EVENT typecode=30
Update_rows_log_event/UPDATE_ROW_EVENT typecode=31日,
Delele_rows_log_event/DELETE_ROW_EVENT typecode=32,
因为这些语句是一个事物必须经历的,而Format_description_log_event是一个最重要的
说明性的事件
六、通用头文件(事件标题)解析
下面先解释一下通用的19个字节。
每一个事件有一个固定的头信息叫做事件标题:
事件标题
时间戳,,,0:4大敌;,,,,,,
type_code,,,,4:1
server_id,,,,彼前才能
event_length,,9:4
next_position,,十三4
国旗,,,,,,,第二节,才能,,,,,,
时间戳:固定4字节展示是新纪元(时代时间)以来的秒数
type_code:固定1字节事件事件的编码,在源码中是一个枚举类型负载最后源码处
server_id:固定4字节就是显示变量如“% server_id”;出来的值
event_length:固定4字节整个事件的长度,包含固定和非固定长度
next_position:固定4字节下一个事件的开始位置(2 ^ 32为4 g)
国旗:固定2字
节事件标志 ,,,LOG_EVENT_BINLOG_IN_USE_F,0 x1这个旗帜表示是否binlog正确的关闭了,这个标示只出现在Format_description_log_event中
,,,LOG_EVENT_THREAD_SPECIFIC_F 0 x4是否查询基于了临时表,如果基于了临时表MYSQLBINLOG必须设置@@PSEUDO_THREAD_ID=xx
,,,LOG_EVENT_SUPPRESS_USE_F,,0×8和——binlog-do-db, replicated-do-db有关
,,,其他还有很多
,,,LOG_EVENT_ARTIFICIAL_F 0 x20 LOG_EVENT_RELAY_LOG_F 0 x40 LOG_EVENT_IGNORABLE_F 0 x80 LOG_EVENT_NO_FILTER_F 0 x100…
,,,可以自行参考log_event。h源码头文件中的详细解释
,,,,
七、包装
浮点数值用 在binlog中部分数字使用这种方式显示,在后面的解析中会提到
参考源:
1、源码log_event。h log_event。cc包。c
2,internals-en。epub
一、目的
,,本系列文件主要为了说明
1,为什么说行格式较声明更占空间
2,为什么说行格式的binlog更加安全
3、插入/更新/删除是生成的行binlog如何直接看懂二进制格式
4、DDL生成的binlog是怎么样的
5、插入选择/创建表如何生成的行binlog
二、使用版本和数字显示
本系列文章重要解释MYSQL 5.6后行格式的binlog格式以及和事物有关的事件,按照官方的说法
binlog的格式经历了几个阶段
“v1: mysql 3.23
v3: mysql 4.0.2到4.1
v4: mysql 5.0以上
v2版本只是短暂的存在过,当然我们要解析当然是v4版本的binlog
因为要看是5.6以上的binlog
关于多字节的数字显示,一般使用低位优先模式,做到和操作系统无关,除非刻意说明
关于低位优先参考:
http://blog.itpub.net/7728585/viewspace-2124159/
三,binlog的魔法数
关于MYSQL BINLOG的作用就不做过多的解析了,在BINLOG中存储的是一种称之为事件的条目,
它们以二进制的格式存储,平时我们使用的mysqlbinlog工具也就是对这种二进制格式的文件
进行解析,得到直观的输出。这里不用mysqlbinlog而改为直接看二进制文件,当然我会对比
MYSQLBINLOG的输出和二进制解析的过程
每一个binlog文件都有4个字节的魔法数,其值固定为
[root@testmy mysqld。1)# hexdump简历test.000005
可以看到
铁62 69 6 e。斌
四、binlog事件的总体构架
一个事件包括了
事件标题
事件数据
其事件数据中又分为
固定的数据(贴头)
可变数据
事件标题:全部的活动统一固定的格式
固定的数据(贴头):每一事件类固定
变量数据:就是可以变化实际值了
关于事件的类型比较多详细参考末尾源码的截取
五、本系列文章要讨论的事件
而这里我们只要讨论5.6,5.7中和行binlog格式和innodb
联系比较紧密的几种事件如下:
query_log_event/QUERY_EVENT typecode=02
Format_description_log_event/FORMAT_DESCRIPTION_EVENT, typecode=15
Xid_log_event/XID_EVENT, typecode=16
Table_map_log_event/TABLE_MAP_EVENT typecode=19
Write_rows_log_event/WRITE_ROW_EVENT typecode=30
Update_rows_log_event/UPDATE_ROW_EVENT typecode=31日,
Delele_rows_log_event/DELETE_ROW_EVENT typecode=32,
因为这些语句是一个事物必须经历的,而Format_description_log_event是一个最重要的
说明性的事件
六、通用头文件(事件标题)解析
下面先解释一下通用的19个字节。
每一个事件有一个固定的头信息叫做事件标题:
事件标题
时间戳,,,0:4大敌;,,,,,,
type_code,,,,4:1
server_id,,,,彼前才能
event_length,,9:4
next_position,,十三4
国旗,,,,,,,第二节,才能,,,,,,
时间戳:固定4字节展示是新纪元(时代时间)以来的秒数
type_code:固定1字节事件事件的编码,在源码中是一个枚举类型负载最后源码处
server_id:固定4字节就是显示变量如“% server_id”;出来的值
event_length:固定4字节整个事件的长度,包含固定和非固定长度
next_position:固定4字节下一个事件的开始位置(2 ^ 32为4 g)
国旗:固定2字
节事件标志 ,,,LOG_EVENT_BINLOG_IN_USE_F,0 x1这个旗帜表示是否binlog正确的关闭了,这个标示只出现在Format_description_log_event中
,,,LOG_EVENT_THREAD_SPECIFIC_F 0 x4是否查询基于了临时表,如果基于了临时表MYSQLBINLOG必须设置@@PSEUDO_THREAD_ID=xx
,,,LOG_EVENT_SUPPRESS_USE_F,,0×8和——binlog-do-db, replicated-do-db有关
,,,其他还有很多
,,,LOG_EVENT_ARTIFICIAL_F 0 x20 LOG_EVENT_RELAY_LOG_F 0 x40 LOG_EVENT_IGNORABLE_F 0 x80 LOG_EVENT_NO_FILTER_F 0 x100…
,,,可以自行参考log_event。h源码头文件中的详细解释
,,,,
七、包装
浮点数值用 在binlog中部分数字使用这种方式显示,在后面的解析中会提到