如何开启MySQL慢查询日志功能_配置slow_query_log相关参数

阿浩同学_5193

阿浩同学_5193

2026-05-14

696人浏览

原创

MySQL慢查询日志默认关闭,必须显式启用slow_query_log并配置long_query_time等参数;确认是否启用最可靠方式是执行SELECT @@global.slow_query_log,返回1表示已启用,0表示关闭。

如何开启mysql慢查询日志功能_配置slow_query_log相关参数

MySQL慢查询日志默认是关闭的,必须显式启用并配置 slow_query_log、long_query_time 等参数才能生效;仅设置 slow_query_log_file 不会自动开启日志。

如何确认当前慢查询日志是否已启用

直接查全局变量最可靠,因为配置文件修改后可能未生效或被动态覆盖:

SELECT @@global.slow_query_log;

返回 1 表示已启用,0 表示关闭。同时检查路径和阈值:

SELECT @@global.slow_query_log_file, @@global.long_query_time;
  • @@global.slow_query_log_file 默认可能是空字符串或指向 /var/lib/mysql/hostname-slow.log,但路径不可写会导致日志静默失效
  • @@global.long_query_time 默认是 10.000000 秒,对调试意义不大,建议调低到 1 或 0.5
  • 注意:该变量支持微秒级(如 0.1),但 MySQL 5.7+ 才真正精确到 100ms 级别;低于 0.1 可能被截断

启用 slow_query_log 的两种方式及优先级

运行时动态开启(立即生效,但重启丢失):

MySQL
MySQL

编写正确的MySQL查询,避免字符集、索引和锁方面的常见陷阱。

下载
SET GLOBAL slow_query_log = ON;

永久生效需改配置文件(如 /etc/my.cnf 或 /etc/mysql/mysql.conf.d/mysqld.cnf),在 [mysqld] 段落下写:

slow_query_log = ON<br>slow_query_log_file = /var/log/mysql/mysql-slow.log<br>long_query_time = 1<br>log_queries_not_using_indexes = OFF
  • 配置文件中 slow_query_log 必须写成 ON 或 1,写 TRUE 或空值无效
  • slow_query_log_file 路径目录必须由 mysql 用户可写,否则启动时无报错但日志不生成
  • log_queries_not_using_indexes 默认 OFF,开启后会大量刷日志,建议仅临时排查索引缺失问题
  • 动态 SET 的值优先级高于配置文件——如果配置文件写了 OFF 但你 SET 成 ON,那实际就是 ON

常见失败现象和排查点

明明配置了却看不到慢查询记录?先盯住这几个地方:

  • 执行 SELECT SLEEP(5); 测试,但发现日志没更新 → 检查 long_query_time 是否被会话级变量覆盖:SELECT @@session.long_query_time;,它可能和全局不同
  • 日志文件存在但大小始终为 0 → 查 MySQL 错误日志(error.log),常见报错:Could not use /path/to/slow.log for logging (error 13),即权限问题
  • 用 mysqld --verbose --help | grep "slow" 确认编译时是否启用了慢日志支持(极少见,但 Percona Server 或某些精简版可能裁剪)
  • 从库默认继承主库配置,但 log_slow_slave_statements 需单独开启(MySQL 5.6.11+),否则从库的慢查询不记录

最易忽略的一点:MySQL 8.0+ 默认使用 log_error_services 控制日志模块加载,如果该值里没包含 log_filter_internal 和 log_sink_internal,慢日志可能完全不写入文件——哪怕所有参数都设对了。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

2023.10.12

4523

8

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.27

931

4

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

2024.02.23

1189

5

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

2024.03.06

6481

10

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

2024.03.06

3263

4

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

2024.04.07

6460

11

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

2024.04.29

8841

6

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

2024.04.29

1190

5

sql中删除一列的命令是什么
sql中删除一列的命令是什么

在sql中,使用alter table语句可以删除一列,语法为:alter table table_name drop column column_name。想了解更多sql的相关内容,可以阅读本专题下面的文章。

2024.04.29

1052

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL vs MySQL
PostgreSQL vs MySQL

共1课时 | 191人学习