mysql_up为0代表MySQL实例不可达,是Grafana监控首要验证指标;需先确认Prometheus Targets中对应job状态为UP,常见原因为mysqld_exporter连接失败或权限不足(如缺失PROCESS、REPLICATION CLIENT)。

mysql_up 为 0 就代表 MySQL 实例已不可达,这是 Grafana 中必须最先验证的指标;其他所有性能图表都建立在这个前提之上。
确认 mysqld_exporter 数据已成功接入 Prometheus
在 Grafana 里配任何面板前,先去 Prometheus Web UI 的 Status → Targets 页面看对应 job 是否是 UP 状态。常见失败原因:
-
mysql_up持续为 0:检查mysqld_exporter日志,90% 是连接串错误或权限不足(比如漏了PROCESS或REPLICATION CLIENT) - 抓取间隔显示
N/A:Prometheus 配置中scrape_configs的static_configs.targets写错了 IP 或端口,比如把9104写成9100 - 指标名查不到:确认 exporter 版本是否兼容 MySQL 8.0 ——
v0.14.0+才完整支持performance_schema的新字段(如wait/io/file/innodb/innodb_log_file)
QPS、连接数、慢查询这三项必须用 rate() 和 gauge 组合计算
直接画 mysql_global_status_questions 这种 Counter 类型指标毫无意义,它只会上升。正确做法是:
- QPS =
rate(mysql_global_status_questions[5m])(单位:次/秒) - 活跃连接占比 =
mysql_global_status_threads_connected / mysql_global_variables_max_connections(结果乘 100 得百分比) - 慢查询速率 =
rate(mysql_global_status_slow_queries[5m]),再叠加一个irate()做突增检测(比如irate(mysql_global_status_slow_queries[1m]) > 10)
注意:irate() 对瞬时毛刺更敏感,适合告警;rate() 更平滑,适合看板趋势。
缓冲池命中率和 InnoDB 锁等待必须用子查询避免除零
这两个指标公式里含除法,MySQL 8.0 启动初期或低负载时分母可能为 0,Grafana 会显示 No data 而不是报错,容易误判:
安装、修复、更新或打包一个基于 Python 和 PyMySQL 实现的 Windows `mysql` 命令。适用于用户希望在 PowerShell/CMD 中输入 `mysql` 时重定向到 Python 实现、需要交互式输入 MySQL 连接信息、需要同步到当前用户本地 bin 目录,或需要将该能力封装成可公开复用的 Codex skill。
- InnoDB 缓冲池命中率 =
1 - (rate(mysql_global_status_innodb_buffer_pool_reads[5m]) / rate(mysql_global_status_innodb_buffer_pool_read_requests[5m])),建议外层加clamp_min(..., 0)防负值 - 平均锁等待时间 =
rate(mysql_global_status_innodb_row_lock_time_avg[5m]) / rate(mysql_global_status_innodb_row_lock_waits[5m]),但要加条件rate(mysql_global_status_innodb_row_lock_waits[5m]) > 0,否则整个表达式失效
别省略这个判断 —— 我见过三次线上事故,都是因为锁等待图长期空白,DBA 以为没锁,实际是表达式被静默跳过。
Grafana 面板变量要按实例维度隔离,别混用 label
如果你监控多个 MySQL 实例(比如主库+从库+分片),job 和 instance 标签必须严格区分:
-
job应固定为mysql,表示采集任务类型 -
instance必须填真实地址,如192.168.1.100:9104,不能写成mysql-master这类别名(除非你已在 Prometheus relabel_configs 中做了替换) - 在 Grafana 变量设置里,用
label_values(mysql_up, instance)获取下拉列表,而不是label_values(mysql_up, job)—— 后者会导致所有实例数据叠加在同一张图上
多实例环境下,一个标签写错,QPS 图就变成所有库的总和,数值翻几倍,但你根本看不出异常。










