必须用grant replication slave显式授权且host严格匹配从库真实ip,否则io线程卡在“connecting to master”;create user与grant需同host,mysql 8.0+下%不支持caching_sha2_password远程连接,gtid模式还强制要求replication client,授完权限后必须flush privileges。

必须用 GRANT REPLICATION SLAVE 显式授权,且账号 host 必须匹配从库真实发起连接的 IP,否则 CHANGE MASTER TO 能执行但后续 IO 线程会卡在 “Connecting to master” 状态。
CREATE USER 和 GRANT 必须用同一个 host
常见错误是 CREATE USER 'repl'@'%' 却 GRANT ... TO 'repl'@'192.168.1.11',权限根本不会生效。MySQL 把 'repl'@'%' 和 'repl'@'192.168.1.11' 当作两个完全独立的账号。
- 从库实际 IP 是
192.168.1.11,就统一用'repl'@'192.168.1.11' - 不要图省事用
%,MySQL 8.0+ 下caching_sha2_password认证插件默认不支持%匹配远程连接 - 如果从库走 NAT 或代理,host 要填它对外暴露的源 IP,不是内网地址
REPLICATION CLIENT 权限不是可选,而是 GTID 模式刚需
只授 REPLICATION SLAVE 在传统 binlog file/position 模式下能跑通,但一旦启用 GTID,START SLAVE 会直接报错:ERROR 1227 (42000): Access denied——因为启动时内部要执行 SELECT @@global.gtid_executed。
- GTID 模式下必须同时授予
REPLICATION CLIENT - 监控工具(如 mysqld_exporter)采集
SHOW SLAVE STATUS也依赖这个权限,缺了指标全为空 - 建议默认加上,避免模式切换后半夜告警
授完权限后 FLUSH PRIVILEGES 不是建议,是强制步骤
权限表缓存在内存里,GRANT 只改了磁盘上的 mysql.sys_users 表,不刷新就不会加载进运行时上下文。
- 执行完
GRANT后必须跟FLUSH PRIVILEGES - MySQL 8.0+ 的
CREATE USER+GRANT组合也不能跳过这步 - 验证方式:用该账号连上后执行
SHOW GRANTS,输出里必须明确看到REPLICATION SLAVE
最容易被忽略的是认证插件和 host 的耦合性——建号时没指定 IDENTIFIED WITH mysql_native_password,而监控脚本用老驱动连,连都连不上,更别说查权限了。











