解析MYSQL BINLOG 二进制格式(4)--TABLE_MAP_EVENT

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 原创:转载请说明出处谢谢! 上接 http://blog.itpub.net/7728585/viewspace-2133188/ 解析MYSQL BINLOG 二进制格式(1)--准备工作  http://blog.
原创:转载请说明出处谢谢!
上接
http://blog.itpub.net/7728585/viewspace-2133188/ 解析MYSQL BINLOG 二进制格式(1)--准备工作 
http://blog.itpub.net/7728585/viewspace-2133189/ 解析MYSQL BINLOG 二进制格式(2)--FORMAT_DESCRIPTION_EVENT 
http://blog.itpub.net/7728585/viewspace-2133321/ 解析MYSQL BINLOG 二进制格式(3)--QUERY_EVENT 


class:Table_map_log_event
event:TABLE_MAP_EVENT
event_code:19

本event只用于 row模式的bin log ,从5.1.5开始,其实这部分
包含了大量的关于表的原数据,也是在保证slave正确
复制数据的重要event

--fixed data 
  6 bytes 表ID
  2 bytes 保留
--variable data part
  1 bytes  数据库名长度
  var-size 数据库名字 0x00 结尾
  1 bytes  表名长度
  var-size 表名 0x00 结尾
  packed interger 字段数量 注意这里就是packed interger参考第一篇文章
  var-size 字段类型,每一个字节代表一个字段,如下:
  typedef enum enum_field_types {
  MYSQL_TYPE_DECIMAL, MYSQL_TYPE_TINY,
  MYSQL_TYPE_SHORT, MYSQL_TYPE_LONG,
  MYSQL_TYPE_FLOAT, MYSQL_TYPE_DOUBLE,
  MYSQL_TYPE_NULL, MYSQL_TYPE_TIMESTAMP,
  MYSQL_TYPE_LONGLONG,MYSQL_TYPE_INT24,
  MYSQL_TYPE_DATE, MYSQL_TYPE_TIME,
  MYSQL_TYPE_DATETIME, MYSQL_TYPE_YEAR,
  MYSQL_TYPE_NEWDATE, MYSQL_TYPE_VARCHAR,
  MYSQL_TYPE_BIT,
  MYSQL_TYPE_TIMESTAMP2,
  MYSQL_TYPE_DATETIME2,
  MYSQL_TYPE_TIME2,
  MYSQL_TYPE_JSON=245,
  MYSQL_TYPE_NEWDECIMAL=246,
  MYSQL_TYPE_ENUM=247,
  MYSQL_TYPE_SET=248,
  MYSQL_TYPE_TINY_BLOB=249,
  MYSQL_TYPE_MEDIUM_BLOB=250,
  MYSQL_TYPE_LONG_BLOB=251,
  MYSQL_TYPE_BLOB=252,
  MYSQL_TYPE_VAR_STRING=253,
  MYSQL_TYPE_STRING=254,
  MYSQL_TYPE_GEOMETRY=255
} enum_field_types;
packed interger:metadata block 长度,注意这里就是packed interger参考第一篇文章
var-size metadata block数据
var-size 每一位代表这个字段的值是否为NULL,其长度为 INT((n+7)/8) n代表字段数量

接下来具体解析一个
             --
00000200  bf ba 78 97 58 13 e5 6b  01 00 33 00 00 00 34 02  |..x.X..k..3...4.|
00000210  00 00 00 00 ae 00 00 00  00 00 01 00 04 74 65 73  |.............tes|
00000220  74 00 05 6d 79 62 69 6e  00 02 03 0f 02 3c 00 03  |t..mybin.....<..|
00000230  a1 23 ad 72


这次关于event header 部分就不解析了
ba 78 97 58 13 e5 6b 01 00 33 00 00 00 34 02
00 00 00 00
也就是这部分,直接进入event data部分
--fixed data part
ae 00 00 00  00 00 :表ID 174
01 00:保留
--variable data part
04:数据库名长度 4字节
74 65 73 74 00:数据库名test 0x00结尾
05:表名长度 5字节
6d 79 62 69 6e  00:表名mybin 0X00结尾
02:字段数量 2个字段
03:MYSQL_TYPE_LONG(4字节int类型)
0f:MYSQL_TYPE_VARCHAR(varchar类型)
02:metadata lenth
3c 00:metadata block 第一个字段不需要长度,第二个字段为可变类型长度为60
03:00000011 都可以为NULL
a1 23 ad 72:CRC32 校验4字节

到此为止:表中的说明数据就出来了,在MYSQLBINLOG中会看到
# at 513
#170206  3:10:50 server id 93157  end_log_pos 564 CRC32 0x72ad23a1      Table_map: `test`.`mybin` mapped to number 174
以及在表中
### INSERT INTO `test`.`mybin`
### SET
###   @1=1 /* INT meta=0 nullable=1 is_null=0 */
###   @2='gaopeng' /* VARSTRING(60) meta=60 nullable=1 is_null=0 */


信息:
CRC32 0x72ad23a1      Table_map: `test`.`mybin` mapped to number 174
明显来自Table_map_log_event
而且类似/* VARSTRING(60) meta=60 nullable=1 is_null=0 */
中的 VARSTRING(60) meta=60 nullable=1 都来自于
Table_map_log_event
并且可以看到和解析出来的一模一样
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4天前
|
SQL 存储 关系型数据库
数据库开发之mysql前言以及详细解析
数据库开发之mysql前言以及详细解析
14 0
|
15天前
|
存储 关系型数据库 MySQL
MySQL引擎对决:深入解析MyISAM和InnoDB的区别
MySQL引擎对决:深入解析MyISAM和InnoDB的区别
31 0
|
28天前
|
canal 消息中间件 关系型数据库
【分布式技术专题】「分布式技术架构」MySQL数据同步到Elasticsearch之N种方案解析,实现高效数据同步
【分布式技术专题】「分布式技术架构」MySQL数据同步到Elasticsearch之N种方案解析,实现高效数据同步
78 0
|
1月前
|
存储 安全 Linux
C++文件格式深度解析:从底层结构到关键特性
C++文件格式深度解析:从底层结构到关键特性
251 3
C++文件格式深度解析:从底层结构到关键特性
|
1月前
|
存储 关系型数据库 MySQL
|
1月前
|
关系型数据库 MySQL 分布式数据库
PolarDB for MySQL数据库外网连接解析失败的原因可能有以下几点
【2月更文挑战第16天】PolarDB for MySQL数据库外网连接解析失败的原因可能有以下几点
24 1
|
1月前
|
网络协议 数据格式
|
19天前
|
存储 安全 关系型数据库
Mysql 的binlog日志的优缺点
MySQL的binlog(二进制日志)是一个记录数据库更改的日志文件,它包含了所有对数据库执行的更改操作,如INSERT、UPDATE和DELETE等。binlog的主要目的是复制和恢复。以下是binlog日志的优缺点: ### 优点: 1. **数据恢复**:当数据库出现意外故障或数据丢失时,可以利用binlog进行点恢复(point-in-time recovery),将数据恢复到某一特定时间点。 2. **主从复制**:binlog是实现MySQL主从复制功能的核心组件。主服务器将binlog中的事件发送到从服务器,从服务器再重放这些事件,从而实现数据的同步。 3. **审计**:b
|
28天前
|
SQL 关系型数据库 MySQL
mysql的binlog恢复数据
mysql的binlog恢复数据
29 0
|
2月前
|
存储 SQL 安全
浅谈MySQL Binlog
浅谈MySQL Binlog
45 0

推荐镜像

更多