MySQL慢查询日志是定位性能瓶颈最直接有效的手段之一,开启后能记录执行时间超过指定阈值的SQL语句,便于后续分析优化。
确认当前慢查询日志状态
登录MySQL后,先检查是否已启用及配置参数:
SHOW VARIABLES LIKE 'slow_query_log'; —— 查看是否开启(ON/OFF) SHOW VARIABLES LIKE 'long_query_time'; —— 查看慢查询阈值(单位:秒,默认10秒) SHOW VARIABLES LIKE 'slow_query_log_file'; —— 查看日志文件路径临时开启(重启失效)
适合测试或紧急排查,无需修改配置文件:
SET GLOBAL slow_query_log = ON; SET GLOBAL long_query_time = 1;(建议设为1秒便于捕获更多可疑SQL) SET GLOBAL log_output = 'FILE';(可选,支持 FILE 或 TABLE;TABLE方式需配合 mysql.slow_log 表)永久开启(推荐生产环境使用)
编辑MySQL配置文件(如 /etc/my.cnf 或 /etc/mysql/mysql.conf.d/mysqld.cnf),在 [mysqld] 段落下添加:
slow_query_log = ON slow_query_log_file = /var/log/mysql/mysql-slow.log(确保目录存在且MySQL用户有写权限) long_query_time = 1 log_queries_not_using_indexes = OFF(按需开启,避免日志爆炸;若要分析索引缺失问题可设为ON)保存后重启MySQL服务:systemctl restart mysqld(或 service mysql restart)
验证与查看日志
执行一条明显慢的SQL(如 SELECT SLEEP(2);),再检查日志文件是否生成对应记录:
tail -f /var/log/mysql/mysql-slow.log 用 mysqldumpslow 工具汇总分析(如 mysqldumpslow -s at -t 10 /var/log/mysql/mysql-slow.log)