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/mysqlSELinux 或 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);测试慢日志)
