mysql慢查询日志用于记录执行超时sql,通过show variables查看状态,可动态set global开启或配置文件永久启用,建议生产环境设long_query_time为1–2秒并确保日志路径权限正确。

MySQL 慢查询日志(Slow Query Log)是定位性能瓶颈最直接有效的工具之一,它会记录执行时间超过指定阈值的 SQL 语句。开启后,结合 mysqldumpslow 或分析工具(如 pt-query-digest),能快速识别“拖慢数据库”的元凶。
确认当前慢查询日志状态
登录 MySQL 后执行以下命令查看是否已启用:
SHOW VARIABLES LIKE 'slow_query_log';<br>SHOW VARIABLES LIKE 'long_query_time';<br>SHOW VARIABLES LIKE 'slow_query_log_file';
若 slow_query_log 值为 OFF,说明未开启;long_query_time 默认是 10 秒,生产环境建议调低至 1–2 秒;slow_query_log_file 是日志路径,确保 MySQL 进程对该路径有写权限。
动态开启(无需重启)
适用于临时诊断或测试环境,立即生效但服务重启后失效:
-
开启日志:
SET GLOBAL slow_query_log = ON; -
设置阈值(例如 2 秒):
SET GLOBAL long_query_time = 2; -
指定日志文件路径(可选):
SET GLOBAL slow_query_log_file = '/var/log/mysql/mysql-slow.log';
注意:修改 long_query_time 对已连接会话不生效,新连接或后续查询才按新值判断。
CRMEB Min是CRMEB品牌全新推出的一款轻量级、高性能、前后端分离的开源电商系统,完善的后台权限管理、会员管理、订单管理、产品管理、客服系统、CMS管理、多端管理、页面DIY、数据统计、系统配置、组合数据管理、日志管理、数据库管理,一键开通短信、产品采集、物流查询等接口,系统采用TP6+Mysql+Uniapp+iView+Redis+workerman+form-builder等最流行热
永久生效(推荐生产环境)
编辑 MySQL 配置文件(通常是 /etc/my.cnf 或 /etc/mysql/mysql.conf.d/mysqld.cnf),在 [mysqld] 段落下添加:
slow_query_log = ON<br>slow_query_log_file = /var/log/mysql/mysql-slow.log<br>long_query_time = 2<br>log_queries_not_using_indexes = OFF # 可选:避免索引缺失语句刷屏
保存后重启 MySQL 服务:sudo systemctl restart mysql(或 mysqld)。重启前建议先手动创建日志目录并赋权:sudo mkdir -p /var/log/mysql && sudo chown mysql:mysql /var/log/mysql。
验证与基本分析
触发一条慢查询(如 SELECT SLEEP(3);),然后检查日志文件是否写入:
tail -f /var/log/mysql/mysql-slow.log
典型日志行包含:执行时间、锁等待时间、返回行数、扫描行数、SQL 语句本身。重点关注 Rows_examined 远大于 Rows_sent 的语句——大概率缺少索引或存在全表扫描。










