未启用慢查询日志将无法捕获执行时间过长的sql语句;需依次确认状态、动态启用、配置文件永久设置、验证写入及用mysqldumpslow分析日志。

如果您尝试定位数据库性能瓶颈,但未启用慢查询日志,则无法捕获执行时间过长的SQL语句。以下是开启MySQL Slow Query Log的具体操作路径:
一、确认当前慢查询日志状态
在修改任何配置前,必须先验证当前slow_query_log是否已启用,避免重复操作或误判。该步骤可防止因参数未生效而遗漏真实慢SQL。
1、登录MySQL命令行客户端,执行:SHOW VARIABLES LIKE 'slow_query_log';
2、检查返回值是否为ON;若为OFF,则需继续后续开启操作。
3、同时执行:SHOW VARIABLES LIKE 'long_query_time';,确认当前阈值是否符合业务敏感度(如生产环境建议设为1.0秒)。
二、动态启用慢查询日志(临时生效)
该方式无需重启MySQL服务,适用于快速验证或紧急排查场景,但所有设置将在实例重启后失效。
1、执行:SET GLOBAL slow_query_log = 'ON';
2、指定日志文件路径(路径需MySQL进程有写权限):SET GLOBAL slow_query_log_file = '/var/log/mysql/mysql-slow.log';
3、设置时间阈值:SET GLOBAL long_query_time = 1;
4、设定输出方式为文件:SET GLOBAL log_output = 'FILE';
5、可选:限制仅记录扫描行数超限的语句,避免日志膨胀:SET GLOBAL min_examined_row_limit = 1000;
三、通过配置文件永久启用(推荐生产环境)
该方式确保参数在MySQL重启后持续有效,是生产部署的标准实践。修改后必须重启服务才能加载新配置。
1、编辑MySQL主配置文件:/etc/mysql/my.cnf(Linux)或my.ini(Windows)。
2、在[mysqld]段落下添加以下内容:
slow_query_log = ON
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 1
log_output = FILE
log_queries_not_using_indexes = OFF
min_examined_row_limit = 1000
3、保存文件后,重启MySQL服务:sudo systemctl restart mysqld(或mysql,依实际服务名而定)。
四、验证日志是否正常写入
配置生效后,必须确认日志文件被创建且有内容写入,否则说明路径权限、参数冲突或SELinux等系统级限制可能阻碍日志落盘。
1、执行:SHOW GLOBAL VARIABLES LIKE 'slow_query_log_file';,获取实际日志路径。
2、检查该路径是否存在且MySQL用户具有写权限:ls -l /var/log/mysql/mysql-slow.log
3、触发一条人为慢查询(如SELECT SLEEP(2);),等待其执行完成。
4、查看日志尾部是否有新增条目:tail -n 5 /var/log/mysql/mysql-slow.log
五、使用mysqldumpslow分析日志内容
原始慢日志为纯文本格式,直接阅读效率极低。mysqldumpslow工具可聚合统计、排序并提取高频慢SQL,大幅提升分析效率。
1、统计执行时间最长的前10条SQL:mysqldumpslow -s t -t 10 /var/log/mysql/mysql-slow.log
2、统计访问次数最多的前5条SQL:mysqldumpslow -s c -t 5 /var/log/mysql/mysql-slow.log
3、筛选包含SELECT关键字的慢查询:mysqldumpslow -g "SELECT" /var/log/mysql/mysql-slow.log
4、按平均查询时间排序并取前3条:mysqldumpslow -s at -t 3 /var/log/mysql/mysql-slow.log











