必须只给PROCESS、REPLICATION CLIENT、SELECT三项权限且MySQL 8.0+需显式授权performance_schema.*;CREATE USER须指定host和mysql_native_password插件,避免认证失败与指标采集缺失。

必须只给 PROCESS、REPLICATION CLIENT、SELECT 三项权限,缺一不可;MySQL 8.0+ 还必须显式授予 performance_schema.*,否则关键指标(如慢查询、锁等待)根本采集不到。
CREATE USER 必须指定 host 和认证插件
MySQL 8.0 默认用 caching_sha2_password,但老版本 mysqld_exporter(比如 v0.14.x)不支持,连不上就卡在 Access denied,不是权限问题,是认证失败。
- 显式指定插件:
CREATE USER 'mysqld_exporter'@'10.0.0.11' IDENTIFIED WITH mysql_native_password BY 'strong_pass_2026'; -
host写成'10.0.0.11'(Exporter 实际出站 IP),别用'%'或主机名——DNS 解析失败会导致连接被拒 - 确认该 IP 真实可达:Exporter 若跑在容器里,
host值不是172.18.0.5这类内网地址,而是宿主机或云服务器的出口 IP
GRANT 权限不能偷懒写 SELECT ON *.*
SELECT ON *.* 看似覆盖全库,但 MySQL 8.0+ 默认不把 performance_schema 视为“普通库”,它里面的 events_statements_summary_by_digest、table_io_waits_summary_by_table 等核心指标表根本查不到,mysqld_exporter 日志无报错,但 Prometheus 里 mysql_global_status_slow_queries 等字段为空。
- 必须补一句:
GRANT SELECT ON performance_schema.* TO 'mysqld_exporter'@'10.0.0.11'; - 别碰
information_schema单独授权——SELECT ON *.*已隐含对其只读访问,显式加反而可能触发警告 - 绝对不要加
SHOW DATABASES:它会暴露所有库名,违背最小权限原则
验证账号是否真受限
别只测 SHOW SLAVE STATUS 成功就收工。登录后立刻执行这几条边界命令:
-
SELECT @@read_only;→ 应返回值(只读变量可查) -
SELECT COUNT(*) FROM mysql.user;→ 必须报错ERROR 1142 (42000): SELECT command denied -
STOP SLAVE;→ 必须报错ERROR 1227 (42501): Access denied; you need SUPER or REPLICATION_SLAVE_ADMIN -
INSERT INTO test.t1 VALUES(1);→ 报错ERROR 1290 (HY000): The MySQL server is running with the --read-only option(说明没误授写权限)
最常被忽略的是 performance_schema 授权遗漏和 host 匹配偏差——前者导致指标缺失却无日志提示,后者让权限配置形同虚设。这两处不校验,Grafana 面板空一半,你还在查 Prometheus 配置。


















