最安全的从库同步账号配置是仅授予REPLICATION SLAVE权限、限定具体IP(如'repl'@'192.168.10.22')、强密码且PASSWORD EXPIRE NEVER,不赋SELECT等额外权限,配合防火墙最小放行及TLS加密。

复制账号必须只给 REPLICATION SLAVE 权限
主从复制真正依赖的权限只有一个:REPLICATION SLAVE。它允许从库通过 CHANGE MASTER TO 连接主库,并读取 binlog 内容。其他权限比如 SELECT、SHOW DATABASES、SUPER 全都不需要,给了反而增加风险。
常见错误是顺手加上 GRANT ALL PRIVILEGES 或者误授 REPLICATION CLIENT(这个只用于查状态,不是复制必需)。
-
REPLICATION SLAVE必须搭配ON *.*—— 权限范围不能限定到某个库或表,MySQL 不支持细粒度授权 - 不要用
root或已有业务账号跑复制,避免权限混用和审计混乱 - MySQL 8.0+ 下,该账号若没显式禁用密码过期,
default_password_lifetime默认为 360 天,到期后REPLICATION SLAVE会静默失效,导致复制中断
账号 host 必须匹配从库真实出口 IP
复制账号的 @'host' 部分不是写主库地址,而是写从库发起连接时使用的 IP。比如从库机器内网 IP 是 10.20.30.40,那账号就得建为 'repl'@'10.20.30.40',而不是 'repl'@'%' 或 'repl'@'localhost'。
写成 % 虽然能连上,但在 MySQL 8.0+ 默认插件 caching_sha2_password 下大概率报错 ERROR 1045;写成 localhost 则从库根本连不上主库(TCP 连接不走本地 socket)。
- 如果从库走 NAT 或代理,要填代理出口 IP,不是从库内网 IP
- 多从库场景下,每个从库都应有独立账号(如
'repl-slave1'@'10.20.30.40'、'repl-slave2'@'10.20.30.41'),方便后续禁用或审计 - 别忘了在主库防火墙放行该 IP 对 3306 端口的访问
MySQL 8.0+ 必须处理 PASSWORD EXPIRE NEVER
MySQL 8.0 强制要求复制账号密码不过期,否则启动复制时会卡在 ERROR 3092 (HY000):“The account currently does not have the necessary privileges to execute this command”。这不是权限没给够,而是账号被判定“不安全”。
正确写法是创建账号时直接禁用密码过期:
CREATE USER 'repl'@'10.20.30.40' IDENTIFIED BY 'p' PASSWORD EXPIRE NEVER;
或者建完再改:
ALTER USER 'repl'@'10.20.30.40' PASSWORD EXPIRE NEVER;
- 不要用
SET GLOBAL default_password_lifetime = 0全局关掉——这影响所有账号,违反最小权限原则 - 即使你刚建的账号,只要过了 360 天(默认值),
REPLICATION SLAVE就会失效,SHOW SLAVE STATUS里Seconds_Behind_Master突然变 NULL,但错误日志里未必报明显错误 - 检查方式:登录主库执行
SELECT user, host, password_expired FROM mysql.user WHERE user = 'repl';
应用账号连从库不需要 REPLICATION CLIENT
业务程序读从库,只需要 SELECT 权限就够了。REPLICATION CLIENT 是给 DBA 或监控工具(比如 mysqld_exporter)用的,用来执行 SHOW SLAVE STATUS、SELECT @@global.gtid_executed 这类命令。
给应用账号加这个权限,等于让它能调用 STOP SLAVE、RESET SLAVE,一次误操作就可能中断整个复制链路。
- 监控账号应单独建,host 严格限制为监控服务器 IP,且只授
REPLICATION CLIENT+PROCESS(查线程用) - 应用账号哪怕要查复制延迟,也应通过中间层(如 ProxySQL)或只读视图暴露,而不是直连并授高危权限
- MySQL 8.0.26+ 支持
SHOW REPLICA STATUS(旧名SHOW SLAVE STATUS),但权限要求不变,仍需REPLICATION CLIENT
Access denied,排查起来特别费时间。


















