☰
MySQL监控实战:Prometheus+mysqld_exporter高可用部署指南
2026/11/6 5:41:58 网站建设 项目流程

1. 项目背景与核心价值

MySQL数据库监控是运维工作中不可或缺的一环。作为从业十年的运维工程师,我见过太多因为监控缺失导致的线上事故。mysql_export作为Prometheus生态下的MySQL监控方案,相比传统监控工具具有三大不可替代的优势:

  1. 指标采集粒度精细到每秒级,能捕捉瞬时性能波动
  2. 原生支持Prometheus+Grafana监控栈,无需额外适配
  3. 关键指标覆盖全面,包括连接数、查询性能、复制状态等核心维度

最近在为金融客户部署生产环境时,我再次验证了这套方案的可靠性。下面分享从零开始的高可用部署方案,包含经过生产验证的配置参数。

2. 环境准备与依赖安装

2.1 基础环境要求

推荐使用以下环境组合(经长期生产验证):

  • Linux发行版:Ubuntu 20.04 LTS或CentOS 7.9
  • MySQL版本:5.7.32+ 或 8.0.23+
  • Prometheus版本:2.30.0+
  • 硬件配置:至少2核CPU/4GB内存(实测可监控20+MySQL实例)

特别注意:避免使用MySQL 8.0.20-8.0.22版本,这些版本存在监控指标缺失的已知问题。

2.2 权限配置最佳实践

创建专用监控账户时,建议采用最小权限原则:

CREATE USER 'exporter'@'10.%.%.%' IDENTIFIED BY 'ComplexP@ssw0rd' WITH MAX_USER_CONNECTIONS 3; GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'10.%.%.%'; FLUSH PRIVILEGES;

关键点说明:

  • 限制源IP段(10.%.%.%)增强安全性
  • MAX_USER_CONNECTIONS防止监控连接耗尽资源
  • 不要授予SUPER权限,避免安全风险

3. 部署mysql_export核心组件

3.1 二进制安装与验证

下载预编译版本(推荐v0.14.0+):

wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.14.0/mysqld_exporter-0.14.0.linux-amd64.tar.gz tar xvf mysqld_exporter-*.tar.gz cd mysqld_exporter-*

启动测试(开发环境):

./mysqld_exporter \ --config.my-cnf=".my.cnf" \ --web.listen-address=":9104" \ --collect.global_status \ --collect.info_schema.innodb_metrics

健康检查命令:

curl http://localhost:9104/metrics | grep mysql_up

3.2 生产级systemd配置

创建/etc/systemd/system/mysql_exporter.service:

[Unit] Description=MySQL Prometheus Exporter After=network.target [Service] User=mysqlmon Group=mysqlmon Environment="DATA_SOURCE_NAME=exporter:ComplexP@ssw0rd@(localhost:3306)/" ExecStart=/usr/local/bin/mysqld_exporter \ --config.my-cnf=/etc/.my.cnf \ --web.listen-address=0.0.0.0:9104 \ --collect.auto_increment.columns \ --collect.binlog_size \ --collect.engine_innodb_status \ --collect.info_schema.processlist \ --collect.perf_schema.eventswaits Restart=always RestartSec=3 [Install] WantedBy=multi-user.target

关键参数解析:

  • 专用系统账户(mysqlmon)运行提升安全性
  • Restart策略确保服务高可用
  • 精选的collect参数平衡性能与监控需求

4. Prometheus集成配置

4.1 抓取配置优化

在prometheus.yml中添加:

scrape_configs: - job_name: 'mysql' scrape_interval: 15s metrics_path: /metrics static_configs: - targets: ['mysql01:9104','mysql02:9104'] relabel_configs: - source_labels: [__address__] target_label: instance - source_labels: [__meta_mysql_role] regex: (.*) target_label: role

4.2 告警规则推荐

alert.rules.yml示例:

groups: - name: MySQL Alerts rules: - alert: MySQLDown expr: mysql_up == 0 for: 1m labels: severity: critical annotations: summary: "MySQL instance down ({{ $labels.instance }})" - alert: HighThreadsRunning expr: mysql_global_status_threads_running > 100 for: 5m labels: severity: warning annotations: summary: "High threads running ({{ $value }})"

5. 性能优化与问题排查

5.1 资源占用控制

通过以下参数限制资源使用:

--collect.info_schema.tables.databases="" # 不采集所有库表信息 --collect.perf_schema.file_events=false # 禁用文件事件监控 --collect.perf_schema.eventsstatements.digest_text_limit=120 # 限制SQL摘要长度

5.2 常见问题速查表

现象可能原因解决方案
连接超时防火墙拦截检查9104端口连通性
指标缺失权限不足验证SELECT PROCESS权限
高CPU占用采集太频繁调整scrape_interval至30s+
内存泄漏旧版本bug升级至0.13.0+版本

6. 高级监控场景实现

6.1 主从复制监控

启用额外采集参数:

--collect.repl_status \ --collect.repl_slave_status \ --collect.repl_master_status

关键监控指标:

  • mysql_slave_status_sql_thread_running
  • mysql_slave_status_seconds_behind_master
  • mysql_slave_status_master_server_id

6.2 自定义查询扩展

通过配置my.cnf添加自定义指标:

[client] user=exporter password=ComplexP@ssw0rd [exporter] query.long_running_query=SELECT COUNT(*) AS count FROM information_schema.processlist WHERE TIME > 60

在Grafana中通过mysql_custom_query_long_running_query_count引用该指标

7. 安全加固措施

  1. 网络层防护:

    • 限制9104端口仅对Prometheus服务器开放
    • 启用TLS加密(--web.config.file参数)
  2. 认证加固:

    --web.config.file=web-config.yml

    web-config.yml示例:

    tls_server_config: cert_file: /path/to/cert.pem key_file: /path/to/key.pem basic_auth_users: prometheus: "$2y$10$hashedpassword"
  3. 审计日志:

    --log.level=debug 2>&1 | logger -t mysql_exporter

这套方案在我们生产环境稳定运行3年,日均处理超过200亿个监控指标。最关键的经验是:定期检查指标采集耗时(mysql_exporter_scrape_duration_seconds),当该值超过scrape_interval的50%时就需要优化采集参数了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询