开启mysql慢查询日志需依次确认状态、启用日志、设置long_query_time阈值(如1.0秒)、指定slow_query_log_file路径并推荐启用log_queries_not_using_indexes,最后重启服务并用select sleep(3)验证写入。

开启 MySQL 慢查询日志是性能分析的第一步,核心在于确认日志开关、设定合理阈值、指定日志路径,并确保配置生效。
确认并启用慢查询日志功能
MySQL 默认通常关闭慢查询日志。需检查当前状态并启用:
- 登录 MySQL 后执行 SHOW VARIABLES LIKE 'slow_query_log';,若值为 OFF,说明未开启
- 临时启用(重启失效):SET GLOBAL slow_query_log = ON;
- 永久启用:在 my.cnf 或 my.ini 的 [mysqld] 段下添加:
slow_query_log = ON
设置慢查询时间阈值(long_query_time)
该参数决定“多慢才算慢”,单位为秒,支持小数(如 0.5 表示 500ms):
- 查看当前值:SHOW VARIABLES LIKE 'long_query_time';
- 临时调整:SET GLOBAL long_query_time = 1.0;
- 永久设置(推荐):在配置文件中添加 long_query_time = 1.0(生产环境常设为 0.5~2.0,依业务响应要求而定)
- 注意:修改后新连接才生效;已存在的连接仍沿用旧值,除非显式执行 SET
指定慢查询日志文件路径与格式
日志路径影响可维护性,格式影响后续分析工具兼容性:
- 设置路径:slow_query_log_file = /var/log/mysql/mysql-slow.log(需确保 MySQL 进程有写入权限)
- 建议使用绝对路径,避免因工作目录不确定导致日志写入失败
- 启用扩展日志信息(强烈推荐):log_queries_not_using_indexes = ON —— 记录未走索引的查询,即使未超时
- 如需分析更细粒度(如锁等待、行扫描数),可配合 log_output = FILE(默认)或 TABLE(写入 mysql.slow_log 表,便于 SQL 查询)
验证配置是否生效并测试写入
配置修改后必须重启 MySQL 或重载配置,并主动触发一条慢查询验证:
- 执行 SELECT SLEEP(3);(假设 long_query_time=2)
- 检查日志文件是否新增对应条目:tail -n 5 /var/log/mysql/mysql-slow.log
- 若无记录,检查错误日志(mysqld.err)是否有权限/路径相关报错
- 也可执行 SHOW ENGINE PERFORMANCE_SCHEMA STATUS; 辅助排查(尤其启用了 performance_schema 时)
不复杂但容易忽略:配置修改后务必重启 mysqld 或执行 FLUSH LOGS;,且需确认 MySQL 用户对日志目录有写权限。开启后定期轮转日志,避免磁盘占满。











