确认慢查询日志是否开启应查 slow_query_log 变量值:SHOW VARIABLES LIKE 'slow_query_log'; 返回 ON 才算真开启;若为 OFF,即使配置文件写了也需 SET GLOBAL slow_query_log = ON 或重启生效。

如何确认慢查询日志当前是否开启
直接查 slow_query_log 变量值最可靠,别依赖配置文件有没有写——因为运行时可能被动态关闭过:
SHOW VARIABLES LIKE 'slow_query_log';返回
ON 才算真开启;若为 OFF,即使 my.cnf 里写了 slow_query_log = 1,也得重启或手动开。
用 SET GLOBAL 开启慢查询日志(临时生效)
线上环境调试常用这个方式,避免重启 MySQL:
SET GLOBAL slow_query_log = ON;注意:
- 需要有
SUPER权限 - 该设置只对新连接生效,已存在的连接不受影响
- MySQL 重启后失效,必须写入配置文件才持久
- 开启后默认日志路径是
datadir下的hostname-slow.log,可通过slow_query_log_file指定
调整 long_query_time 的实际效果与陷阱
long_query_time 控制“多慢才算慢”,单位是秒,支持小数(如 0.5 表示 500ms):
SET GLOBAL long_query_time = 1.0;但要注意:
- 该变量是会话级变量,
SET GLOBAL修改后,**已有连接不会自动继承**,它们仍按旧值判断——必须重连或显式执行SET SESSION long_query_time = 1.0 - MySQL 5.7+ 默认值是
10.0,太宽松,生产环境建议设为1.0或更低 - 若查询含锁等待(如等行锁),等待时间不计入
long_query_time计算,只算执行时间
配置文件中正确启用并指定路径(永久生效)
编辑 my.cnf(通常是 /etc/my.cnf 或 /etc/mysql/my.cnf),在 [mysqld] 段落下加:
slow_query_log = 1<br>slow_query_log_file = /var/log/mysql/mysql-slow.log<br>long_query_time = 1.0<br>log_queries_not_using_indexes = 0然后重启:
sudo systemctl restart mysql关键点:
-
slow_query_log = 1必须是数字1或0,不能写ON/OFF(配置文件不认字符串) - 确保
mysql用户对日志路径有写权限,否则启动失败且无明显报错 -
log_queries_not_using_indexes建议关掉(设为0),否则日志爆炸,尤其表没建好索引时
最常被忽略的是:开了日志却没检查磁盘空间和轮转策略。慢日志不自动压缩、不自动清理,跑一周可能占几十 GB。上线前务必配好 logrotate 或用 mysqldumpslow 定期分析归档。


















