MySQL二进制日志和慢日志的开启查询
通过日志可以帮助管理员发现曾经发生过的事情
本文学习四种日志:
- 错误日志
- 二进制日志
- 查询日志
- 慢查询日志
错误日志
错误日志是MySQL最重要的日志之一,记录了MySQL启动和停止,以及服务器在运行过程中发生的严重错误的相关信息。当数据库无法使用时,建议首先看这个日志。
日志默认是开启的,默认目录在/var/log/,默认日志文件名是mysqld.log
我的手动更改了,可以查看一下位置show variables like '%log_error;'

日志查看
tail /data/mysql/mysqld.log

二进制日志
二进制日志(BINLOG)记录了所有的DDL(数据定义语言)和DML(数据操纵语言),但是不包括数据查询(select,show)
作用:①灾难时的数据恢复 ②MySQL的主从复制。
在MySQL8是默认开启的。
二进制日志的参数
show variables like '%log_bin%';

解释
log_bin
: 开启/关闭二进制日志ON/OFFlog_bin_basename:
是binlog日志的基本文件名(日志的最终目录)log_bin_index:
是binlog文件的素引文件,这个文件管理了所有的binlog文件的目录log_bin_trust_function_creators:
限制存储过程,前面我们已经讲过了,这是因为二进制日志的一个重要功能是用于主从复制,而存储函数有可能导致主从的数据不一致。所以当开启二进制日志后,需要限制存储函数的创建、修改、调用log_bin_use_v1_row_events此只读系统变量已弃用
。ON表示使用版本1二进制日志行,OFF表示使用版本2二进制日志行(MySQL5.6的默认值为2)。sql_log_bin
表示当前会话是否记录 bin log,默认值on
日志格式 | 含义 |
---|---|
STATEMENT | 基于SQL语句的日志记录,记录的是SQL语句,对数据进行的修改的SQL都会记录在日志中 |
ROW | 基于行的日志记录,记录的是每一行的变化(默认) |
MIXED | 混合上面两种模式,默认使用STATEMENT,特殊情况使用ROW |
查看MySQL使用的日志格式show variables like '%binlog_format%';

binlog查看
binlog是无法直接查看的,需要使用mysqlbinlog
,具体语法:
1 | mysqlbinlog [参数] logfilename |
参数选项:
-d 指定数据库名称,只列出指定数据库相关操作
-o 忽略掉日志中的前n行命令
-v 将行事件重构为SQL语句
-w 将行事件重构为SQL语句,并且注释

例如,查看binlog.0005
1 | mysqlbinlog binlog.000005 |

日志删除
对于业务繁忙的业务系统,每天生成的binlog数据巨大,如果长时间不删除,会占用很大的磁盘空间,下面几种方式删除
指令 | 含义 |
---|---|
reset master | 删除全部binlog日志 |
purge master logs to ‘binlog.XXXXXX’ | 删除xxxxxx编号之前的日志 |
purge master logs before ‘yyyy-mm-dd hh24:mi:ss’ | 删除日志为“yyyy-mm-dd hh24:mi:ss”之前产生的所有日志 |
查询日志
查询日志包含了客户端所有操作语句,而二进制日志是不包括的。
默认情况下是不开启的
查看是否开启show variables like '%general%';

开启这日志
修改MySQL配置文件/etc/my.cnf(默认)
1 | # 开启查询日志文件,0关闭,1开启 |
重启service mysqld restart
查看日志tail -f /data/mysql/mysql_query.log
慢查询日志
慢查询日志记录了所有执行参数超过long_query_time设置值并且扫描记录不小于min_examined_row_limit的所有SQL语句,默认没有开启。long_query_time默认是10S,最小为0,进度可以到微秒。
开启日志
vim /etc/my.cnf
1 | # 在这里追加 |
重启service mysqld restart
查看日志tail -f /data/mysql/localhost-slow.log
默认不会记录管理语句,也不会记录不使用索引进行查找的查询,可以在my.cnf修改
1 | # 记录执行慢的管理语句 |