Prometheus监控MySQL

Prometheus监控MySQL并实现数据库性能告警,核心就是让Prometheus通过mysqld_exporter采集MySQL指标,再基于PromQL编写告警规则。
整套流程可以在一台Linux服务器上完成,最终你能在Grafana看到实时图表,并在连接数、慢查询等指标异常时收到告警通知。

先准备好监控环境

开始前,请确认以下条件已经满足:

  • 一台运行MySQL的Linux服务器(MySQL 5.7或8.0,社区版即可)。
  • 一个可登录MySQL并拥有PROCESS、REPLICATION CLIENT、SELECT权限的账号。
  • 服务器上已安装Prometheus和Grafana(若未安装,可先单独部署)。
  • 服务器能访问外网下载安装包,或已提前下载好mysqld_exporter。

特别提醒:不要使用root账号连接exporter,建议创建专用监控账号,降低安全风险。

部署mysqld_exporter采集数据

mysqld_exporter是Prometheus官方提供的MySQL指标导出器,负责连接MySQL并暴露metrics接口。

  1. 下载并解压(以v0.15.0为例,请以官方最新版本为准):
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.15.0/mysqld_exporter-0.15.0.linux-amd64.tar.gz
tar -xzf mysqld_exporter-0.15.0.linux-amd64.tar.gz
mv mysqld_exporter-0.15.0.linux-amd64 /usr/local/mysqld_exporter
  1. 在MySQL中创建监控账号:
CREATE USER 'exporter'@'localhost' IDENTIFIED BY 'YourStrongPassword' WITH MAX_USER_CONNECTIONS 3;
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost';
FLUSH PRIVILEGES;
  1. 创建配置文件/etc/.mysqld_exporter.cnf,写入账号信息:
[client]
user=exporter
password=YourStrongPassword

然后设置文件权限为600:chmod 600 /etc/.mysqld_exporter.cnf

  1. 创建systemd服务文件/etc/systemd/system/mysqld_exporter.service
[Unit]
Description=mysqld_exporter
After=network.target

[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/mysqld_exporter/mysqld_exporter --config.my-cnf=/etc/.mysqld_exporter.cnf
Restart=on-failure

[Install]
WantedBy=multi-user.target

如果系统没有prometheus用户,可先执行useradd --no-create-home --shell /bin/false prometheus

  1. 启动并设置开机自启:
systemctl daemon-reload
systemctl start mysqld_exporter
systemctl enable mysqld_exporter
  1. 验证采集是否正常:
curl http://localhost:9104/metrics | grep mysql_up

如果返回mysql_up 1,说明exporter已成功连接MySQL。

配置Prometheus抓取与告警规则

现在让Prometheus定期从exporter拉取指标,并定义数据库性能告警。

  1. 编辑prometheus.yml,在scrape_configs下添加job:
scrape_configs:
  - job_name: 'mysql'
    static_configs:
      - targets: ['localhost:9104']
  1. 创建告警规则文件mysql_alerts.yml,示例如下:
groups:
  - name: mysql_alerts
    rules:
      - alert: MySQLDown
        expr: mysql_up == 0
        for: 1m
        labels:
          severity: critical
        annotations:
          summary: "MySQL实例 {{ $labels.instance }} 不可用"
      - alert: MySQLTooManyConnections
        expr: mysql_global_status_threads_connected / mysql_global_variables_max_connections > 0.8
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "MySQL连接数超过80%"
      - alert: MySQLSlowQueries
        expr: rate(mysql_global_status_slow_queries[5m]) > 0.1
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "MySQL慢查询速率过高"
  1. prometheus.yml中引用规则文件:
rule_files:
  - "mysql_alerts.yml"
  1. 重启Prometheus使配置生效:
systemctl restart prometheus
  1. 检查规则是否加载成功:访问Prometheus Web UI的/rules页面,能看到上述告警规则即为正常。

避坑指南与常见报错

部署过程中容易遇到几个典型问题,提前注意可以少走弯路:

  • 权限不足:监控账号必须拥有PROCESSREPLICATION CLIENTSELECT权限,否则exporter日志会报Access denied
  • 配置文件权限.mysqld_exporter.cnf必须设置为600,且运行exporter的用户需有读取权限,否则启动失败。
  • 端口冲突:默认端口9104若被占用,可在启动参数中添加--web.listen-address=:9105更换端口。
  • 指标缺失:部分MySQL版本默认关闭performance_schema,导致某些指标无法采集,建议在my.cnf中开启。
  • 告警不触发:检查Prometheus的for时长和告警规则表达式,确保PromQL返回结果符合预期。

验证监控与告警效果

完成配置后,按以下步骤确认整套监控生效:

  1. 在Prometheus Web UI的/targets页面,确认mysql job状态为UP。
  2. /graph页面输入mysql_global_status_threads_connected,能查看到曲线图。
  3. 手动模拟故障:停止MySQL服务,等待1分钟后在Prometheus的/alerts页面应看到MySQLDown告警变为Pending或Firing。
  4. 如需接收通知,可在Prometheus中配置Alertmanager,将告警发送到邮件或Webhook。

建议:生产环境务必配置Alertmanager,否则告警只停留在Prometheus界面,无法及时通知到人。

常见疑问

Q:mysqld_exporter需要和MySQL在同一台机器吗?
不一定。exporter可以远程连接MySQL,只需在配置文件中指定正确的主机地址和端口即可,但要确保网络连通和账号允许远程登录。

Q:告警规则中的阈值怎么定?
阈值没有统一标准,建议先观察业务正常运行时的指标基线,再设置略高于基线的值。例如连接数阈值可设为最大连接数的80%。

Q:除了连接数和慢查询,还有哪些关键告警指标?
可以关注mysql_global_status_innodb_row_lock_waits(锁等待)、mysql_global_status_aborted_connects(连接失败)等,根据业务特点选择。

按照以上步骤,你就能用Prometheus监控MySQL并实现数据库性能告警。
如果遇到exporter启动报错,优先检查MySQL账号权限和配置文件路径;
如果告警不触发,重点核对PromQL表达式和for时长。

分享到:
上一篇
Zabbix添加网站监控,检测站点是否在线
下一篇
Grafana自定义仪表盘,可视化服务器指标
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意