本博客原文请参考:http://zhuqiuhui.space/Blogs/2017/03/mysql-log-configuration-2.html
接着文章MySQL日志文件配置的分析,本文主要对mysql中的二进制日志文件怎么查看进行展开。
一、mysql日志文件配置
常用的mysql日志类型有:
- 错误日志:log-error
- 查询日志:general_log_file
- 慢查询日志:slow_query_log_file
- 二进制日志:log-bin
在my.cnf的详细配置如下图,注意变量的弃用问题!![]()
二、查看mysql二进制日志的两种方式
- 使用show binlog events方式可以获取当前以及指定binlog的日志,不适宜提取大量日志。
- 使用mysqlbinlog命令行提取(适宜批量提取日志)。
2.1 mysqlbinlog命令提取
该命令的查看比较容易,一般形式如下:有可能以后显示的内容出现乱码,这主要针对于 “ binlog_format=row ”的模式时候,直接显示为base64编码格式,要生成常规的sql语句,可使用如下命令即可显示出正常语句了。mysqlbinlog mysql-bin.000001
有时也可以把二进制文件转化为utf8格式的文件来直接查看,可使用命令:mysqlbinlog --base64-output=decode-rows -v mysql-bin.000001
mysqlbinlog --database=mybatisTest --set-charset=utf8 mysql-bin.000001 > test.sql
2.2 show binlog events方式
1. 查看所有二进制日志文件及其大小:
show binary logs;
2. 查看当前二进制日志文件:
show master status;
3. 默认查看当第一个二进制日志文件:
![]()
4.查看指定二进制日志文件(输出格式按行)
![]()
备注:若出现info列中没有sql语句的情况,该模式可能处于“基于行的复制(row-based replication, RBR)”模式中,可设置命令:
binlog_rows_query_log_events (5.6.2引入)只作用于RBR格式,默认不启用,如果启用,会把用户写直的原生态DML操作记录到binlog中。set binlog_rows_query_log_events=ON;
5.查看指定二进制日志文件(输出格式按列,其中\G参数,将输出按列显示)
![]()
6.MySQL binlog操作事件类型
(1)QUERY_EVENT:以文本的形式来记录事务的操作,QUERY_EVENT类型的事件通常在以下几种情况下使用:
——事务开始时,执行的BEGIN操作
——STATEMENT格式中的DML操作
——ROW格式中的DDL操作
(2)FORMAT_DESCRIPTION_EVENT:binlog文件中的第一个事件,该事件只会在binlog中出现一次,mysql会根据FORMAT_DESCRIPTION_EVENT的定义来解析其它事件,它通常指定了MySQL Server的版本、binlog的版本、binlog文件的创建时间。
(3)ROWS_EVENT:对于ROW格式的binlog,所有的DML语句都是记录在ROWS_EVENT中,ROWS_EVENT分为三种:WRITE_ROWS_EVENT、UPDATE_ROWS_EVENT、DELETE_ROWS_EVENT,分别对应insert,update和delete操作。
——对于insert操作,WRITE_ROWS_EVENT包含了要插入的数据
——对于update操作,UPDATE_ROWS_EVENT不仅包含了修改后的数据,还包含了修改前的值
——对于delete操作,仅仅需要指定删除的主键(在没有主键的情况下,会给定所有列)
备注:对于QUERY_EVENT事件,是以文本形式记录DML操作的,而对于ROWS_EVENT事件,并不是文本形式,所以在通过mysqlbinlog查看基于ROW格式的binlog时,需要指定-vv --base64-output=decode-rows。
(4)XID_EVENT:该事件记录了该事务的ID,在MySQL进行崩溃恢复时,根据事务在binlog中的提交情况来决定是否提交存储引擎中状态为prepared的事务
(5)STOP_EVENT:当MySQL数据库停止时,会在当前的binlog末尾添加一个STOP_EVENT事件表示数据库停止。
(6)GTID_LOG_EVENT:在启用GTID模式后,MySQL实际上为每个事务都分配了个GTID,事物是全局唯一的,且一个事务对应一个GTID,一个GTID在一个服务器上只执行一次,避免重复执行导致数据混乱或者主从不一致。
(7)Table_map_log_event:它保存了本次DML操作对应的table_id、数据库名、表名、字段数、字段类型等。
7.清空二进制日志文件
reset master;
8.关闭二进制日志文件
彻底禁用MySQL日志,修改/etc/my.cnf文件,找到log-bin相关选项,将其注释掉即可。