必须同时配置slow_query_log=1、slow_query_log_file和long_query_time三个参数,缺一不可;需确认配置文件路径、使用绝对路径、确保mysql用户有写权限,并重启后通过sql变量和文件存在性双重验证。

必须在 [mysqld] 段里同时写对三个参数,缺一不可,否则日志根本不会生成——MySQL 不报错,只静默失败。
确认 MySQL 实际加载的配置文件路径
别猜,直接查。执行:
mysql --help | grep "Default options"
输出类似 Default options are read from the following files in the given order: /etc/my.cnf /etc/mysql/my.cnf,按顺序检查第一个存在的文件。常见情况:
- 宝塔用户:通常是
/www/server/mysql/etc/my.cnf - Docker 容器:可能是
/etc/mysql/conf.d/mysql.cnf - Windows:用
mysql --help | findstr "my.ini",常见路径是C:\ProgramData\MySQL\MySQL Server 5.7\my.ini
改错文件等于白配。
在 [mysqld] 段下写全三项关键参数
只写 slow_query_log = 1 不够,必须配套 slow_query_log_file 和 long_query_time。注意拼写和值类型:
-
slow_query_log = 1(配置文件里必须是数字1或0,不能写ON) -
slow_query_log_file = /var/log/mysql/mysql-slow.log(Linux 必须是绝对路径;Windows 用双反斜杠或正斜杠,如C:/ProgramData/MySQL/MySQL Server 5.7/Data/slow.log) -
long_query_time = 1.0(MySQL 5.7.21+ 才真正支持小数;5.7.0–5.7.20 设0.1会退化为0,导致所有查询进日志)
常见陷阱:slow_query_log_file 路径目录需 MySQL 进程用户(通常是 mysql)有写权限;/tmp 或 NFS 挂载点慎用,前者易被清理,后者可能引发锁等待。
重启后验证是否真实生效
重启不是终点,静默失败太常见。分两步验证:
- 查变量值:
mysql -e "SELECT @@slow_query_log, @@slow_query_log_file, @@long_query_time;"—— 若@@slow_query_log_file返回空字符串,说明slow_query_log_file没配或路径无效 - 查文件落地:
ls -l /var/log/mysql/mysql-slow.log(Linux)或直接打开 Windows 下指定的.log文件 —— 如果文件不存在或大小为 0,大概率是权限问题或路径没写对
特别注意:slow_query_log_file 写相对路径(如 ./slow.log)会被 MySQL 忽略,最终日志仍写到默认位置(如 /var/lib/mysql/hostname-slow.log),你可能完全不知道它在哪。
最易被忽略的是权限和路径组合:即使配置全对、重启成功,只要 /var/log/mysql 目录属主不是 mysql 用户,日志就写不进去——而且没有任何错误提示。











