在 Ubuntu 上开启 MySQL 慢查询日志,一般有两种方式:临时生效(重启失效)和永久生效(修改配置文件)。下面以常见版本(MySQL 5.7 / 8.0)为例说明。
systemctl status mysql
登录 MySQL:
mysql -u root -p
执行:
-- 开启慢查询日志
SET GLOBAL slow_query_log = 'ON';
-- 慢查询日志文件位置
SET GLOBAL slow_query_log_file = '/var/log/mysql/mysql-slow.log';
-- 超过多少秒算慢查询(如 1 秒)
SET GLOBAL long_query_time = 1;
-- 记录未使用索引的查询(可选)
SET GLOBAL log_queries_not_using_indexes = 'ON';
查看是否生效:
SHOW VARIABLES LIKE 'slow_query_log';
SHOW VARIABLES LIKE 'long_query_time';
⚠️ 重启 MySQL 后失效
编辑 MySQL 配置文件:
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
(有些版本是 /etc/mysql/my.cnf)
在 [mysqld] 下添加:
[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 1
log_queries_not_using_indexes = 1
保存后重启 MySQL:
sudo systemctl restart mysql
sudo touch /var/log/mysql/mysql-slow.log
sudo chown mysql:mysql /var/log/mysql/mysql-slow.log
sudo tail -f /var/log/mysql/mysql-slow.log
或使用官方工具分析:
sudo mysqldumpslow /var/log/mysql/mysql-slow.log
| 参数 | 说明 |
|---|---|
| slow_query_log | 是否开启慢查询 |
| slow_query_log_file | 日志路径 |
| long_query_time | 慢查询阈值(秒) |
| log_queries_not_using_indexes | 记录未走索引的 SQL |
如果你告诉我 MySQL 版本 或 Ubuntu 版本,我可以给你更精确的配置示例。