mysqlbinlog命令详解 Part 2 -MySQL 事件类型
时间:2022-07-23
本文章向大家介绍mysqlbinlog命令详解 Part 2 -MySQL 事件类型,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
此次实验的环境如下
- MySQL 5.7.25
- Redhat 6.10
- binlog模式采用row模式
这个专题的内容为mysqlbinlog命令的详解
mysqlbinlog是MySQL中用来处理binlog的工具
为了更好的讲解后面的内容,这节先说下MySQL常用的一些事件类型
1. 事件和事件代码的关联表
下面为事件和事件代码的关联表
enum Log_event_type {
UNKNOWN_EVENT= 0,
START_EVENT_V3= 1,
QUERY_EVENT= 2,
STOP_EVENT= 3,
ROTATE_EVENT= 4,
INTVAR_EVENT= 5,
LOAD_EVENT= 6,
SLAVE_EVENT= 7,
CREATE_FILE_EVENT= 8,
APPEND_BLOCK_EVENT= 9,
EXEC_LOAD_EVENT= 10,
DELETE_FILE_EVENT= 11,
NEW_LOAD_EVENT= 12,
RAND_EVENT= 13,
USER_VAR_EVENT= 14,
FORMAT_DESCRIPTION_EVENT= 15,
XID_EVENT= 16,
BEGIN_LOAD_QUERY_EVENT= 17,
EXECUTE_LOAD_QUERY_EVENT= 18,
TABLE_MAP_EVENT = 19,
PRE_GA_WRITE_ROWS_EVENT = 20,
PRE_GA_UPDATE_ROWS_EVENT = 21,
PRE_GA_DELETE_ROWS_EVENT = 22,
WRITE_ROWS_EVENT = 23,
UPDATE_ROWS_EVENT = 24,
DELETE_ROWS_EVENT = 25,
INCIDENT_EVENT= 26,
HEARTBEAT_LOG_EVENT= 27,
IGNORABLE_LOG_EVENT= 28,
ROWS_QUERY_LOG_EVENT= 29,
WRITE_ROWS_EVENT = 30,
UPDATE_ROWS_EVENT = 31,
DELETE_ROWS_EVENT = 32,
GTID_LOG_EVENT= 33,
ANONYMOUS_GTID_LOG_EVENT= 34,
PREVIOUS_GTIDS_LOG_EVENT= 35,
ENUM_END_EVENT
/* end marker */
};
常见事件列表
一些事件是没有类型代码的,因为他是其他事件的基类,如Log_event ,这些并不会写在日志文件中
一些事件可能被分配多个类型代码,如Load_log_event 代表LOAD_EVENT 和NEW_LOAD_EVENT 两种事件
所有的类型请参见官方文档
3. 常见事件意义
这节介绍一些常见的事件的意义
全部内容请参见官方文档
- UNKNOWN_EVENT 这个事件不应该发生,他永远不会被写入日志文件中 如果日志文件中的事件无法被识别为其他的事件,则 被看成是UNKNOWN_EVENT
- START_EVENT_V3 该事件是写在每个二进制文件开头的一个描述性的事件,从MySQL 5.0 开始被 FORMAT_DESCRIPTION_EVENT事件取代
- QUERY_EVENT 在如下情况下写入 1、事务开始时,在binlog中有一个QUERY_EVENT类型的BEGIN。 2、在statement格式中,具体执行的SQL语句会保存在该事件中。 3、对于ROW格式的binlog,所有DDL操作以文本的形式记录在该事件中。
- STOP_EVENT 当数据库停止时写入
- ROTATE_EVENT 在数据库日志切换到另一个日志文件时写入 如执行flush logsh或者当前日志文件超过了 max_binlog_size设置的最大值时
- INTVAR_EVENT 该事件在语句使用了AUTO_INCREMENT 列或者LAST_INSERT_ID()函数时写入 它只会在QUERY_EVENT事件前写入,并且在基于行的日志记录中不会出现 该事件有2个子类型 INSERT_ID_EVENT及LAST_INSERT_ID_EVENT
- LOAD_EVENT MySQL 3.23中,在使用了LOAD DATA INFILE 语句时写入,即从外部文件导入数据
- SLAVE_EVENT 该事件还未被使用
- RAND_EVENT 每次使用 RAND() 函数时写入,它会在QUERY_EVENT事件前写入,并且在基于行的日志记录中不会出现
- USER_VAR_EVENT 每次语句使用了用户变量后写入,它会在QUERY_EVENT事件前写入,并且在基于行的日志记录中不会出现
- FORMAT_DESCRIPTION_EVENT 该事件在日志文件的开头写入,MySQL 5.0之前使用的是START_EVENT_V3事件
- XID_EVENT 在使用了事务后写入该事件
- TABLE_MAP_EVENT 基于行的日志记录生效,该事件在每个行事件之前, 将表的定义映射成一个数字,如主从中表的结构不一样该事件使主从得以可行
- BEGIN_LOAD_QUERY_EVENT MySQL 5.0 时使用了LOAD DATA INFILE语句后写入
- WRITE_ROWS_EVENT 对单张表进行插入时写入,基于行的日志记录时生效
- UPDATE_ROWS_EVENT 对单张表进行更新时写入,基于行的日志记录时生效
- DELETE_ROWS_EVENT 对单张表进行删除时写入,基于行的日志记录时生效
- INCIDENT_EVENT 该事件在主库中发生异常,提醒从库主库可能发生会导致数据不一致的事件
- HEARTBEAT_LOG_EVENT 由主库发出以让从库知道主库存活,不会记录在日志中
- Git -- 分支与合并 (命令行+可视化工具p4merge)
- java之如何实现调用启动一个可执行文件,exe
- file类之目录
- 理解Go语言Web编程(上)
- 理解Go语言Web编程(下)
- 呆呆的io流输入输出的一些基础
- 机器人 Go 语言库:Gobot
- poj------2406 Power Strings
- 使用Django基础模板搭建自己的知识库
- Go 语言编写的缓存及缓存过滤库:groupcache
- 异常处理机制
- 【实战】重现DeepMind星际争霸强化学习算法
- javasE学习笔记:关键字super的使用
- uva------Help is needed for Dexter(11384)
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解
- 在 Linux 上锁定虚拟控制台会话的实现办法
- php遍历目录下文件并按修改时间排序操作示例
- laravel框架学习记录之表单操作详解
- php基于协程实现异步的方法分析
- Laravel框架实现多数据库连接操作详解
- Laravel5.1 框架Request请求操作常见用法实例分析
- 用python实现学生管理系统
- PHP CURL实现模拟登陆并上传文件操作示例
- python定义类的简单用法
- Linux yum 命令安装mysql8.0的教程详解
- 基于Python实现简单学生管理系统
- php 实现svg转化png格式的方法分析
- Python如何合并多个字典或映射
- 用Python 爬取猫眼电影数据分析《无名之辈》
- Python获取浏览器窗口句柄过程解析