Mysql 主从复制-Binlog详细解析(Row格式)
来源:互联网 发布:云烟软件 编辑:程序博客网 时间:2024/04/29 22:19
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为头。头的解析规则为:
- fe 62 69 6e : 所有binlog的统一的头
- a6 77 0b 56 :1443592102 seconds from Linux epoch #从1970年1月1日起到日志记录时的秒数
- 0f : type #日志类型
- 01 00 00 00 : server-id #mysql配置的server-id
- 67 00 00 00 : Length103 #该event的数据长度
- 6b 00 00 00 : Next Event Start Pos107 #下个event的其实位置
- 01 00 : Flag #标志位
- 04 00 : Binlog-version # mysql-binlog的版本
- 50个字节 : mysql-server version #mysql的版本
- a6 77 0b 56 : 1443592102 #时间戳
每个跟数据相关的event都会对应一个table_map event,table_map event的解析方式为:
Table_map event的头和前面的分析方法一样,除去头,Table_map event 为:
- 29 00 00 00 00 00 :tablenumber #表的编号
- 0100 : flag #标志位
- 06 : DBnamelength #数据库名字的长度,后面紧跟着数据库的名字,最后是一个 00 的分隔符
- 06 : Tablenamelength#数据库表名字的长度,后面紧跟着数据库表的名字,最后是一个 00 的分隔符
- 03 : Column number #数据库表的列的数量
- 03 0f 0f : Typeof column(03 MYSQL_TYPE_LONG) 数据库表中列的类型
(0f MYSQL_TYPE_VARCHAR)
- 04 : metadata length #数据库表列的元数据长度
- ff 00 : 255 varchar length #varchar类型的字段长度为255
- 07 : checksum #校验位
insert,delete,update分别为有自己的格式,其中最复杂的是update,因为其记录了变化之前的数据和变化以后的数据,下面以update的例:
update操作的头同样和前面的相同,这里就不再分析了,略过头后,二进制表达的意义为:
- 29 00 00 00 00 00 :tablenumber #要update的表编号
- 01 00 : flag #标志位
- 03 : Column number #列的数量
- ff ff : Addition #附加位
- f8 : int startpos #int类型起始标志位
- 01 00 00 00 : id = 1
- 08 : length #下面varchar的长度,后面紧跟着数据
有需求或是什么不懂得地方,欢迎交流。
- Mysql 主从复制-Binlog详细解析(Row格式)
- mysql binlog row格式查看
- mysql binlog row格式查看
- MySQL binlog格式解析
- MySQL binlog 格式(Mixed,Statement,Row Level)
- MySQL binlog 格式(Mixed,Statement,Row Level)
- MySQL主从复制搭建,基于日志(binlog)
- MySQL主从复制搭建,基于日志(binlog)
- MySQL 主从复制搭建,基于日志(binlog)
- Mysql基于binlog主从复制配置
- MySQL主从复制下BINLOG内容分析
- mysql主从复制基于binlog+position搭建
- mysql之 binlog维护详细解析(开启、binlog相关参数作用、mysqlbinlog解读、binlog删除)
- MySQL 主从复制 详细讲解(一)
- MySQL 主从复制详解(详细)
- MySQL 主从复制详解(详细)
- MySQL 主从复制详解(详细)
- MySQL 主从复制详解(详细)
- 快递100接口解析与Volley自定义XML解析
- iOS --时间戳
- 软件测试管理要素
- Java 基础:Java语言运行机制
- leetcode 290 Word Pattern
- Mysql 主从复制-Binlog详细解析(Row格式)
- Arduino IDE的#ifdef bug
- JSP的九大内置对象
- poi导入
- 用Java语言实现单向链表的方法
- SyncroSVN 使用手册
- 【编译原理】:简易的词法分析器
- UVa 1208 - Oreon
- 向ActionBar中添加SearchView