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)。