MySQL开启慢查询日志需配置slow_query_log、long_query_time和slow_query_log_file三个参数,临时生效用SET GLOBAL动态设置,永久生效须写入my.cnf并重启服务。

MySQL开启慢查询日志,核心是配置三个关键参数:是否启用(slow_query_log)、超时阈值(long_query_time)、日志存放位置(slow_query_log_file)。临时生效可动态设置,但要永久生效必须写入配置文件并重启服务。
检查当前慢查询状态
登录 MySQL 后执行:
SHOW VARIABLES LIKE 'slow_query%';
SHOW VARIABLES LIKE 'long_query_time';
若 slow_query_log 值为 OFF,说明未开启;默认 long_query_time 通常是 10 秒,对生产环境偏高,建议调低到 1 或 0.5 秒。
临时开启(会话/全局生效,重启失效)
在 MySQL 客户端中逐条执行:
- SET GLOBAL slow_query_log = 'ON';
- SET GLOBAL long_query_time = 1;(单位:秒,支持小数如 0.2)
- SET GLOBAL slow_query_log_file = '/var/log/mysql/slow.log';(路径需 MySQL 进程有写权限)
执行后立即生效,无需重启。可通过 SHOW GLOBAL STATUS LIKE 'Slow_queries'; 查看已记录的慢查询次数。
永久生效(推荐用于生产环境)
编辑 MySQL 配置文件(Linux 通常为 /etc/my.cnf 或 /etc/mysql/mysql.conf.d/mysqld.cnf;Windows 为 my.ini),在 [mysqld] 段落下添加:
[mysqld]
slow_query_log = ON
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
log_output = FILE # 可选:设为 TABLE 则写入 mysql.slow_log 表
保存后重启 MySQL:
systemctl restart mysqld(CentOS/RHEL)或
sudo service mysql restart(Ubuntu/Debian)
额外建议:捕获无索引查询
很多性能问题源于没走索引,可一并开启记录:
- 动态开启:SET GLOBAL log_queries_not_using_indexes = 'ON';
- 配置文件中加:log_queries_not_using_indexes = 1
注意:即使字段有索引,若数据量极小,优化器可能仍选择全表扫描,这类也会被记录,需结合 EXPLAIN 判断是否真有问题。










