主从复制中哪些账号需要权限,分别要什么权限
主从复制本身不依赖用户权限,但实际运维中涉及两类关键账号:复制账号(用于
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或慢日志都可能泄露。
