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
常见坑
- slow_query_log 是 OFF,日志文件根本不生成,查路径也没用。
- long_query_time 默认 10 秒,普通慢语句记录不到,排查期调小。
- 日志在 datadir 下,不知道 datadir 时用 SHOW VARIABLES LIKE 'datadir'。
- 只临时开启,重启 MySQL 后失效,长期用要写 my.cnf。
- 慢日志持续增长占满磁盘,需配合 logrotate 切割。
- binlog 和 slow log 混淆,binlog 是复制恢复用,不是慢分析日志。
- 从库默认不记录慢查询,需要单独配置。
总结
定位慢日志三句话:SHOW VARIABLES 看开关和路径,SET GLOBAL 临时开启,my.cnf 永久生效。拿到日志后用 mysqldumpslow 聚合分析高频慢 SQL。排查结束记得把 long_query_time 调回合理值,避免日志过量。
遇到问题加QQ23979811 协助处理