主从复制需两类账号:复制账号须有replication slave权限(gtid模式还需replication client),且必须授权给从库真实ip;应用账号仅需select等业务权限,无需replication client。

主从复制中哪些账号需要权限,分别要什么权限
主从复制本身不依赖用户权限,但实际运维中涉及两类关键账号:复制账号(用于 CHANGE MASTER TO)和应用账号(业务连接从库时使用)。复制账号必须有 REPLICATION SLAVE 权限,这是硬性要求;如果用 GTID 还需 REPLICATION CLIENT(用于查看 SELECT @@global.gtid_executed 等)。应用账号连从库读取数据,一般只需 SELECT,但若允许在从库执行管理操作(如 SHOW PROCESSLIST),就得额外授权。
REPLICATION SLAVE 权限必须授予哪个 host
这个权限必须授予从库发起连接时所用的 IP 或主机名,不是主库本地地址。比如从库服务器 IP 是 192.168.5.20,主库上就得这样建账号:
CREATE USER 'repl'@'192.168.5.20' IDENTIFIED BY 'strongpass';<br>GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.5.20';
常见错误是写成 'repl'@'localhost' 或 'repl'@'%' —— 前者根本连不上,后者虽能连但存在安全风险,且 MySQL 8.0+ 默认禁止 % 匹配密码认证插件为 caching_sha2_password 的账号。
MySQL 8.0+ 创建复制账号为什么总报错 ERROR 3092
这是 MySQL 8.0 引入的强制要求:复制账号必须启用 require_row_format 或至少设置密码过期策略宽松,否则会触发 ERROR 3092 (HY000): The account currently does not have the necessary privileges to execute this command。本质是复制账号被判定“不够安全”。解决方法只有两个:
- 创建时显式指定密码不过期:
CREATE USER 'repl'@'192.168.5.20' IDENTIFIED BY 'p' PASSWORD EXPIRE NEVER; - 或降低全局密码策略:
SET GLOBAL default_password_lifetime = 0;(不推荐生产环境)
注意:即使你没显式设过密码策略,MySQL 8.0 默认 default_password_lifetime = 360,只要账号密码年龄超期,REPLICATION SLAVE 权限就会被静默禁用。
从库上要不要给应用账号加 REPLICATION CLIENT
不需要。这个权限只用于查看主从状态(如 SHOW SLAVE STATUS、SHOW MASTER STATUS),普通应用完全用不到。给应用账号赋予它,等于让业务代码具备了干扰复制链路的能力(比如误执行 STOP SLAVE)。真正需要它的,只有 DBA 或监控脚本。如果你用 Prometheus + mysqld_exporter, exporter 连接用的账号才需要这个权限,且应严格限定 host 和最小权限集。
最容易被忽略的是:复制账号的密码在 CHANGE MASTER TO 里是明文出现在 SQL 中的,如果用脚本自动配置,记得别把它打到日志里——general_log 或慢日志都可能泄露。










