MySQL慢查询监控平台,可视化SQL性能

MySQL慢查询监控平台的核心作用是自动收集执行时间超过阈值的SQL语句,并用图表展示趋势,帮助运维和开发快速定位性能瓶颈。
本文从零开始,带你完成慢查询日志开启、监控组件部署、可视化看板配置,最终得到一个可用的SQL性能监控界面。

一、搭建前需要确认的环境与权限

开始操作前,请确保你有一台能连接MySQL的Linux服务器(CentOS 7/8或Ubuntu 20.04以上均可),并拥有root或sudo权限。
MySQL版本建议5.7或8.0,社区版即可。

需要准备以下组件:

  • MySQL服务器:已运行,知道root密码或具备SUPER权限的账号。
  • Prometheus:用于拉取监控数据。
  • Grafana:用于可视化展示。
  • mysqld_exporter:Prometheus官方提供的MySQL指标导出器。

如果你使用宝塔面板,可以在软件商店搜索“Prometheus”和“Grafana”快速安装,但本文以命令行手动部署为例,步骤更通用。

二、开启MySQL慢查询日志并验证

慢查询监控的第一步是让MySQL记录慢SQL。
登录MySQL后执行以下命令查看当前状态:

SHOW VARIABLES LIKE 'slow_query_log';
SHOW VARIABLES LIKE 'long_query_time';
SHOW VARIABLES LIKE 'slow_query_log_file';

如果slow_query_log为OFF,需要临时开启(重启失效):

SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 1;
SET GLOBAL slow_query_log_file = '/var/log/mysql/slow.log';

要永久生效,请编辑MySQL配置文件(通常为/etc/my.cnf/etc/mysql/my.cnf),在[mysqld]段落下添加:

slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
log_queries_not_using_indexes = 1

保存后重启MySQL:systemctl restart mysqld(或systemctl restart mysql)。

验证方法:执行一条SELECT SLEEP(2);,然后查看慢查询日志文件,如果出现该语句,说明配置生效。
注意日志文件路径的目录必须存在且MySQL用户有写入权限,否则会启动失败。

三、部署mysqld_exporter与Prometheus采集

mysqld_exporter负责将MySQL的慢查询计数等指标暴露给Prometheus。
先从官方GitHub releases页面下载对应版本的二进制包(根据你的系统架构选择),解压后创建MySQL监控用户:

CREATE USER 'exporter'@'localhost' IDENTIFIED BY 'YourPassword';
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost';
FLUSH PRIVILEGES;

创建配置文件/etc/mysqld_exporter.cnf

[client]
user=exporter
password=YourPassword
host=localhost

设置权限:chmod 600 /etc/mysqld_exporter.cnf

启动exporter(假设二进制文件在/usr/local/bin/mysqld_exporter):

mysqld_exporter --config.my-cnf=/etc/mysqld_exporter.cnf &

默认监听9104端口,用curl http://localhost:9104/metrics能看到大量指标即成功。

接着配置Prometheus,编辑prometheus.yml,在scrape_configs下添加:

  - job_name: 'mysql'
    static_configs:
      - targets: ['localhost:9104']

重启Prometheus后,在Prometheus Web界面的“Status -> Targets”中应看到mysql任务为UP状态。

四、Grafana可视化看板与SQL性能图表

Grafana安装完成后,浏览器访问http://服务器IP:3000,默认账号密码均为admin。
首次登录会要求修改密码。

添加数据源:
点击左侧齿轮图标“Configuration -> Data Sources -> Add data source”,
选择Prometheus,
URL填写http:
//localhost:
9090

保存并测试。

导入MySQL监控看板:在Grafana官网Dashboard页面搜索“MySQL Overview”或“MySQL Exporter”,复制看板ID(如7362)。
在Grafana中点击“+ -> Import”,输入ID并选择刚添加的Prometheus数据源,即可生成包含慢查询数量、QPS、连接数等图表的看板。

关键指标说明:

  • mysql_global_status_slow_queries:慢查询总数,持续上升说明存在性能问题。
  • mysql_global_status_queries:总查询数,结合慢查询可计算慢查询比例。
  • mysql_global_status_threads_connected:当前连接数,突增可能引发阻塞。

你可以根据业务需求,在Grafana中新建面板,用PromQL查询rate(mysql_global_status_slow_queries[5m])来观察慢查询增长速率。

五、避坑与效果验证

常见坑点:

  • 慢查询日志路径权限错误:确保/var/log/mysql目录存在且mysql用户可写。
  • long_query_time设置过小:如设为0会记录所有查询,导致日志膨胀和性能下降,建议从1秒开始逐步调整。
  • exporter用户权限不足:缺少PROCESS权限会导致部分指标无法采集。
  • Prometheus无法拉取:检查防火墙是否开放9104端口,以及exporter是否在运行。

效果验证:

  1. 在MySQL中执行SELECT SLEEP(3);,等待几秒后刷新Grafana看板,慢查询计数应增加。
  2. 查看Prometheus的Targets页面,mysql任务状态为UP。
  3. 在Grafana中调整时间范围,观察慢查询曲线是否与实际操作时间吻合。

如果验证通过,说明MySQL慢查询监控平台已正常工作。
后续可根据业务特点,在Grafana中增加告警规则,当慢查询速率超过阈值时触发通知。

常见疑问

慢查询日志会影响MySQL性能吗?
开启慢查询日志本身开销很小,但如果long_query_time设置过低,大量写入日志可能带来额外I/O压力。建议根据实际业务设定合理阈值,并定期轮转日志。

Grafana看板没有数据怎么办?
先检查Prometheus的Targets状态是否为UP,再确认数据源URL是否正确。如果Targets为DOWN,通常是exporter未启动或端口不通。

必须用Prometheus和Grafana吗?
不是必须,但这两个组合成熟且社区看板丰富。如果只想简单查看慢查询,也可以直接分析慢查询日志文件,但缺少趋势可视化。

慢查询监控平台能自动优化SQL吗?
不能。它只负责发现和展示问题,具体优化需要结合EXPLAIN分析、索引调整等手段人工处理。

分享到:
上一篇
MySQL数据库定时优化,OPTIMIZE表脚本
下一篇
Redis集群部署,多节点缓存高可用方案
1
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意