解决MySQL慢日志输出问题

最近在使用MySQL慢日志的过程中发现即使慢SQL的时间已经设置为1秒,但是小于1秒的SQL依然被输出到了慢日志文件中,先说原因:启用了 log_queries_not_using_indexes

如果你在配置中开启了

bash 复制代码
log_queries_not_using_indexes = ON

那么 即使查询执行时间远小于 long_query_time,只要它没走索引,也会被记入慢日志!

解决方法

检查是否启用了该选项:

bash 复制代码
SHOW VARIABLES LIKE 'log_queries_not_using_indexes';

如果返回 ON,而你不希望记录未使用索引但很快的查询,请关闭它:

bash 复制代码
SET GLOBAL log_queries_not_using_indexes = OFF;

并在配置文件中确保:

bash 复制代码
[mysqld]
log_queries_not_using_indexes = 0

变量作用域

如果上面的配置依然无法解决问题,检查long_query_time 设置未全局生效(会话 vs 全局),执行

bash 复制代码
SHOW SESSION VARIABLES LIKE 'long_query_time';

如果不是1(需要设置的时间),执行

bash 复制代码
SET GLOBAL long_query_time = 1;

注意:SET GLOBAL 只影响新建立的连接,不影响已有连接。

查询变量值

经过上面的配置后,查询变量是否生效,执行

bash 复制代码
SHOW GLOBAL VARIABLES LIKE 'long_query_time';
SHOW SESSION VARIABLES LIKE 'long_query_time';
SHOW VARIABLES LIKE 'log_queries_not_using_indexes';
SHOW VARIABLES LIKE 'slow_query_log';
SHOW VARIABLES LIKE 'long_query_time';
SHOW VARIABLES LIKE 'slow_query_log_file';

开启慢日志

1、在线开启

bash 复制代码
-- 尝试设置日志文件路径(MySQL 8.0 支持动态修改,5.7 可能不支持)
SET GLOBAL slow_query_log_file = '/var/log/mysql/mysql-slow.log';

-- 记录超过 1 秒的查询
SET GLOBAL long_query_time = 1;

SET GLOBAL slow_query_log = 'ON';

虽然在线开启了,但 MySQL 重启后会恢复默认。要永久生效,需用到下面的方法。

2、修改配置文件,编辑 my.cnf(通常位于 /etc/my.cnf 或 /etc/mysql/my.cnf),需要重启

bash 复制代码
[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 1
log_queries_not_using_indexes = 0  # 可选:是否记录未使用索引的查询

修改后无需立即重启(需先执行1、在线开启),但下次启动时会沿用配置。

相关推荐
CesareCheung几秒前
SonarQube安装下载及代码覆盖率使用
数据库·代码覆盖率
yejqvow123 分钟前
如何使用可视化查询生成器_免敲代码的多表JOIN配置
jvm·数据库·python
2301_815279524 分钟前
学生党预算有限怎么选HTML函数工具_低配高性价比教程【教程】
jvm·数据库·python
2201_7610405911 分钟前
如何处理SQL中的位运算_掌握BITWISE函数应用场景
jvm·数据库·python
2301_7641505616 分钟前
C#怎么判断进程是否在运行_C#如何管理系统进程【必备】
jvm·数据库·python
justjinji20 分钟前
Django DRF权限怎么加_IsAuthenticated与自定义BasePermission
jvm·数据库·python
橘子编程21 分钟前
PostgreSQL全栈指南:从入门到精通
数据库·postgresql
a95114164222 分钟前
解决 Bookmarklet 中 %0A 换行符导致的跨环境执行失败问题
jvm·数据库·python
解救女汉子23 分钟前
MySQL存储过程运行出错怎么排查_使用DECLARE HANDLER捕获错误
jvm·数据库·python
Absurd58727 分钟前
SQL嵌套查询在多租户系统应用_数据隔离逻辑
jvm·数据库·python