必须授予replication client权限且只能全局授予(on .),因为show slave status是监控类命令,mysql内部校验该权限而非replication slave或all privileges;授权后须flush privileges并确保host精确匹配客户端真实ip。

必须授予 REPLICATION CLIENT 权限,且只能全局授予(ON *.*),用 REPLICATION SLAVE 或 ALL PRIVILEGES 都不行。
为什么 GRANT REPLICATION SLAVE 执行后仍报 ERROR 1227?
REPLICATION SLAVE 是给从库 IO 线程拉取 binlog 用的,和“查看状态”无关;SHOW SLAVE STATUS 属于监控类命令,MySQL 内部校验的是 REPLICATION CLIENT 权限。即使用户已有 ALL PRIVILEGES(尤其在 MySQL 8.0+),也不会自动包含该权限。
- 典型错误信息:
ERROR 1227 (42501): Access denied; you need (at least one of) the SUPER or REPLICATION CLIENT privilege(s) for this operation - 执行
SHOW GRANTS FOR 'user'@'host';后,若没看到REPLICATION CLIENT ON *.*这一行,就说明权限缺失 -
REPLICATION CLIENT和REPLICATION SLAVE可共存,但目的完全不重叠:一个看状态,一个做同步
正确授权语句与生效要点
授权必须由具备 GRANT OPTION 的账号(如 root)执行,且 host 必须匹配真实客户端来源 IP —— 不能凭感觉写 'localhost' 或 '%',否则直连失败。
- 安全写法(限制内网):
GRANT REPLICATION CLIENT ON *.* TO 'monitor'@'10.46.%'; - 最小化范围:不能写成
ON db1.*,必须是ON *.*;host 也不能写错(比如监控走跳板机,实际连接 IP 是跳板机地址) - 执行后必须立即执行
FLUSH PRIVILEGES;,否则已建立的连接不会加载新权限 - 验证是否生效:
SHOW GRANTS FOR 'monitor'@'10.46.%';,确认输出含REPLICATION CLIENT ON *.*
直连测试与常见干扰项
不要依赖代理或 GUI 工具判断权限是否生效——它们可能截断字段、误处理二进制内容,或受客户端参数影响。
- 务必用目标用户直连测试:
mysql -u monitor -p -h 10.46.169.62 -e "SHOW SLAVE STATUS\G" - 如果返回空(无报错),先检查是否启用了
--binary-as-hex参数,或是否经过 ProxySQL / MaxScale 等代理 - GTID 模式下同样依赖
REPLICATION CLIENT:从库启动时读取@@global.gtid_executed也会触发ERROR 1227 - 监控账号常需组合权限:
REPLICATION CLIENT(必需)、PROCESS(查复制线程)、SELECT(查information_schema延迟指标)
最容易被忽略的是 host 匹配和 FLUSH PRIVILEGES —— 权限语句写对了,但连的是 'monitor'@'10.46.169.62',而授权给的是 'monitor'@'10.46.%',或者忘了刷新,就会卡在“明明授了权却没用”的状态里。











