数据库管理员 DBA 会更关注数据库日志文件,因为提供很多有用的信息,方便数据库问题定位,从全局角度对数据库进行优化。
MySQL 数据库日志文件记录了影响数据库的各种类型的活动;日志文件包括错误日志,二进制日志,慢查询日志,和查询日志。
1、错误日志文件 error log
记录了数据库的启动,运行,和关闭的过程,包括错误信息,警告信息以及正确的信息,存放位置通过如下命令定位:
show variables like 'log_error'
可以使用文本编辑器打开此文件,有些警告[Warning] 信息可以帮助数据库优化。
如果数据库启动失败,首先查看此日志文件进行问题定位。
2、 二进制日志 binlog
查看是否开启:
show variables like 'log_bin';
log_bin OFF
默认未开启,所以以下查询会报错:
show master status;
show binary logs;
如何开启?需要在my.ini配置文件中将 log_bin 注释取消,并添加文件名,例如
log_bin = binlog
然后重启mysql服务即可,在data目录下会出现两个新的文件,
binlog.000001 和 binlog.index
再次查询:
show master status:
binlog.000001 120
show binary logs:
binlog.000001 120
因为为二进制文件,需要使用mysqlbinlog查看文件内容:
首先写入一条数据:
insert into book values(2,'book2');
使用如下语句查看文件内容:
show binlog events in 'binlog.000001'
binlog.000001 4 Format_desc 1 120 Server ver: 5.6.25-log, Binlog ver: 4
binlog.000001 120 Query 1 213 BEGIN
binlog.000001 213 Query 1 335 use `springcloud`; insert into book values(2,'book2')
binlog.000001 335 Xid 1 366 COMMIT /* xid=43 */
3、慢查询日志文件 slow query log
用于定位问题 SQL,方便进行 SQL 优化。数据库默认的数值为10s,参数为 long_query_time。
show variables like 'long_query_time'
慢查询日志默认未开启:
show variables like '%slow%',显示如下信息:
log_slow_admin_statements OFF
log_slow_slave_statements OFF
slow_launch_time 2
slow_query_log OFF
slow_query_log_file D:\mysql-5.6.25-winx64\data\DESKTOP-7TFD4O0-slow.log
不使用索引的查询是否记录到慢查询日志中:
-- ON 表示开启
show variables like '%log_queries_not_using_indexes%'
-- 每分钟运行记录到慢查询日志文件中的没有使用索引的SQL 语句,0表示没有限制
-- 如果此参数开启,日志文件会记录越来越多的没有使用索引的 SQL语句,文件会越来越大
show variables like '%log_throttle_queries_not_using_indexes%'
开启慢查询日志:
set global slow_query_log=on;
查询:
show variables like '%slow_query_log%'
结果显示:
slow_query_log ON
slow_query_log_file D:\mysql-5.6.25-winx64\data\DESKTOP-7TFD4O0-slow.log
将慢查询日志记录到数据库表:
set global log_output='TABLE';
查询:
show variables like '%log_output%';
log_output TABLE
创建一个慢查询:
select sleep(12)
从慢查询日志表查询记录信息:
select * from mysql.slow_log;
2021-04-11 10:27:09 root[root] @ localhost [127.0.0.1] 00:00:12 00:00:00 1 0 springcloud 0 0 0 select sleep(12) 478
统计慢查询记录:
show global status like '%Slow_queries%'
4、查询日志 log
查询日志记录所有对数据库的请求的信息,默认是未开启的,如果开启,对数据库性能影响蛮大的,使用场景也比较少,在此只是记录下使用方法。
show variables like '%general_log%'
-- 未开启查询日志记录
general_log OFF
-- 查询日志文件位置
general_log_file D:\mysql-5.6.25-winx64\data\DESKTOP-7TFD4O0.log
-- 开启MySQL查询日志
set global general_log = on;
支持写入文件或写入数据表两种形式,通过参数log_output控制,默认为file
show variables like 'log_output'
log_output FILE
备注:
general_log、 general_log_file、 log_output都是动态参数,可以随时动态修改
设置为写入数据库表中
set global log_output='table';
再次查询:
show variables like 'log_output'
log_output TABLE
查询日志信息:
select * from mysql.general_log