必须授予process、replication client、select三项权限;其中select需显式包含performance_schema.,因select on .*不覆盖performance_schema,默认无访问权。

MySQL里创建监控账号必须给哪些权限
只给 SELECT 是不够的,mysqld_exporter 启动后会报错:「Error scraping for collect.global_status: Error 1045: Access denied」。它至少需要三类权限:
-
PROCESS:读取SHOW PROCESSLIST和线程状态(比如mysql_global_status_threads_running) -
REPLICATION CLIENT:获取主从复制状态(SHOW SLAVE STATUS),即使没配主从也建议加上,否则某些收集项(如--collect.slave_status)会静默失败或日志刷屏 -
SELECT:查information_schema、performance_schema等库里的指标表(缓冲池、慢查询、表空间等都依赖它)
不推荐直接 GRANT ALL PRIVILEGES,最小权限原则更安全。
账号 host 设置成 '%' 还是 'localhost' 要看部署模式
关键看 mysqld_exporter 进程运行在哪台机器上、用什么方式连 MySQL:
- 如果 exporter 和 MySQL 在同一台机器,且用 Unix socket 或
127.0.0.1连,用'exporter'@'localhost'最稳妥(MySQL 的localhost特殊匹配规则,不走 TCP) - 如果 exporter 在另一台机器(比如独立监控节点),或者 MySQL 绑定的是
0.0.0.0,就必须用'exporter'@'%'或具体 IP,否则连接被拒 - 用
'exporter'@'::1'是为 IPv6 场景兜底,但多数环境用不到
常见错误:Access denied for user 'exporter'@'192.168.1.100' —— 就是因为账号 host 写成了 localhost,但 exporter 实际是从远程 IP 连的。
密码和连接限制要显式配置,不能靠默认
MySQL 8.0+ 默认启用 caching_sha2_password 插件,而老版本 mysqld_exporter(v0.14 之前)不支持,会卡在认证阶段。解决方案有两个:
- 创建账号时强制指定旧插件:
CREATE USER 'exporter'@'%' IDENTIFIED WITH mysql_native_password BY 'your_pass' - 或升级到
mysqld_exporter v0.15.0+,它已原生支持新认证方式
另外建议加连接数限制防滥用:WITH MAX_USER_CONNECTIONS 3,因为 exporter 通常只维持 1~2 个长连接,设太高反而可能挤占业务连接。
.my.cnf 文件里 host 和 port 写错会导致 exporter 启动成功但采集全空
这个文件不是给 MySQL server 用的,是给 mysqld_exporter 读的。常见低级但致命的错误:
- 写成
host=localhost但 MySQL 配置了bind-address = 127.0.0.1→ exporter 尝试走 socket,失败后 fallback 到 TCP 却连不上(取决于 MySQL 配置) - 漏写
port=3306,而 MySQL 实际监听非标端口(如 3307)→ exporter 默认连 3306,超时无报错,指标全为 0 - 密码含特殊字符(如
@、/)没做 URL 编码 →mysqld_exporter解析失败,日志里只有模糊的「invalid DSN」
最稳写法:[client] host=127.0.0.1 port=3306 user=exporter password=your_pass,明确走 IPv4 TCP,避免 socket 行为差异。











