mysql安装后配置慢查询日志的基本步骤

1次阅读

mysql 默认关闭慢查询日志,需通过配置文件或动态命令启用;检查状态用 select @@slow_query_log,设置 slow_query_log=on、指定可写 slow_query_log_file 路径及 long_query_time 阈值,重启或 set global 生效,最后用 select sleep(3) 验证日志写入。

mysql安装后配置慢查询日志的基本步骤

确认 MySQL 是否已启用慢查询日志功能

MySQL 默认通常关闭慢查询日志,需手动开启。先登录 MySQL 执行:

SELECT @@slow_query_log;

返回 OFF 表示未启用。同时检查当前日志路径:

SELECT @@slow_query_log_file;

若为空或指向不可写路径(如 /var/lib/mysql/localhost-slow.log 但目录无写权限),后续会记录失败。

修改 my.cnf 配置并重启服务

my.cnf[mysqld] 段落添加或修改以下参数:

  • slow_query_log = ON:必须显式设为 ON(部分旧版本只认 1,建议用字符串
  • slow_query_log_file = /var/log/mysql/mysql-slow.log:指定绝对路径,确保 MySQL 进程用户(如 mysql)对该路径有写权限
  • long_query_time = 2.0:单位秒,设为 0 可记录所有查询(仅调试用,生产慎用)
  • log_queries_not_using_indexes = OFF:默认不开启,开启后会额外记录未走索引的查询,可能显著增加日志量

配置完成后,重启服务:

sudo systemctl restart mysql

sudo service mysqld restart

。重启失败常见原因是 slow_query_log_file 路径父目录不存在或权限不足。

运行时动态开启(无需重启)

若无法重启 MySQL,可用 SQL 命令临时启用(但重启后失效):

SET GLOBAL slow_query_log = 'ON';<br>SET GLOBAL long_query_time = 2.0;<br>SET GLOBAL slow_query_log_file = '/tmp/mysql-slow.log';

注意:SET GLOBAL 不影响已存在的连接,新连接才会生效;且 slow_query_log_file 在某些版本(如 MySQL 5.7)中设为只读变量,此时只能靠配置文件方式修改。

验证日志是否正常写入

执行一条明显超时的查询触发日志,例如:

SELECT SLEEP(3);

然后检查日志文件是否新增内容:

tail -n 10 /var/log/mysql/mysql-slow.log

。若无输出,常见原因包括:

  • MySQL 用户对日志路径无写权限(用 ls -ld /var/log/mysql 检查)
  • long_query_time 值设得过大,实际查询未超过阈值
  • 查询被缓存命中(如 query_cache_type=ON),不进入慢日志流程
  • 使用了 SELECT SQL_NO_CACHE ... 但未真正执行慢操作

慢查询日志本身不记录事务上下文、参数化值或错误,只记录原始 SQL 文本和执行时间——这意味着敏感信息可能明文落盘,生产环境要注意日志访问控制。

text=ZqhQzanResources