专栏名称: 数据分析与开发
伯乐在线旗下账号,分享数据库相关技术文章、教程和工具,另外还包括数据库相关的工作。偶尔也谈谈程序员人生 :)
目录
相关文章推荐
数据中心运维管理  ·  巡检必须关注这些指标 ·  15 小时前  
数据中心运维管理  ·  全面解读数据中心液冷散热技术的政策、类型及应用 ·  2 天前  
数据中心运维管理  ·  运营商智算中心建设思路及方案 ·  3 天前  
AustinDatabases  ·  OceanBase ... ·  2 天前  
AustinDatabases  ·  OceanBase ... ·  2 天前  
macrozheng  ·  300 秒到 4 秒,如何将 MySQL ... ·  2 天前  
51好读  ›  专栏  ›  数据分析与开发

MySQL Binlog 事件介绍篇

数据分析与开发  · 公众号  · 数据库  · 2017-11-23 20:30

正文

(点击 上方公众号 ,可快速关注)


来源:zhaohui

codingo.xyz/index.php/2017/11/13/mysql-events/

如有好文章投稿,请点击 → 这里了解详情


前言


上一篇 MySql Binlog初识 ,对Binlog的参数,格式以及个别事件做了详细介绍,但是Binlog事件数量比较多,上篇文章中没有对所有事件进行介绍;本文将对Binlog的事件进行简单说明,必要的时候通过SQL触发相关的事件,以下基于Mysql5.5,5.0以前的版本不考虑。


Binlog事件


1.UNKNOWN_EVENT


此事件从不会被触发,也不会被写入binlog中;发生在当读取binlog时,不能被识别其他任何事件,那被视为UNKNOWN_EVENT。


2.START_EVENT_V3


每个binlog文件开始的时候写入的事件,此事件被用在MySQL3.23 – 4.1,MYSQL5.0以后已经被FORMAT_DESCRIPTION_EVENT取代。


3.QUERY_EVENT


执行更新语句时会生成此事件,包括:create,insert,update,delete;


手动触发:



4.STOP_EVENT


当mysqld停止时生成此事件


可以手动停止mysql,生成的事件:



5.ROTATE_EVENT


当mysqld切换到新的binlog文件生成此事件,切换到新的binlog文件可以通过执行flush logs命令或者binlog文件大于max_binlog_size参数配置的大小;


手动触发:



6.INTVAR_EVENT


当sql语句中使用了AUTO_INCREMENT的字段或者LAST_INSERT_ID()函数;此事件没有被用在binlog_format为ROW模式的情况下。



btest表中的id为AUTO_INCREMENT,所以产生了INTVAR_EVENT


7.LOAD_EVENT


执行LOAD DATA INFILE 语句时产生此事件,在MySQL 3.23版本中使用;


8.SLAVE_EVENT


未使用的


9.CREATE_FILE_EVENT


执行LOAD DATA INFILE 语句时产生此事件,在MySQL4.0和4.1版本中使用;


10.APPEND_BLOCK_EVENT


执行LOAD DATA INFILE 语句时产生此事件,在MySQL4.0版本中使用;


11.EXEC_LOAD_EVENT


执行LOAD DATA INFILE 语句时产生此事件,在MySQL4.0和4.1版本中使用;


12.DELETE_FILE_EVENT


执行LOAD DATA INFILE 语句时产生此事件,在MySQL4.0版本中使用;


13.NEW_LOAD_EVENT


执行LOAD DATA INFILE 语句时产生此事件,在MySQL4.0和4.1版本中使用;


14.RAND_EVENT


执行包含RAND()函数的语句产生此事件,此事件没有被用在binlog_format为ROW模式的情况下;



15.USER_VAR_EVENT


执行包含了用户变量的语句产生此事件,此事件没有被用在binlog_format为ROW模式的情况下;



16.FORMAT_DESCRIPTION_EVENT


描述事件,被写在每个binlog文件的开始位置,用在MySQL5.0以后的版本中,代替了START_EVENT_V3



17.XID_EVENT


支持XA的存储引擎才有,本地测试的数据库存储引擎是innodb,所有上面出现了XID_EVENT;innodb事务提交产生了QUERY_EVENT的BEGIN声明,QUERY_EVENT以及COMMIT声明,


如果是myIsam存储引擎也会有BEGIN和COMMIT声明,只是COMMIT类型不是XID_EVENT;


18.BEGIN_LOAD_QUERY_EVENT和EXECUTE_LOAD_QUERY_EVENT


执行LOAD DATA INFILE 语句时产生此事件,在MySQL5.0版本中使用;


mysql > LOAD DATA INFILE "D:/btest.sql" INTO TABLE test . btest FIELDS TERMINATED BY ',' ;

Query OK , 1 row affected ( 0.11 sec )

Records : 1 Deleted : 0 Skipped : 0 Warnings : 0

mysql > show binlog events in 'bin-log.000003' ;

+----------------+------+--------------------+-----------+-------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |

+----------------+------+--------------------+-----------+-------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

...... |

| bin - log . 000003 | 896 | Query | 1 | 964 | BEGIN |

| bin - log . 000003 | 964 | Begin_load_query | 1 | 1008 | ; file_id = 3 ; block_len = 21 |

| bin - log . 000003 | 1008 | Execute_load_query | 1 | 1237 | use ` test `; LOAD DATA INFILE 'D:/btest.sql' INTO TABLE ` btest ` FIELDS TERMINATED BY ',' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (` id `, ` age







请到「今天看啥」查看全文