要开启和配置 MySQL 慢查询日志,主要是通过修改 MySQL 配置文件或在运行时动态设置相关参数。慢查询日志用于记录执行时间超过指定阈值的 SQL 语句,便于后续性能分析和优化。
1. 确认慢查询日志功能是否开启
登录 MySQL 执行以下命令查看当前慢查询日志状态:
SHOW VARIABLES LIKE 'slow_query_log';SHOW VARIABLES LIKE 'long_query_time';
SHOW VARIABLES LIKE 'slow_query_log_file';
返回结果中:
slow_query_log:表示慢查询日志是否开启(ON/OFF) long_query_time:定义“慢”的标准,单位为秒(如 2.0 表示超过 2 秒) slow_query_log_file:慢查询日志文件的存储路径2. 开启并配置慢查询日志
有两种方式:修改配置文件永久生效,或使用命令临时启用。
方法一:修改配置文件(推荐)
编辑 MySQL 配置文件 my.cnf 或 my.ini(Linux 通常位于 /etc/my.cnf,Windows 在安装目录下):
[mysqld]slow_query_log = ON
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 2
log_queries_not_using_indexes = ON
说明:
slow_query_log = ON:启用慢查询日志 slow_query_log_file:指定日志文件路径,确保目录存在且 MySQL 有写入权限 long_query_time:设置慢查询阈值,可设为 0.5、1、2 等 log_queries_not_using_indexes = ON:记录未使用索引的查询,即使执行很快也记录(可选)方法二:动态设置(临时生效)
如果不想重启 MySQL,可以在线开启:
SET GLOBAL slow_query_log = 'ON';SET GLOBAL long_query_time = 2;
SET GLOBAL slow_query_log_file = '/var/log/mysql/mysql-slow.log';
SET GLOBAL log_queries_not_using_indexes = 'ON';
注意:动态设置在 MySQL 重启后会失效,需配合配置文件使用。
3. 检查日志文件权限与重启服务
确保日志目录可写,例如 Linux 下:
sudo mkdir -p /var/log/mysqlsudo chown mysql:mysql /var/log/mysql
sudo chmod 755 /var/log/mysql
修改配置后重启 MySQL 服务:
sudo systemctl restart mysql4. 查看和分析慢查询日志
日志文件内容示例:
# Time: 2024-04-05T10:23:45.123456Z# User@Host: root[root] @ localhost []
# Query_time: 3.200000 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 100000
SET timestamp=1712305425;
SELECT * FROM users WHERE name = 'test';
关键字段:
Query_time:查询耗时 Rows_examined:扫描行数 Rows_sent:返回行数可用 mysqldumpslow 工具分析日志:
mysqldumpslow /var/log/mysql/mysql-slow.log常用参数:
-s t:按查询时间排序 -t 10:显示前 10 条例如:
mysqldumpslow -s t -t 10 /var/log/mysql/mysql-slow.log基本上就这些。配置完成后,定期检查慢查询日志能有效发现性能瓶颈。
