解析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
相关文章
|
9天前
|
存储 安全 关系型数据库
Mysql 的binlog日志的优缺点
MySQL的binlog(二进制日志)是一个记录数据库更改的日志文件,它包含了所有对数据库执行的更改操作,如INSERT、UPDATE和DELETE等。binlog的主要目的是复制和恢复。以下是binlog日志的优缺点: ### 优点: 1. **数据恢复**:当数据库出现意外故障或数据丢失时,可以利用binlog进行点恢复(point-in-time recovery),将数据恢复到某一特定时间点。 2. **主从复制**:binlog是实现MySQL主从复制功能的核心组件。主服务器将binlog中的事件发送到从服务器,从服务器再重放这些事件,从而实现数据的同步。 3. **审计**:b
|
18天前
|
SQL 关系型数据库 MySQL
mysql的binlog恢复数据
mysql的binlog恢复数据
19 0
|
19天前
|
SQL 关系型数据库 MySQL
MySQL数据库,可以使用二进制日志(binary log)进行时间点恢复
对于MySQL数据库,可以使用二进制日志(binary log)进行时间点恢复。二进制日志是MySQL中记录所有数据库更改操作的日志文件。要进行时间点恢复,您需要执行以下步骤: 1. 确保MySQL配置文件中启用了二进制日志功能。在配置文件(通常是my.cnf或my.ini)中找到以下行,并确保没有被注释掉: Copy code log_bin = /path/to/binary/log/file 2. 在需要进行恢复的时间点之前创建一个数据库备份。这将作为恢复的基准。 3. 找到您要恢复到的时间点的二进制日志文件和位置。可以通过执行以下命令来查看当前的二进制日志文件和位
|
5天前
|
存储 关系型数据库 MySQL
MySQL引擎对决:深入解析MyISAM和InnoDB的区别
MySQL引擎对决:深入解析MyISAM和InnoDB的区别
14 0
|
18天前
|
canal 消息中间件 关系型数据库
【分布式技术专题】「分布式技术架构」MySQL数据同步到Elasticsearch之N种方案解析,实现高效数据同步
【分布式技术专题】「分布式技术架构」MySQL数据同步到Elasticsearch之N种方案解析,实现高效数据同步
66 0
|
26天前
|
存储 安全 Linux
C++文件格式深度解析:从底层结构到关键特性
C++文件格式深度解析:从底层结构到关键特性
243 3
C++文件格式深度解析:从底层结构到关键特性
|
28天前
|
存储 关系型数据库 MySQL
|
1月前
|
网络协议 数据格式
|
1月前
|
XML 数据格式
AXios接受XML格式的webservice并解析成数据格式
AXios接受XML格式的webservice并解析成数据格式
25 2
|
8天前
|
关系型数据库 MySQL 数据库
mysql卸载、下载、安装(window版本)
mysql卸载、下载、安装(window版本)

推荐镜像

更多