mysql exporter 启动失败根本原因是监控账号无法连接mysql,须创建专用账号并授权process、replication client、select;关键告警指标仅5个,如mysql_up、threads_connected、slow_queries等;需启用performance_schema,避免rate误用,优先排查直连通性。

MySQL exporter 启动失败,日志报 access denied
根本原因是 exporter 连不上 MySQL,不是权限没开全,而是账号连最基础的连接和查询都通不过。默认用 root@localhost 跑会卡在 Unix socket 认证上,尤其在容器或远程部署时。
- 必须显式创建专用监控账号,不要复用应用账号:
CREATE USER 'exporter'@'%' IDENTIFIED BY 'your_strong_password';
- 最小必要权限只要这三条:
PROCESS(看线程状态)、REPLICATION CLIENT(查主从延迟)、SELECT(读information_schema和performance_schema) - 如果 MySQL 开了
skip-name-resolve,就别用'exporter'@'%',改用'exporter'@'10.0.2.%'或具体 IP 段,否则 DNS 反查失败直接拒绝连接
哪些指标真正值得告警,而不是堆满 Grafana 面板
90% 的线上问题只和 5 个指标强相关,其余多数是干扰项。盲目拉取所有 mysqld_exporter 暴露的指标,既拖慢 Prometheus 抓取,又掩盖真实瓶颈。
- 必须采集并设阈值的:
mysql_up(实例是否存活)、mysql_global_status_threads_connected(连接数突增常是慢查询或连接泄漏前兆)、mysql_global_status_slow_queries(每分钟 > 5 次就要查原因) - 主从场景盯死:
mysql_slave_status_seconds_behind_master(注意:该值为 NULL 表示复制已停,不是 0) -
mysql_global_variables_max_connections和mysql_global_status_threads_connected要一起看比值,> 85% 就得扩容或查长连接
Prometheus 抓不到指标,curl http://exporter:9104/metrics 返回空或 404
不是 exporter 没跑起来,而是它启动时没加载对配置,或者 MySQL 实例本身没暴露关键状态表。
- 检查 exporter 启动参数是否带
--config.my-cnf指向正确的配置文件;若用命令行参数传账号密码,确保--web.listen-address绑定的是0.0.0.0:9104而非127.0.0.1:9104(容器内常见坑) - MySQL 5.7+ 默认关了
performance_schema,而很多关键指标(如mysql_info_schema_table_rows)依赖它,执行SET GLOBAL performance_schema = ON;并写入 my.cnf 的[mysqld]段 - 确认 MySQL 的
information_schema没被禁用(某些云厂商 RDS 会限制),否则mysql_global_status_questions等基础指标直接为空
Grafana 面板里 rate(mysql_global_status_questions[5m]) 波动剧烈,但业务其实很稳
这是典型的采样窗口与 MySQL 状态刷新节奏不匹配导致的假象。MySQL 的 STATUS 变量是累计值,Prometheus 的 rate() 函数在 scrape 间隔抖动时会放大噪声。
- 优先用
irate()替代rate()查瞬时 QPS,尤其当 scrape interval > 15s 时:irate(mysql_global_status_questions[5m]) - 避免直接对
mysql_global_status_threads_connected做rate()—— 它是瞬时快照值,rate 无意义,应该用avg_over_time(mysql_global_status_threads_connected[5m]) - 如果发现指标每 30 秒一跳(比如刚好等于 scrape interval),大概率是 MySQL 的
innodb_stats_auto_recalc触发了统计更新,干扰了information_schema查询,可临时关掉观察
mysql_up 突然变 0 而实际 MySQL 一切正常。这类故障最耗时间,但永远最先排查 exporter 到 MySQL 的直连通性,而不是翻 Grafana 日志。











