MySQL Binlog事件介绍篇

发表于:2017-11-28 09:36

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:zhaohui    来源:伯乐在线

#
MySQL
分享:
  前言
  上一篇文件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;
  手动触发:
insert into btest values(1,100,'zhaohui');
| bin-log.000001 | 432 | Query       |         1 |         536 | use `test`; insert into btest values(1,100,'zhaohui')                                                                                                                                                          |
| bin-log.000001 | 536 | Xid         |         1 |         563 | COMMIT /* xid=30 */
  4.STOP_EVENT
  当mysqld停止时生成此事件
  可以手动停止mysql,生成的事件:
  | bin-log.000001 | 563 | Stop        |         1 |         582 |
  5.ROTATE_EVENT
  当mysqld切换到新的binlog文件生成此事件,切换到新的binlog文件可以通过执行flush logs命令或者binlog文件大于max_binlog_size参数配置的大小;
  手动触发:
mysql> flush logs;
Query OK, 0 rows affected (0.24 sec)
mysql> show binlog events in 'bin-log.000002';
+----------------+-----+-------------+-----------+-------------+---------------------------------------+
| Log_name       | Pos | Event_type  | Server_id | End_log_pos | Info                                  |
+----------------+-----+-------------+-----------+-------------+---------------------------------------+
| bin-log.000002 |   4 | Format_desc |         1 |         107 | Server ver: 5.5.29-log, Binlog ver: 4 |
| bin-log.000002 | 107 | Rotate      |         1 |         148 | bin-log.000003;pos=4                  |
+----------------+-----+-------------+-----------+-------------+---------------------------------------+
  6.INTVAR_EVENT
  当sql语句中使用了AUTO_INCREMENT的字段或者LAST_INSERT_ID()函数;此事件没有被用在binlog_format为ROW模式的情况下。
insert into btest (age,name)values(100,'zhaohui');
mysql> show binlog events in 'bin-log.000003';
+----------------+-----+-------------+-----------+-------------+---------------------------------------------------------------+
| Log_name       | Pos | Event_type  | Server_id | End_log_pos | Info                                                          |
+----------------+-----+-------------+-----------+-------------+---------------------------------------------------------------+
| bin-log.000003 |   4 | Format_desc |         1 |         107 | Server ver: 5.5.29-log, Binlog ver: 4                         |
| bin-log.000003 | 107 | Query       |         1 |         175 | BEGIN                                                         |
| bin-log.000003 | 175 | Intvar      |         1 |         203 | INSERT_ID=2                                                   |
| bin-log.000003 | 203 | Query       |         1 |         315 | use `test`; insert into btest (age,name)values(100,'zhaohui') |
| bin-log.000003 | 315 | Xid         |         1 |         342 | COMMIT /* xid=32 */                                           |
+----------------+-----+-------------+-----------+-------------+---------------------------------------------------------------+
5 rows in set (0.00 sec)
  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模式的情况下;
mysql> insert into btest (age,name)values(rand(),'zhaohui');
mysql> show binlog events in 'bin-log.000003';
+----------------+-----+-------------+-----------+-------------+------------------------------------------------------------------+
| Log_name       | Pos | Event_type  | Server_id | End_log_pos | Info                                                             |
+----------------+-----+-------------+-----------+-------------+------------------------------------------------------------------+
......
| bin-log.000003 | 342 | Query       |         1 |         410 | BEGIN                                                            |
| bin-log.000003 | 410 | Intvar      |         1 |         438 | INSERT_ID=3                                                      |
| bin-log.000003 | 438 | RAND        |         1 |         473 | rand_seed1=223769196,rand_seed2=1013907192                       |
| bin-log.000003 | 473 | Query       |         1 |         588 | use `test`; insert into btest (age,name)values(rand(),'zhaohui') |
| bin-log.000003 | 588 | Xid         |         1 |         615 | COMMIT /* xid=48 */                                              |
+----------------+-----+-------------+-----------+-------------+------------------------------------------------------------------+
10 rows in set (0.00 sec)
  15.USER_VAR_EVENT
  执行包含了用户变量的语句产生此事件,此事件没有被用在binlog_format为ROW模式的情况下;
mysql> set @age=50;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into btest (age,name)values(@age,'zhaohui');
Query OK, 1 row affected (0.12 sec)
mysql> show binlog events in 'bin-log.000003';
+----------------+-----+-------------+-----------+-------------+------------------------------------------------------------------+
| Log_name       | Pos | Event_type  | Server_id | End_log_pos | Info                                                             |
+----------------+-----+-------------+-----------+-------------+------------------------------------------------------------------+
......                                          |
| bin-log.000003 | 615 | Query       |         1 |         683 | BEGIN                                                            |
| bin-log.000003 | 683 | Intvar      |         1 |         711 | INSERT_ID=4                                                      |
| bin-log.000003 | 711 | User var    |         1 |         756 | @`age`=50                                                        |
| bin-log.000003 | 756 | Query       |         1 |         869 | use `test`; insert into btest (age,name)values(@age,'zhaohui')   |
| bin-log.000003 | 869 | Xid         |         1 |         896 | COMMIT /* xid=70 */                                              |
+----------------+-----+-------------+-----------+-------------+------------------------------------------------------------------+
15 rows in set (0.00 sec)
  16.FORMAT_DESCRIPTION_EVENT
  描述事件,被写在每个binlog文件的开始位置,用在MySQL5.0以后的版本中,代替了START_EVENT_V3
mysql> show binlog events in 'bin-log.000003';
+----------------+-----+-------------+-----------+-------------+---------------------------------------------------------------+
| Log_name       | Pos | Event_type  | Server_id | End_log_pos | Info                                                          |
+----------------+-----+-------------+-----------+-------------+---------------------------------------------------------------+
| bin-log.000003 |   4 | Format_desc |         1 |         107 | Server ver: 5.5.29-log, Binlog ver: 4                         |
......
  17.XID_EVENT
  支持XA的存储引擎才有,本地测试数据库存储引擎是innodb,所有上面出现了XID_EVENT;innodb事务提交产生了QUERY_EVENT的BEGIN声明,QUERY_EVENT以及COMMIT声明,
  如果是myIsam存储引擎也会有BEGIN和COMMIT声明,只是COMMIT类型不是XID_EVENT;
21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号