mysql 慢查询开关、日志

本文介绍如何在MySQL中启用慢查询日志记录功能,包括配置步骤、测试方法以及如何调整记录阈值来捕捉执行时间较长的SQL语句。

MySQL给我们提供了一个很好的功能,那就是慢查询!所谓的慢查询就是通过设置来记录超过一定时间的SQL语句!那么如何应用慢查询呢?

1.开启MySQL的慢查询日志功能

默认情况下,MySQL是不会记录超过一定执行时间的SQL语句的。要开启这个功能,我们需要修改MySQL的配置文件:

windows下修改my.ini,(注册表,计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MySQL57 路径下,ImagePath的“数据”--defaults-file 后的文件,就是mysql启动加载的配置文件,截图所示)


Linux下修改my.cnf文件。

在[mysqld]最后增加如下命令:

slow_query_log       #slow_query_log =0表示关闭,slow_query_log =1表示开启,不写参数表示开启

long_query_time = 0.1    #秒

命令查看开启状态 :show variables like '%query%';



2.测试慢查询日志功能

(1)进入MySql控制台,执行如下语句:

mysql> select sleep(2);
+----------+
| sleep(2) |
+----------+
|        0 |
+----------+
1 row in set (2.06 sec)


(2)查看慢查询日志文件,发现新增内容:



3.解释:
(1)slow_query_log 这句是开启记录慢查询功能,slow_query_log=0关闭;slow_query_log=1开启(这个1可以不写)

(2)long_query_time = 1 这句是记录超过1秒的SQL执行语句

(3)那么这个日志文件存放在什么地方呢?

默认是放在mysql的data目录,并且文件名为host_name-slow.log即 主机名-slow.log


(4)如果日志文件不想放在data目录,我们可以通过如下配置指定存放的目录及日志文件名:
slow_query_log_file=file_name
其中file_name就是你的存放日志的目录和文件名,在这里注意有的资料上可能是log-slow-queries=file_name,这个在mysql5.5版已经过时!

4.如何记录低于1s的慢查询记录呢?
MySQL5.21版以前long_query_time 参数的单位是秒,默认值是10。这相当于说最低只能记录执行时间超过 1 秒的查询,怎么记录查询时间超过100毫秒的SQL语句记录呢?在mysql5.21+后版本支持毫秒记录

(1)进入MySql控制台,运行如下sql语句:

set long_query_time=3;


该句是设置记录慢查询超过时间100ms的SQL,记住要重启mysql才能生效!
(2)测试

进入mysql控制台,执行如下sql语句:

select sleep(2); 查看日志,没有慢查询记录

select sleep(5);查看日志,有慢查询记录


-------------------------------------------------------------------------------------------

参考原文:https://www.jb51.net/article/38274.htm

