<p>必须授予 REPLICATION CLIENT ON . 权限才能执行 SHOW SLAVE STATUS 和 SHOW MASTER STATUS,因该权限专用于监控类命令,REPLICATION SLAVE 仅用于 IO 线程拉取 binlog,与状态查看无关。</p>

必须显式授予 REPLICATION CLIENT ON *.*,否则 SHOW SLAVE STATUS 和 SHOW MASTER STATUS 一定失败。
为什么只给 REPLICATION SLAVE 不行
这是最常踩的坑:REPLICATION SLAVE 是给从库 IO 线程拉取 binlog 用的,和“查看状态”完全无关。MySQL 内部把 SHOW SLAVE STATUS 归类为“监控类命令”,硬性要求执行者拥有全局 REPLICATION CLIENT 权限。报错 ERROR 1227 (42501): Access denied; you need (at least one of) the SUPER or REPLICATION CLIENT privilege(s) 就是明确信号。
授权语句怎么写才生效
必须由有 GRANT OPTION 的账号(如 root)执行,且不能省略 ON *.*:
CREATE USER 'monitor'@'192.168.10.%' IDENTIFIED WITH mysql_native_password BY 'strong_pass'; GRANT REPLICATION CLIENT ON *.* TO 'monitor'@'192.168.10.%'; FLUSH PRIVILEGES;
-
host部分别用%:MySQL 8.0+ 默认caching_sha2_password不支持%远程认证,换成网段更安全也更可靠 - 必须分开
CREATE USER和GRANT:合并在一句里容易忽略认证插件兼容问题 -
FLUSH PRIVILEGES不是可选:权限表缓存在内存中,不刷新新权限不会加载
验证权限是否真生效
切到目标用户连接后,直接运行:
SHOW GRANTS FOR CURRENT_USER;
输出里必须出现这一行:
GRANT REPLICATION CLIENT ON *.* TO `monitor`@`192.168.10.%`
- 如果看到的是
REPLICATION CLIENT ON `mydb`.*(带具体库名)——授错范围了,该权限只允许全局授予 - 如果看到的是
REPLICATION SLAVE或ALL PRIVILEGES——没命中关键权限,监控工具仍会报错 - 避免通过 ProxySQL、MaxScale 等中间件验证:它们可能干扰二进制协议解析,导致
SHOW SLAVE STATUS返回空或 NULL
真正要查从库状态,就只认 REPLICATION CLIENT ON *.* 这一条路,多一个字、少一个点都不行;而且已有连接不会自动更新权限,应用端若长连接未重连,会持续报错。


















