MySQL查看慢查询日志位置slow_log在哪 MySQL

前言

数据库变慢想分析慢 SQL,却不知道慢查询日志文件存在哪里,也不确定是否开启。MySQL 的慢日志路径由 slow_query_log_file 参数控制,是否记录由 slow_query_log 和 long_query_time 决定。本文讲解查看参数、确认开关、定位日志文件路径、查看日志内容的完整命令,适配 Linux 下 MySQL5.7 与 MySQL8.0。

操作步骤

1. 登录 MySQL

mysql -uroot -p

2. 查看慢日志相关参数

SHOW VARIABLES LIKE 'slow_query_log%';
SHOW VARIABLES LIKE 'long_query_time';

slow_query_log 为 ON 表示已开启;slow_query_log_file 显示日志文件路径。

3. 临时开启慢查询日志(无需重启)

SET GLOBAL slow_query_log = ON;
SET GLOBAL long_query_time = 1;

long_query_time=1 表示超过 1 秒的语句记录,生产可按需要设 0.5。

4. 找到日志文件在系统中的位置

ls -lh /var/lib/mysql/*.log

常见默认路径:/var/lib/mysql/主机名-slow.log,也可直接用参数返回的路径。

5. 实时查看慢日志内容

tail -f /var/lib/mysql/你的主机名-slow.log

6. 永久开启(写入配置)

编辑 my.cnf:

[mysqld]
slow_query_log = ON
slow_query_log_file = /var/lib/mysql/slow.log
long_query_time = 1

重启生效:

systemctl restart mysqld

常见坑

  1. slow_query_log 是 OFF,日志文件根本不生成,查路径也没用。
  2. long_query_time 默认 10 秒,普通慢语句记录不到,排查期调小。
  3. 日志在 datadir 下,不知道 datadir 时用 SHOW VARIABLES LIKE 'datadir'。
  4. 只临时开启,重启 MySQL 后失效,长期用要写 my.cnf。
  5. 慢日志持续增长占满磁盘,需配合 logrotate 切割。
  6. binlog 和 slow log 混淆,binlog 是复制恢复用,不是慢分析日志。
  7. 从库默认不记录慢查询,需要单独配置。

总结

定位慢日志三句话:SHOW VARIABLES 看开关和路径,SET GLOBAL 临时开启,my.cnf 永久生效。拿到日志后用 mysqldumpslow 聚合分析高频慢 SQL。排查结束记得把 long_query_time 调回合理值,避免日志过量。

遇到问题加QQ23979811 协助处理


emer 发布于  2026-11-14 07:11 
'); })();