mysql能被prometheus监控,关键在于mysqld_exporter能否成功连接mysql、权限是否充足、配置是否正确加载;任一环节缺失都会导致prometheus收不到指标、grafana面板为空。

直接上结论:MySQL 能被 Prometheus 监控,关键不在 Prometheus 本身,而在于 mysqld_exporter 是否能连上 MySQL、权限是否够、配置是否被正确加载。漏掉任一环,prometheus 就收不到指标,Grafana 里全是空面板。
mysqld_exporter 启动失败:检查 DATA_SOURCE_NAME 格式和权限
最常见的启动失败现象是日志里反复出现 dial tcp 127.0.0.1:3306: connect: connection refused 或 access denied for user。这不是 Prometheus 的问题,而是 mysqld_exporter 根本没连上库。
-
DATA_SOURCE_NAME必须严格按user:password@tcp(host:port)/格式写,末尾的/不能省;若用 Unix socket,得写成user:password@unix(/tmp/mysql.sock)/ - MySQL 账号至少要授予
PROCESS、REPLICATION CLIENT、SELECT ON performance_schema.*;MySQL 8.0 还需额外SHOW DATABASES(否则会报Access denied; you need (at least one of) the PROCESS privilege(s) for this operation) - 不要用 root 或应用账号复用——创建专用账号,比如:
CREATE USER 'prom_mysqld'@'localhost' IDENTIFIED BY 'strong_pass_2026'; GRANT PROCESS, REPLICATION CLIENT ON *.* TO 'prom_mysqld'@'localhost'; GRANT SELECT ON performance_schema.* TO 'prom_mysqld'@'localhost'; FLUSH PRIVILEGES;
prometheus.yml 中 mysqld_exporter job 配置要点
即使 mysqld_exporter 自己跑起来了,Prometheus 也可能不拉取——常见原因是 job 配置缩进错误、target 地址写错、或 metrics_path 不匹配。
- 确保
scrape_configs下新增的 job 缩进与已有 job 一致(YAML 对空格敏感),targets填的是mysqld_exporter所在机器的 IP + 端口(默认9104),不是 MySQL 的3306 - 如果
mysqld_exporter启用了 Basic Auth,必须加basic_auth块;如果启用了 TLS,得配scheme: https和tls_config - 建议显式设置
scrape_timeout: 10s,避免因 MySQL 响应慢导致采集超时被跳过 - 示例片段:
- job_name: 'mysqld_exporter' static_configs: - targets: ['192.168.1.30:9104'] metrics_path: /metrics
Grafana 导入 Dashboard 后数据为空?先查 target 状态
在 Grafana 看不到数据,别急着改 Dashboard,先去 Prometheus Web UI(http://<prometheus-ip>:9090/targets</prometheus-ip>)确认 mysqld_exporter job 的状态是不是 UP。如果不是,说明根本没采到数据。
- 状态为
DOWN:点开详情看Last Scrape Error,90% 是连接 MySQL 失败或认证失败,回到第一步检查账号和DATA_SOURCE_NAME - 状态为
UP但无指标:执行curl http://<exporter-ip>:9104/metrics | head -20</exporter-ip>,确认返回里有mysql_up、mysql_global_status_threads_connected这类指标;没有就说明 exporter 没读到 MySQL 状态 - 指标存在但 Grafana 不显示:检查 Dashboard 中查询语句用的 job 名是否和
prometheus.yml里定义的一致(比如写成了mysql却配了mysqld_exporter)
最易被忽略的一点:MySQL 默认关闭 performance_schema,而 mysqld_exporter 大量依赖它提供指标。启动 MySQL 时必须确保配置文件中有 performance_schema = ON,且不能被 runtime 动态关掉——否则即使账号权限全、连接通,mysql_info_schema_table_rows 等关键指标仍是 0。











