MySQL日志不记录需按顺序排查:先查日志开关状态(SHOW VARIABLES),再核对配置文件参数,接着检查磁盘空间、文件权限及SELinux/AppArmor限制,最后验证是否缓存未刷盘或被logrotate轮转。

MySQL日志突然不记录,大概率是配置被修改、服务重启后失效,或磁盘空间/权限等运行时问题。先别急着重装,按顺序排查几个关键点就能快速定位。
检查日志开关是否实际启用
MySQL的错误日志、慢查询日志、通用查询日志默认并不全开,且仅靠配置文件设置还不够,部分日志需运行时动态开启。执行以下命令确认当前状态:
-
错误日志(error log):通常总是开启的,查变量:
SHOW VARIABLES LIKE 'log_error';看路径是否存在、是否可写 -
慢查询日志(slow query log):
SHOW VARIABLES LIKE 'slow_query_log';返回 OFF 就说明没开;再看slow_query_log_file路径是否合理 -
通用查询日志(general log):
SHOW VARIABLES LIKE 'general_log';同样要为 ON;general_log_file路径也需检查
核对配置文件中的日志相关参数
编辑 MySQL 配置文件(通常是 /etc/my.cnf 或 /etc/mysql/mysql.conf.d/mysqld.cnf),在 [mysqld] 段检查以下几项是否正确设置:
-
log_error = /var/log/mysql/error.log(路径存在且 mysql 用户有写权限) -
slow_query_log = ON(不是 1 或 true,必须是 ON) slow_query_log_file = /var/log/mysql/mysql-slow.log-
long_query_time = 2(数值合理,太大会导致“看似没记录”) -
general_log = ON(慎开,生产环境一般关闭) general_log_file = /var/log/mysql/general.log
改完记得 sudo systemctl restart mysql(或 mysqld),并确认服务成功启动。
检查磁盘空间与文件权限
日志写不进去,90% 是因为:
-
磁盘满:运行
df -h查看日志所在分区使用率,超 95% 就可能触发 MySQL 自动停写 -
目录/文件权限不对:确保日志路径父目录属主是
mysql:mysql,且有写权限:sudo chown -R mysql:mysql /var/log/mysql,sudo chmod 755 /var/log/mysql -
SELinux 或 AppArmor 限制(尤其 CentOS/RHEL 或 Ubuntu):临时禁用测试:
sudo setenforce 0或sudo aa-disable /usr/sbin/mysqld,若恢复记录则需调整策略
验证日志是否真“不记”,还是“没刷盘”或“被轮转”
有时日志其实写了,但你看不见:
- MySQL 默认会缓冲日志输出,特别是 general_log;可执行
FLUSH LOGS;强制刷盘,再操作触发日志(如慢查询、INSERT)观察 - 检查日志文件是否被 logrotate 清空或重命名了:
ls -lt /var/log/mysql/*.log* - 用
tail -f实时跟踪日志文件,同时执行一条明确会记日志的操作(如SELECT SLEEP(3);测试慢日志)










