mysql安装后配置慢查询日志的基本步骤

来源:这里教程网 时间:2026-02-28 20:51:08 作者:

确认 MySQL 是否已启用慢查询日志功能

MySQL 默认通常关闭慢查询日志,需手动开启。先登录 MySQL 执行:

SELECT @@slow_query_log;
返回
OFF
表示未启用。同时检查当前日志路径:
SELECT @@slow_query_log_file;
若为空或指向不可写路径(如
/var/lib/mysql/localhost-slow.log
但目录无写权限),后续会记录失败。

修改 my.cnf 配置并重启服务

my.cnf
[mysqld]
段落添加或修改以下参数:

slow_query_log = ON
:必须显式设为
ON
(部分旧版本只认
1
,建议用字符串)
slow_query_log_file = /var/log/mysql/mysql-slow.log
:指定绝对路径,确保 MySQL 进程用户(如
mysql
)对该路径有写权限
long_query_time = 2.0
:单位秒,设为
0
可记录所有查询(仅调试用,生产慎用)
log_queries_not_using_indexes = OFF
:默认不开启,开启后会额外记录未走索引的查询,可能显著增加日志量

配置完成后,重启服务:

sudo systemctl restart mysql
sudo service mysqld restart
。重启失败常见原因是
slow_query_log_file
路径父目录不存在或权限不足。

运行时动态开启(无需重启)

若无法重启 MySQL,可用 SQL 命令临时启用(但重启后失效):

SET GLOBAL slow_query_log = 'ON';<br>SET GLOBAL long_query_time = 2.0;<br>SET GLOBAL slow_query_log_file = '/tmp/mysql-slow.log';

注意:

SET GLOBAL
不影响已存在的连接,新连接才会生效;且
slow_query_log_file
在某些版本(如 MySQL 5.7)中设为只读变量,此时只能靠配置文件方式修改。

验证日志是否正常写入

执行一条明显超时的查询触发日志,例如:

SELECT SLEEP(3);
然后检查日志文件是否新增内容:
tail -n 10 /var/log/mysql/mysql-slow.log
。若无输出,常见原因包括:

MySQL 用户对日志路径无写权限(用
ls -ld /var/log/mysql
检查)
long_query_time
值设得过大,实际查询未超过阈值
查询被缓存命中(如
query_cache_type=ON
),不进入慢日志流程
使用了
SELECT SQL_NO_CACHE ...
但未真正执行慢操作

慢查询日志本身不记录事务上下文、参数化值或错误堆栈,只记录原始 SQL 文本和执行时间——这意味着敏感信息可能明文落盘,生产环境要注意日志访问控制。

相关推荐