mysql 51 bin_MySQL Binlog事件介绍篇

前言

上一篇文件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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值