Linux环境下MySQL日志管理指南
MySQL日志是数据库运行状态的“黑匣子”,用于故障排查、性能优化、安全审计及数据恢复。Linux系统中,MySQL日志主要分为错误日志、二进制日志、慢查询日志、通用查询日志四大类,以下从配置、查看、清理三方面详细说明管理方法。
datadir目录(如/var/lib/mysql/),文件名为hostname.err。hostname-bin.xxxxxx。long_query_time阈值(默认10秒)的查询,用于识别性能瓶颈(如未优化的SQL语句)。默认关闭,文件名为slow-query.log。general.log。通过my.cnf(或my.ini)文件配置,关键参数:
[mysqld]
log_error = /var/log/mysql/mysql-error.log # 指定日志路径(需提前创建目录并授权)
修改后重启MySQL生效:systemctl restart mysql。
[mysqld]
log-bin = /var/log/mysql/mysql-bin # 开启二进制日志,指定路径
server-id = 1 # 唯一实例ID(主从复制必需)
max_binlog_size = 128M # 单个日志文件最大大小(超过则轮转)
expire_logs_days = 7 # 自动删除7天前的日志(节省空间)
重启MySQL后生效,可通过SHOW VARIABLES LIKE 'log_bin%';验证配置。
[mysqld]
slow_query_log = ON # 开启慢查询日志
slow_query_log_file = /var/log/mysql/slow.log # 日志文件路径
long_query_time = 2 # 慢查询阈值(秒)
log_queries_not_using_indexes = ON # 记录未使用索引的查询(可选)
重启MySQL后生效,可通过SHOW VARIABLES LIKE 'slow_query%';查看当前设置。
[mysqld]
general_log = ON # 开启通用查询日志
general_log_file = /var/log/mysql/general.log # 日志文件路径
注意:通用日志会记录所有查询,生产环境建议仅在调试时开启,避免影响性能。
错误日志
使用tail命令实时查看最新错误:
tail -f /var/log/mysql/mysql-error.log
或通过MySQL命令查看路径:
SHOW VARIABLES LIKE 'log_error';
二进制日志
查看所有二进制日志文件:
SHOW BINARY LOGS;
解析日志内容(需安装mysqlbinlog工具):
mysqlbinlog /var/log/mysql/mysql-bin.000001
可添加--start-datetime和--stop-datetime参数查看指定时间段的日志。
慢查询日志
查看慢查询日志路径:
SHOW VARIABLES LIKE 'slow_query_log_file';
使用less或tail查看内容:
less /var/log/mysql/slow.log
通用查询日志
查看通用查询日志路径:
SHOW VARIABLES LIKE 'general_log_file';
使用tail查看实时日志:
tail -f /var/log/mysql/general.log
rm /var/log/mysql/mysql-error.log
mysqladmin flush-logs
RESET MASTER;PURGE BINARY LOGS TO 'mysql-bin.000005';(保留000005之后的日志)使用logrotate工具实现日志自动轮转,步骤如下:
/etc/logrotate.d/mysql:/var/log/mysql/*.log {
daily # 每天轮转
rotate 7 # 保留7份
compress # 压缩旧日志
missingok # 文件不存在不报错
notifempty # 空文件不轮转
sharedscripts # 所有日志处理完再执行脚本
postrotate
systemctl reload mysql > /dev/null 2>&1 || true
endscript
}
logrotate -vf /etc/logrotate.d/mysql(强制立即轮转)。mysql用户,避免其他用户修改:chown -R mysql:mysql /var/log/mysql/
du -sh /var/log/mysql/),避免占用过多空间。long_query_time=1)。