开启慢查询日志需在my.cnf中配置slow_query_log=1、指定slow_query_log_file路径并设置long_query_time阈值,重启MySQL服务后生效;常见问题包括配置文件路径错误、权限不足、未重启服务、阈值过高或log_output设置不当;合理设置long_query_time应基于业务SLA和逐步调优,避免日志过大可通过logrotate轮转、定期分析pt-query-digest报告、优化SQL和索引来解决。
在MySQL中开启慢查询日志,核心就是修改配置文件
my.cnf
my.ini
slow_query_log
slow_query_log_file
long_query_time
要让MySQL开始记录那些执行缓慢的SQL语句,我们需要直接编辑其配置文件。通常,这个文件在Linux系统上可能位于
/etc/my.cnf
/etc/mysql/my.cnf
/usr/local/mysql/etc/my.cnf
mysql --help | grep "Default options"
my.ini
找到配置文件后,在
[mysqld]
[mysqld] # 开启慢查询日志功能 slow_query_log = 1 # 指定慢查询日志文件的路径和名称 # 确保MySQL用户对这个路径有写入权限 slow_query_log_file = /var/log/mysql/mysql-slow.log # 定义慢查询的时间阈值,单位是秒。 # 比如这里设置为1秒,意味着所有执行时间超过1秒的查询都会被记录。 # 可以是小数,比如0.1秒。 long_query_time = 1 # 如果你希望慢查询日志也记录不使用索引的查询,可以加上这个(MySQL 5.6.5+) # log_queries_not_using_indexes = 1 # 默认情况下日志输出到文件,但如果被修改过,确保是FILE # log_output = FILE
配置完成后,最关键的一步是重启MySQL服务,这样配置才能生效。在Linux上,通常是执行
sudo systemctl restart mysql
sudo service mysql restart
重启后,你可以执行一个故意慢的查询来测试,比如
SELECT SLEEP(2);
这问题我遇到过不止一次,尤其是在生产环境,发现日志没动静的时候,心里是真有点慌的。排查起来,通常有几个方向:
第一,配置文件路径不对。你可能改了一个
my.cnf
SHOW VARIABLES LIKE 'datadir';
/etc
ps -ef | grep mysql
--defaults-file
第二,文件或目录权限问题。这是最常见的坑!你指定的
slow_query_log_file
mysql
mysql
sudo mkdir -p /var/log/mysql && sudo chown -R mysql:mysql /var/log/mysql
/var/log/audit/audit.log
dmesg
第三,MySQL服务没有重启。修改了配置文件,但没有重启MySQL服务,配置是不会生效的。这就像你换了件衣服,但没出门,别人当然不知道你换了。
第四,long_query_time
第五,log_output
FILE
NONE
TABLE
SHOW VARIABLES LIKE 'log_output';
最后,检查MySQL的错误日志(通常在数据目录下,以
.err
设置
long_query_time
我的经验是,没有一个放之四海而皆准的数字。这取决于你的业务特性、服务器配置以及对响应时间的要求。
从业务SLA(服务等级协议)出发:如果你的业务要求页面加载时间在2秒内,那么你可能需要将
long_query_time
逐步调整法:如果你是第一次开启慢查询,或者对系统性能不甚了解,可以先设置一个相对保守的值,比如
long_query_time = 5
考虑查询频率:有些查询单次执行很快,但被高频调用,累计起来的资源消耗非常可观。慢查询日志主要针对单次执行耗时。对于高频但单次不慢的查询,需要结合其他监控工具(如
pt-query-digest
特殊情况:
0.1
0
long_query_time
记住,
long_query_time
慢查询日志文件随着时间的推移,确实会变得非常庞大,这不仅占用磁盘空间,也使得分析变得困难。管理好它们是日常运维的重要一环。
首先,日志轮转(Log Rotation)是必备的。在Linux系统上,
logrotate
logrotate
logrotate
/etc/logrotate.d/mysql
其次,定期分析和清理。日志存在的价值在于分析。使用
pt-query-digest
logrotate
再者,从根本上减少慢查询。这是治本的方法。如果你的慢查询日志总是很快就变得巨大,那说明你的数据库里有很多需要优化的查询。这可能涉及到:
JOIN
最后,如果是在一个非常繁忙的系统上,并且你发现慢查询日志的生成本身就对性能有一定影响(尽管通常很小),你可以在分析高峰期过后,或者在已知没有重要慢查询需要捕获的维护时段,暂时通过
SET GLOBAL slow_query_log = OFF;
以上就是MySQL如何开启慢查询日志功能(5.7与8.0版本参数配置)的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号