【文档】七、Mysql Binlog不同事件类型的事件内容
下面主要讲述了每个类型的事件中的固定和可变部分的数据。
Start_log_event_v3/START_EVENT_V3
这个事件出现在v1或v3的binlog文件的开头部分。对于4.0和4.1版本的Mysql,这个事件只是被写在服务启动后的第一个binlog文件中,到达一定的条件后,会产生新的日志文件,但是新的日志文件中不包含这个事件。对于所有的Mysql5.0及以上版本,每个日志文件都会以FORMAT_DESCRIPTION_EVENT开头。
固定数据部分:
- 2字节,binlog格式版本。对3.23版本为1,4.0和4.1版本为3(对5.0及以上版本,FORMAT_DESCRIPTION_EVENT会替代START_EVENT_V3)
- 50字节,Mysql服务器版本(例如:4.0.14-debug-log),后面跟着0x00。
- 4字节,事件创建的时间戳,精确到秒。(也就是这个文件创建的时间戳)。这个值是多余的,因为头中有相同的字段。
可变数据部分:
- 空
Query_log_event/QUERY_EVENT
固定数据部分:
- 4字节。发起这个语句的线程id,对于临时表来说是必须的。这也有助于DBA知道谁在master上干了啥。
- 4字节。语句执行的时长,单位为秒。只对于DBA的监控有用。
- 1字节。语句执行对应的数据库名称的长度。名称在可变数据部分。
- 2字节。在master执行语句的错误码。错误码定义在include/mysqld_error.h文件中。0表示没有错误。
- 2字节(v1和v3中不存在)。状态变量长度。
可变数据部分:
- 大于等于0的状态变量(v1、v3中不存在)。每个状态变量包含一个字节码,标识存储变量,后面跟着变量的值。
- 默认数据库名
- SQL语句。slave知道变量中其他字段的长度,所以通过减法计算,可以知道语句的长度。
下面的列表提供了每个变量的基本信息:
- Q_FLAGS2_CODE=0。值为一个4字节的位字段。这个变量只会在5.0中写入。
- Q_SQL_MODE_CODE = 1. 他是一个每一位代表SQL_MODE中的一个值,参考最后源码的解释
- Q_CATALOG_CODE = 2. 只在MYSQL 5.0.0到5.0.3使用不考虑
- Q_AUTO_INCREMENT = 3. 2 bytes非负整数用于表示参数auto_increment_increment和auto_increment_offset,这个只会在auto_increment大于1的时候出现
- Q_CHARSET_CODE = 4. 6 bytes用于表示character_set_client,collation_connection和collation_server参数(totally 2+2+2=6 bytes)参考最后源码解释
- Q_TIME_ZONE_CODE = 5. 用于描述time zone信息
- Q_CATALOG_NZ_CODE = 6. 用于描述catalog name,长度占用一个字节,随后这个值为std
- Q_LC_TIME_NAMES_CODE = 7. 2 bytes 非负整数,只有当lc_time_names不设置为en_US的时候使用
- Q_CHARSET_DATABASE_CODE = 8. 2 bytes 非负整数为collation_database系统变量,5.7源码解释说这部分新版本不一定使用。
- Q_TABLE_MAP_FOR_UPDATE_CODE = 9.
Stop_log_event/STOP_EVENT
这个事件会在以下情况下写入:
- master挂掉时会写到binlog中
- slave挂掉时会向relay log中写入或者RESET SLAVE命令执行时。
固定数据部分:
- 空
可变数据部分:
- 空
Rotate_log_event/ROTATE_EVENT
当binlog的文件大小超过阈值时,这个事件会写到binlog的结尾处,指向下一个binlog文件序列。这个事件可以让slave知道下一个binlog文件的名字,以便它去接收。
ROTATE_EVENT是在master本地产生并写入binlog中的。当FLUSH LOGS命令执行时或收到master的ROTATE_EVENT时,slave会写到他的relay log中。
固定数据部分:
- 8字节。下个日志文件的第一个事件的位置。经常包含数字4(表示下个binlog的下个事件从位置4开始)。这个字段在v1中不存在。可以推测,这个值是4。
可变数据部分:
- 下个binlog文件的名字。文件名不是以null结尾的,他的长度是事件长度-固定数据长度。
Intvar_log_event/INTVAR_EVENT
固定数据部分:
- 空
可变数据部分:
- 1字节。表示参数类型,LAST_INSERT_ID_EVENT=1或者INSERT_ID_EVENT=2。
- 8字节。无符号整数,表示LAST_INSERT_ID()调用的值或者AUTO_INCREMENT列的值。
Load_log_event/LOAD_EVENT
用于LOAD DATA INFILE语句中。这块用的比较少,先跳过。
Slave_log_event/SLAVE_EVENT
从没用过这个事件。
Create_file_log_event/CREATE_FILE_EVENT
用于LOAD DATA INFILE语句中。这块用的比较少,先跳过。
Append_block_log_event/APPEND_BLOCK_EVENT
用于LOAD DATA INFILE语句中。这块用的比较少,先跳过。
Execute_log_event/EXEC_LOAD_EVENT
用于LOAD DATA INFILE语句中。这块用的比较少,先跳过。
Delete_file_log_event/DELETE_FILE_EVENT
用于LOAD DATA INFILE语句中。这块用的比较少,先跳过。
Load_log_event/NEW_LOAD_EVENT
用于LOAD DATA INFILE语句中。这块用的比较少,先跳过。
Rand_log_event/RAND_EVENT
RAND()函数会产生一个随机数。这个事件包含两个种子值,用于产生随机数。
固定数据部分:
- 空
可变数据部分:
- 8字节。第一个种子的值。
- 8字节。第二个种子的值。
User_var_log_event/USER_VAR_EVENT
固定数据部分:
- 空
可变数据部分:
- 4字节。用户参数名的长度。
- 用户参数名。
- 1字节。如果参数值是SQL的NULL值,不为零,否则为0.如果这个字节是0,会包含下面的内容。
- 1字节。用户参数类型。STRING_RESULT=0,REAL_RESULT=1,INT_RESULT=2,ROW_RESULT=3,DECIMAL_RESULT=4。
- 4字节。用户参数的编码集代表的数字。
- 4字节。用户参数值的大小。
- 可变大小。对于一个字符串的变量,这是字符串。对于浮点数或整数,这个值是8字节。对于十进制的数,值为一个封包值。
Format_description_log_event/FORMAT_DESCRITION_EVENT
这个在之前讲过很多了,是v4版本的格式描述事件。
固定数据部分:
- 2字节。binlog格式版本,对于5.0及以上版本,是4.
- 50字节。Mysql服务器版本,右边带着0x00。
- 4字节。事件创建的时间戳。多余的参数,和头中的时间戳重复。
- 1字节。头长度。当前的值为19.
- 可变长度。表示所有事件类型的头长度信息的数组。
可变数据部分:
- 空。
Xid_log_event/XID_EVENT
对于支持XA事务的存储引擎来说,一个XID事件是在改变一个或多个表数据的事务提交时产生的。严格的讲,这个事件是在thd->transaction.xid_state.xid.get_my_xid()方法返回不为0时,使用的。
下面举例说明如何产生一个XID事件(无论是否开启innodb_support_xa):
CREATE TABLE t1 (a INT) ENGINE = INNODB;
START TRANSACTION;
INSERT INTO t1 VALUES (1);
COMMIT;
固定数据部分:
- 空
可变数据部分:
- 8字节,XID事务号
Begin_load_query_log_event/BEGIN_LOAD_QUERY_EVENT
用于LOAD DATA INFILE语句中。这块用的比较少,先跳过。
Table_map_log_event/TABLE_MAP_EVENT
从5.1.5开始用于基于行的binlog文件。
固定数据部分:
- 6字节,表id
- 2字节,保留字段。
可变数据部分:
- 1字节,数据库名长度
- 可变大小。数据库名(以null结尾)
- 1字节,表名长度
- 可变大小,表名(以null结尾)
- 封包整数,表中列的数量
- 可变大小,列类型的数组,每一列一个字节。
- 封包整数,元数据块大小
- 可变大小,元数据块
- 可变大小,位字段,表示每一列是否可以为空,每列一比特。对这个字段,对于一个N列的存储大小为INT((N+7)/8)字节。
Write_rows_log_event_old/PRE_GA_WRITE_ROWS_EVENT
用于5.1.5到5.1.17版本的基于行的binlog,Write_rows_log_event/WRITE_ROWS_EVENT的老版本实现。结构和最新的版本类似。
Update_rows_log_event_old/PRE_GA_UPDATE_ROWS_EVENT
用于5.1.5到5.1.17版本的基于行的binlog,Update_rows_log_event/UPDATE_ROWS_EVENT的老版本实现。结构和最新的版本类似。
Delete_rows_log_event_old/PRE_GA_DELETE_ROWS_EVENT
用于5.1.5到5.1.17版本的基于行的binlog,Delete_rows_log_event/DELETE_ROWS_EVENT的老版本实现。结构和最新的版本类似。
Write_rows_log_event/WRITE_ROWS_EVENT
用于5.1.18版本的基于行的binlog。
固定数据部分:
- 6字节,表id
- 2字节,保留字段
可变数据部分:
- 封包整数。表中列的数量
- 可变大小,位字段,表示每一列是否使用到,每列一个比特。对于这个字段,对于一个N列的表需要的存储空间为INT((N+7)/8)字节。
- 可变大小(只用于UPDATE_ROWS_LOG_EVENT)。
- 可变大小,0列或多列的序列,结尾由时间的大小决定,每一列是下面的格式:
- 可变大小。位字段,表示每列的字段是否为空。只有在第二个字段中使用到的变量数据部分才会展示在这里。如果第二个字段包含N个比特,当前字段需要的空间为INT((N+7)/8)字节。
- 可变大小。列映射,包含表中所有列的值。这个字段只会列出使用到的字段。
- 每种值的格式定义在log_event.cc的log_event_value()函数中。
- (仅对UPDATE_ROWS_EVENT)前面的2个字段是重复的。
Update_rows_log_event/UPDATE_ROWS_EVENT
用于5.1.18版本的基于行的binlog。见WRITE_ROWS_EVENT的描述。
Delete_rows_log_event/DELETE_ROWS_EVENT
用于5.1.18版本的基于行的binlog。见WRITE_ROWS_EVENT的描述。
Incident_log_event/INCIDENT_EVENT
固定数据部分:
- 1字节,故障号。
- 1字节,消息长度。
可变数据部分
- 如果有的话,是故障信息
故障号定义在rpl_constant.h中。当前唯一使用到的是INCIDENT_LOST_EVENTS,这个表示在复制过程中可能有丢包,需要重新进行同步。
Heartbeat_log_event/HEARTBEAT_LOG_EVENT
这个事件是由master发给slave的,让slave知道master还活着。这类事件不会再binlog或relay log中出现。他们由master的dump事件线程产生,然后直接发给了slave。slave收到后,校验事件内容后,直接抛弃这个事件,而不会写到relay log中。
固定数据部分
- 空
可变数据部分
- 空
【文档】七、Mysql Binlog不同事件类型的事件内容的更多相关文章
- 部署openstack的官网文档解读mysql的配置文件
部署openstack的官网文档解读mysql的配置文件(使用与ubutu和centos7等系统) author:headsen chen 2017-10-12 16:57:11 个人原创,严禁转载 ...
- javascript 的 事件类型(事件)
事件通常与函数配合使用,这样就可以通过发生的事件来驱动函数执行. 事件是文档或者浏览器窗口中发生的,特定的交互瞬间. 事件是用户或浏览器自身执行的某种动作,如click,load和mouseover都 ...
- 第10章 文档对象模型DOM 10.3 Element类型
Element 类型用于表现 XML或 HTML元素,提供了对元素标签名.子节点及特性的访问. 要访问元素的标签名,可以使用 nodeName 属性,也可以使用 tagName 属性:这两个属性会返回 ...
- PHP实例:使用PHPExcel导入Excel2003文档和Excel2007文档到MySQL数据库中
如果要使用phpExcelReader将Excel 数据导入到mysql 数据库,请读者点击这个文章查看. 使用phpExcelReader将Excel 数据导入到mysql 数据库. 下面我们介绍另 ...
- 第10章 文档对象模型DOM 10.2 Document类型
Document 类型 JavaScript 通过 Document 类型表示文档.在浏览器中, document 对象是 HTMLDocument (继承自 Document 类型)的一个实例,表示 ...
- Abp中SwaggerUI的接口文档添加上传文件参数类型
在使用Swashbuckle上传文件的时候,在接口文档中希望看到上传控件,但是C#中,没有FromBodyAttribute这个特性,所以需要在运行时,修改参数的swagger属性. 首先看下,最 ...
- 事件类型-UI事件、焦点事件
DOM3级事件包括以下几类事件: UI事件:当用户与页面上的元素交互时触发 焦点事件:当元素获得或失去焦点时触发 鼠标事件:当用户通过鼠标在页面上执行操作时触发 滚轮事件:当使用鼠标滚轮时触发 文本事 ...
- JAVA中让Swagger产出更加符合我们诉求的描述文档,按需决定显示或者隐藏指定内容
大家好,又见面啦. 在前一篇文档<JAVA中自定义扩展Swagger的能力,自动生成参数取值含义说明,提升开发效率>中,我们探讨了如何通过自定义注解的方式扩展swagger的能力让Swag ...
- JS中的事件类型和事件属性的基础知识
周末无聊, 这几天又复习了下JS搞基程序设计3, 想着好记性不如浪笔头哇, 要么把这些东西写下来, 这样基础才能更加扎实么么哒, 知道的同学也可以直接过一下,当做复习, 小姨子再也不用担心我的学习啦 ...
随机推荐
- (字符串 键盘转换)Convert QWERTY to Dvorak -- zoj -- 5526
链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5526 Time Limit: 2 Seconds Memor ...
- (二分搜索 )Strange fuction -- HDU -- 2899
链接: http://acm.hdu.edu.cn/showproblem.php?pid=2899 Time Limit: 2000/1000 MS (Java/Others) Memory ...
- POJ1273&&Hdu1532 Drainage Ditches(最大流dinic) 2017-02-11 16:28 54人阅读 评论(0) 收藏
Drainage Ditches Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- Python WebDriver 文件上传(一)
昨天写了Web 文件下载的ui自动化,下载之后,今天就要写web 文件上传的功能了. 当然从折腾了俩小时才上传成功.下面写一下自己操作的步骤 首先网上说的有很多方法 如 input 标签的最好做了,直 ...
- 企业搜索引擎开发之连接器connector(二十三)
我们在前面的文章已经看到,ConnectorCoordinatorImpl类也实现了ChangeHandler接口,本文接下来分析实现该接口的作用 class ConnectorCoordinator ...
- Cockroachdb 一、系统环境
cockroachdb 一.系统环境 **硬件** 最低标准 a 至少3个节点保证集群可用副本 b 每个节点至少1CPU ,2GB RAM.增加资源配置可支持处理更多的数据,负载,高并发,高性能. 最 ...
- 强制TFS用户与计算机(域)用户同步
默认情况下,添加到域AD组中的账户不会立刻同步到TFS中. TFS每小时与域控制器同步一次,将计算机安全组中的账户添加到TFS中. 但是可以通过下面几种方式强制TFS立刻同步域中的账户: 1. 在TF ...
- solrconfig.xml配置详解
solrconfig.xml配置文件主要定义了SOLR的一些处理规则,包括索引数据的存放位置,更新,删除,查询的一些规则配置. 可以在tomcat的安装路径下找到这个文件C:\Program File ...
- PostgreSQL 区域设置
安装PostgreSQL 10.3 windows版本时区域请选择"default locale",安装成功后输入命令: show lc_ctype; show lc_collat ...
- Syncthing源码解析 - 第三方库
1,AudriusButkevicius/cli 网址:https://github.com/AudriusButkevicius/cli 2,bkaradzic/go-lz4 网址:https:// ...