<think> 首先,用户的问题是:“我想查找MySQL慢查询日志的配置方法 请问MySQL慢查询日志的配置方法”。我需要基于提供的引用内容来回答。 回顾引用内容: - 引用[1]:提到了临时和永久配置慢查询日志。 - 引用[2]:提到在配置文件中添加参数log-slow-queries和long_query_time。 - 引用[3]:展示了如何查看慢查询配置的状态(slow_query_log和long_query_time)。 - 引用[4]:提到了日志的存储格式(FILE或TABLE)。 - 引用[5]:详细解释了相关参数:slow_query_log、log-slow-queries(旧版)、slow-query-log-file(新版)、long_query_time。 系统指令要求: - 所有行内数学表达式必须使用$...$格式。 - 独立公式必须使用$$...$$格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识。 - 回答结构清晰,帮助用户逐步解决问题,保证回答真实可靠。 用户的问题是关于MySQL慢查询日志的配置方法。所以,我需要组织一个清晰的逐步指南。 关键步骤: 1. **检查当前配置**:使用SHOW VARIABLES命令查看是否已经开启慢查询日志和相关参数。 2. **开启慢查询日志**: - 临时配置:通过SET GLOBAL命令。 - 永久配置:修改MySQL配置文件(如my.cnf或my.ini)。 3. **设置慢查询时间阈值**。 4. **设置日志输出格式**(FILE或TABLE)。 5. **测试配置**。 从引用中提取信息: - 引用[3]:展示查看配置的命令:`SHOW VARIABLES LIKE 'slow_query%';` 和 `SHOW VARIABLES LIKE 'long_query_time';` - 引用[1]和[5]:临时开启使用`SET GLOBAL slow_query_log = 'ON';`,自定义路径使用`SET GLOBAL slow_query_log_file = '/path/to/slow.log';` - 引用[1]、[2]、[5]:永久配置在配置文件中添加参数(如slow_query_log=1, slow_query_log_file='路径', long_query_time=秒数)。 - 引用[4]:日志输出格式log_output。 参数细节: - slow_query_log:是否开启(1或ON)。 - slow_query_log_file:日志文件路径(新版MySQL)。 - long_query_time:慢查询时间阈值(单位秒)。 - log_output:可以是FILE、TABLE、或两者。 回答结构: 1. **介绍**:简要解释慢查询日志的作用。 2. **查看当前配置**:提供命令。 3. **开启慢查询日志**: - 临时方法。 - 永久方法。 4. **设置慢查询阈值**。 5. **设置日志输出格式**。 6. **测试配置**。 7. **总结**。 生成相关问题: - 在回答结束后,添加“相关问题”部分,基于主题生成问题。 引用标识: - 在回答中引用具体内容时,添加[^n]标识。引用来自提供的[1]到[5],我需要指定正确的引用源。 例如: - 查看配置:[^3] - 开启日志:[^1], [^2] - 参数解释:[^5] 确保回答可靠:基于引用内容,不要添加额外猜测。 最后,用中文回答。 大纲回答: 1. **介绍**:MySQL慢查询日志用于记录执行时间超过指定阈值的SQL语句,帮助优化数据库性能。 2. **查看当前配置**:使用`SHOW VARIABLES LIKE 'slow_query%';` 和 `SHOW VARIABLES LIKE 'long_query_time';` 查看状态。[^3] 3. **开启慢查询日志**: - **临时配置**:使用SQL命令,如`SET GLOBAL slow_query_log = 'ON';` 开启日志,`SET GLOBAL slow_query_log_file = '/path/to/slow.log';` 自定义路径。[^1], [^5] - **永久配置**:编辑MySQL配置文件(如my.cnf),添加参数:`slow_query_log = 1`, `slow_query_log_file = '/path/to/slow.log'`, `long_query_time = 秒数`。[^1], [^2], [^5] 4. **设置慢查询阈值**:使用`SET GLOBAL long_query_time = 秒数;` 临时设置,或在配置文件中永久设置。[^1], [^5] 5. **设置日志输出格式**:使用`SET GLOBAL log_output = 'FILE,TABLE';` 或在配置文件中设置log_output参数。[^4] 6. **测试配置**:执行一个耗时查询,验证日志是否生成。 7. **总结**:配置后重启MySQL服务使永久配置生效。 相关问题: 1. 如何分析MySQL慢查询日志? 2. MySQL慢查询日志的存储位置如何自定义? 3. 慢查询阈值设置多少合适? </think> ### MySQL慢查询日志配置方法 MySQL慢查询日志用于记录执行时间超过指定阈值的SQL语句,帮助数据库管理员识别和优化性能瓶颈。配置方法包括查看当前状态、开启日志、设置阈值和输出格式等步骤。以下是基于可靠引用内容的详细指南: #### 1. **查看当前配置** 首先,检查MySQL是否已开启慢查询日志及相关参数: - 使用SQL命令查看日志开关日志文件路径: ```sql SHOW VARIABLES LIKE 'slow_query%'; ``` 结果类似: ``` +---------------------+------------------------------------+ | Variable_name | Value | +---------------------+------------------------------------+ | slow_query_log | OFF | -- 表示未开启 | slow_query_log_file | /var/lib/mysql/instance-slow.log | -- 默认日志路径 +---------------------+------------------------------------+ ``` - 查看慢查询时间阈值(单位为秒): ```sql SHOW VARIABLES LIKE 'long_query_time'; ``` 结果类似: ``` +-----------------+-----------+ | Variable_name | Value | +-----------------+-----------+ | long_query_time | 10.000000 | -- 默认10秒以上视为慢查询 +-----------------+-----------+ ``` 如果`slow_query_log`为`OFF`,表示日志未开启;如需修改,需手动配置[^3]。 #### 2. **开启慢查询日志** 开启日志分临时配置(重启MySQL后失效)和永久配置(需修改配置文件)。 - **临时配置(通过SQL命令)**: - 开启日志:`SET GLOBAL slow_query_log = 'ON';` - 自定义日志文件路径(可选):`SET GLOBAL slow_query_log_file = '/自定义路径/slow.log';` 例如:`SET GLOBAL slow_query_log_file = '/var/log/mysql/custom_slow.log';` 此方法无需重启MySQL,即时生效,适合临时调试[^1][^5]。 - **永久配置(修改MySQL配置文件)**: 1. 编辑MySQL配置文件(Linux系统通常为`/etc/my.cnf`或`/etc/mysql/my.cnf`,Windows系统为`my.ini`)。 2. 在`[mysqld]`部分添加或修改以下参数: ```ini slow_query_log = 1 -- 1表示开启,0表示关闭 slow_query_log_file = /自定义路径/slow.log -- 指定日志文件路径 long_query_time = 2 -- 设置慢查询时间阈值(单位:秒),例如2秒 ``` 3. 保存文件并重启MySQL服务: - Linux:`sudo systemctl restart mysql` - Windows:通过服务管理器重启MySQL。 此方法确保配置永久生效[^1][^2][^5]。 #### 3. **设置慢查询时间阈值** 阈值定义SQL执行超过多少秒才被记录: - **临时设置**:`SET GLOBAL long_query_time = 秒数;` 例如:`SET GLOBAL long_query_time = 1;` -- 将阈值设为1秒[^1][^5]。 - **永久设置**:在配置文件`my.cnf`或`my.ini`中添加`long_query_time = 秒数`,然后重启MySQL[^3][^5]。 建议初始值设为1-2秒,根据应用负载调整。 #### 4. **设置日志输出格式** 慢查询日志可存储为文件(FILE)或数据库表(TABLE),或两者同时: - **查看当前输出格式**: ```sql SHOW VARIABLES LIKE 'log_output'; ``` 默认通常为`FILE`。 - **修改输出格式**: - 临时设置:`SET GLOBAL log_output = 'FILE,TABLE';` -- 同时输出到文件和数据表`mysql.slow_log`[^4]。 - 永久设置:在配置文件中添加`log_output = 'FILE'`或`log_output = 'TABLE'`,重启MySQL[^4]。 #### 5. **测试配置** 验证配置是否生效: 1. 执行一个耗时超过阈值的SQL语句,例如: ```sql SELECT SLEEP(3); -- 假设long_query_time设为2秒,此查询会触发日志 ``` 2. 检查日志文件(如`/var/lib/mysql/instance-slow.log`)或查询数据表: ```sql SELECT * FROM mysql.slow_log; -- 如果log_output包含TABLE ``` 日志条目应包括SQL语句、执行时间等细节[^1][^4]。 #### 总结 - **关键参数**: - `slow_query_log`:开关日志(ON/OFF)。 - `slow_query_log_file`:日志文件路径(新版MySQL)。 - `long_query_time`:慢查询阈值(秒)。 - `log_output`:输出格式(FILE/TABLE)[^5]。 - **最佳实践**:优先使用永久配置,避免服务重启后丢失设置。配置后监控日志大小,定期归档以防磁盘占满。参考MySQL官方文档或工具如`mysqldumpslow`进行日志分析[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值