MySQL慢日志输出问题及快速解决方法

 更新时间:2025年11月29日 09:17:45   作者:angushine  
文章介绍了MySQL慢日志输出问题的原因和解决方法,慢日志记录了执行时间超过设定阈值的SQL语句,但有时即使查询时间小于阈值,未使用索引的查询也会被记录,感兴趣的朋友跟随小编一起看看吧

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

log_queries_not_using_indexes = ON

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

解决方法

检查是否启用了该选项:

SHOW VARIABLES LIKE 'log_queries_not_using_indexes';

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

SET GLOBAL log_queries_not_using_indexes = OFF;

并在配置文件中确保:

[mysqld]
log_queries_not_using_indexes = 0

变量作用域

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

SHOW SESSION VARIABLES LIKE 'long_query_time';

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

SET GLOBAL long_query_time = 1;

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

查询变量值

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

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、在线开启

-- 尝试设置日志文件路径(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),需要重启

[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、在线开启),但下次启动时会沿用配置。

到此这篇关于解决MySQL慢日志输出问题的文章就介绍到这了,更多相关mysql慢日志输出内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • mysql could not be resolved: Name or service not known

    mysql could not be resolved: Name or service not known

    今天查看mysql日志的时候发现[Warning] IP address '10.0.0.220' could not be resolved: Name or service not known,原来是mysql DNS反解:skip-name-resolve的原因,屏蔽一下就可以了
    2015-08-08
  • 详解MySQL单实例和多实例启动脚本

    详解MySQL单实例和多实例启动脚本

    这篇文章主要介绍了MySQL单实例和多实例启动脚本,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-08-08
  • MYSQL学习的一大重点之Mysql内置函数

    MYSQL学习的一大重点之Mysql内置函数

    MySQL 数据库管理系统提供了大量的内置函数,这些函数可以帮助你执行各种数据库操作,包括数据检索、数据处理、字符串处理、数学运算、日期和时间处理等,下面是一些常用的 MySQL 内置函数类别及其简要说明
    2026-07-07
  • MySQL导入sql脚本错误:2006 解决方法

    MySQL导入sql脚本错误:2006 解决方法

    本文给大家分享的是在使用mysql导入数据的时候,提示脚本错误2006 MySQL server has gone away的解决方法,非常实用,有需要的小伙伴,可以参考下。
    2015-07-07
  • Mysql中的join操作

    Mysql中的join操作

    这篇文章主要介绍了Mysql join操作的相关资料,需要的朋友可以参考下
    2017-05-05
  • Mysql实现定时清空一张表的旧数据并保留几条数据(推荐)

    Mysql实现定时清空一张表的旧数据并保留几条数据(推荐)

    这篇文章主要介绍了Mysql实现定时清空一张表的旧数据并保留几条数据,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • MySQL出现"Lock wait timeout exceeded"错误的原因是什么详解

    MySQL出现"Lock wait timeout exceeded"错误的原因是什么详解

    这篇文章主要给大家介绍了关于MySQL出现"Lock wait timeout exceeded"错误的原因是什么的相关资料,工作中同事遇到此异常,查找解决问题时,收集整理形成此篇文章,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • 验证Mysql中联合索引的最左匹配原则详情

    验证Mysql中联合索引的最左匹配原则详情

    这篇文章主要介绍了验证Mysql中联合索引的最左匹配原则详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • MySQL复制问题的三个参数分析

    MySQL复制问题的三个参数分析

    这篇文章主要介绍了MySQL复制问题的三个参数分析,帮助大家更好的理解和学习使用MySQL数据库,感兴趣的朋友可以了解下
    2021-04-04
  • MYSQL设置字段自动获取当前时间的sql语句

    MYSQL设置字段自动获取当前时间的sql语句

    整理数据库数据,看到好多表都有加create_time和 update_time字段,来记录数据插入的时间和更新时间,但是时间插入是通过代码来维护的,这篇文章主要介绍了MYSQL设置字段自动获取当前时间,需要的朋友可以参考下
    2023-07-07

最新评论