MySQL慢查询日志是数据库性能优化过程中非常实用的功能,它可以记录所有执行时间超过设定阈值的SQL语句,方便我们后续分析查询瓶颈,优化低效的数据库操作。不管是开发环境还是生产环境,在MySQL安装完成后合理配置慢查询日志,都能为后续的数据库维护提供很大帮助。

慢查询日志相关核心参数说明
在配置慢查询日志之前,我们需要先了解几个核心的系统变量,这些变量决定了慢查询日志的行为:
- slow_query_log:控制慢查询日志是否开启,取值为1时开启,0时关闭。
- slow_query_log_file:指定慢查询日志的存储路径和文件名,默认会存放在MySQL的数据目录下。
- long_query_time:设置慢查询的时间阈值,单位是秒,默认值是10秒,执行时间超过该值的SQL会被记录到慢查询日志中。
- log_queries_not_using_indexes:设置为1时,即使SQL执行时间没有超过long_query_time,只要没有使用索引也会被记录到慢查询日志中,方便排查索引缺失问题。
临时配置慢查询日志(重启后失效)
如果只是临时需要开启慢查询日志做测试,不需要永久生效,可以直接通过SQL命令修改系统变量,这种方式不需要重启MySQL服务,操作如下:
步骤1:查看当前慢查询配置状态
先执行以下命令查看当前慢查询相关的参数配置:
-- 查看慢查询日志是否开启 SHOW VARIABLES LIKE 'slow_query_log'; -- 查看慢查询时间阈值 SHOW VARIABLES LIKE 'long_query_time'; -- 查看慢查询日志文件路径 SHOW VARIABLES LIKE 'slow_query_log_file'; -- 查看未使用索引的查询是否记录 SHOW VARIABLES LIKE 'log_queries_not_using_indexes';
步骤2:开启慢查询日志并设置参数
执行以下命令开启慢查询日志,设置时间阈值为2秒,同时开启未使用索引的查询记录:
-- 开启慢查询日志 SET GLOBAL slow_query_log = 1; -- 设置慢查询时间阈值为2秒,注意设置后需要重新连接会话才能生效 SET GLOBAL long_query_time = 2; -- 开启未使用索引的查询记录 SET GLOBAL log_queries_not_using_indexes = 1; -- 可以自定义慢查询日志文件路径,需要确保MySQL进程有写入权限 SET GLOBAL slow_query_log_file = '/var/lib/mysql/slow_query.log';
永久配置慢查询日志(重启后生效)
如果希望慢查询日志在MySQL重启后依然保持配置,需要修改MySQL的配置文件,不同系统的配置文件路径不同:Linux系统一般是/etc/my.cnf或者/etc/mysql/my.cnf,Windows系统一般是MySQL安装目录下的my.ini文件。
步骤1:编辑配置文件
在配置文件的[mysqld]区块下添加以下配置内容:
[mysqld] # 开启慢查询日志 slow_query_log = 1 # 慢查询日志文件路径,根据自己实际路径调整 slow_query_log_file = /var/lib/mysql/slow_query.log # 慢查询时间阈值,单位秒 long_query_time = 2 # 记录未使用索引的查询 log_queries_not_using_indexes = 1
步骤2:重启MySQL服务
修改完配置文件后,需要重启MySQL服务让配置生效,不同系统的重启命令如下:
- Linux系统(systemd管理):
systemctl restart mysqld - Linux系统(sysvinit管理):
service mysqld restart - Windows系统:在服务管理器中重启MySQL服务,或者执行
net stop mysql && net start mysql
验证慢查询日志是否生效
配置完成后,我们可以通过执行一个故意延迟的SQL来验证慢查询日志是否正常工作:
-- 执行一个睡眠3秒的SQL,超过我们设置的2秒阈值 SELECT SLEEP(3);
然后查看慢查询日志文件,应该能看到这条SQL的记录:
# 查看慢查询日志内容,路径替换为自己的实际路径 cat /var/lib/mysql/slow_query.log
慢查询日志分析技巧
慢查询日志如果内容较多,手动查看效率很低,可以使用MySQL自带的mysqldumpslow工具来分析,常见用法如下:
- 查看最慢的10条查询:
mysqldumpslow -s t -t 10 /var/lib/mysql/slow_query.log - 查看查询次数最多的10条查询:
mysqldumpslow -s c -t 10 /var/lib/mysql/slow_query.log - 查看包含某个表的慢查询:
mysqldumpslow -g "user_table" /var/lib/mysql/slow_query.log
另外需要注意,慢查询日志会占用一定的磁盘空间,生产环境建议定期清理旧的日志文件,或者设置日志轮转,避免磁盘被占满。
mysql慢查询日志慢查询配置MySQL性能优化SQL优化修改时间:2026-06-10 03:09:26