version: "3.2"
services:
  mysqld_exporter:
    image: swr.cn-south-1.myhuaweicloud.com/starsl.cn/mysqld_exporter:latest
    container_name: mysqld_exporter
    hostname: mysqld_exporter
    restart: unless-stopped
    volumes:
      - /usr/share/zoneinfo/PRC:/etc/localtime
    environment:
      MYSQLD_EXPORTER_PASSWORD: exporter@2021
    entrypoint:
      - /bin/mysqld_exporter
      - --collect.info_schema.innodb_metrics
      - --collect.info_schema.tables
      - --collect.info_schema.processlist
      - --collect.info_schema.tables.databases=*
      - --mysqld.username=mysql_exporter
    expose:
      - 9104
    network_mode: "host"

Docker Compose 使用说明

  • 该镜像用于多个 MySQL 实例共享一个 mysqld_exporter。
  • MYSQLD_EXPORTER_PASSWORD 需修改为实际监控专用账号密码后再启动。
  • 该配置适用于所有 MySQL 实例使用相同的监控账号密码。
  • 若不同 MySQL 实例需要不同监控账号密码,请参考官方 README 使用配置文件方式启动。

监控专用账户权限配置

CREATE USER 'mysql_exporter'@'multi_mysqld_exporter主机的IP' IDENTIFIED BY 'exporter@2021' WITH MAX_USER_CONNECTIONS 10;
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'mysql_exporter'@'multi_mysqld_exporter主机的IP';

Prometheus 配置

静态配置方式

  - job_name: multi_mysqld_exporter
    scrape_interval: 30s
    metrics_path: /probe
    static_configs:
      - targets:
        - server1:3306
        - server2:3306
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: 你的mysqld_exporter地址:9104

Mysqld Exporter Dashboard 中文版

Grafana Dashboard #17320

该仪表板基于 Mysqld Exporter 监控指标设计,

  • 汉化官方版本,增加总览页。
  • 新增表大小行数统计,优化重要指标展示。

其他监控信息

  • 自建 MySQL:从 node-exporter 获取 CPU、内存、磁盘等信息,通过实例 IP 进行关联。
  • 云 DRS:从 ConsulManager-MySQL 获取,基于实例 ID 进行关联(数据来源于云监控)。

MySQL 监控告警规则配置指南

告警规则分类

1. 实例存活监控

- alert: MySQLDown
  expr: mysql_up == 0
  for: 5m
  labels:
    severity: critical
  annotations:
    summary: "MySQL 实例 {{ $labels.instance }} 已停机"
    description: "MySQL 实例 {{ $labels.instance }} 已经停机超过 5 分钟"

监控指标mysql_up
触发条件:实例不可用持续5分钟
严重等级:Critical
处理建议

  • 检查实例进程状态
  • 检查主机资源使用情况
  • 验证网络连通性

2. 主从角色状态监控

主库异常只读

- alert: 主库处于只读状态
  expr: mysql_global_variables_read_only{role="master"} == 1
  for: 1m
  labels:
    severity: critical

从库未设只读

- alert: 从库未处于只读状态
  expr: mysql_global_variables_read_only{role="slave"} == 0
  for: 1m
  labels:
    severity: warning

监控指标mysql_global_variables_read_only
配置要求

  • 主库必须 read_only=0
  • 从库必须 read_only=1

3. 主从复制监控

SQL线程停止

- alert: MySQL从库SQL线程未运行
  expr: mysql_slave_status_slave_sql_running == 0
  for: 1m
  severity: critical

同步延迟

- alert: MySQL从库延迟过高
  expr: mysql_slave_status_seconds_behind_master > 300
  for: 2m
  severity: warning

关键指标

  • mysql_slave_status_slave_sql_running:SQL线程运行状态
  • mysql_slave_status_seconds_behind_master:主从延迟秒数

阈值建议

  • 延迟告警阈值:300秒(5分钟)
  • 生产环境建议根据业务特点调整

4. 连接数监控

- alert: MySQL连接数过高
  expr: mysql_global_status_threads_connected > 1500
  for: 2m
  severity: warning

容量规划建议

-- 查看最大连接数配置
SHOW VARIABLES LIKE 'max_connections';

-- 建议设置:
-- 专用数据库:max_connections = (可用内存MB / 6MB) * 0.8
-- 共享环境:根据业务需求调整

告警规则模板使用说明

  1. 变量替换

    • 所有{{ $labels.instance }}会自动替换为实际实例名
    • role="master/slave"标签需要预先在Prometheus中配置
  2. 阈值调整建议

    # 查看当前连接数趋势
    mysqladmin -uroot -p extended-status | grep Threads_connected
    
    # 查看历史最大连接数
    SHOW GLOBAL STATUS LIKE 'Max_used_connections';
    
  3. 告警升级策略

    • 延迟告警持续10分钟未恢复 → 升级为Critical
    • 连接数持续增长 → 建议配置递增告警规则

监控指标对照表

告警类型 PromQL表达式 指标说明
实例存活 mysql_up 二进制状态指标
主从状态 mysql_global_variables_read_only 只读模式开关
复制线程 mysql_slave_status_slave_*_running IO/SQL线程状态
同步延迟 mysql_slave_status_seconds_behind_master 主从延迟秒数
连接数 mysql_global_status_threads_connected 当前连接数