mysql如何在主从复制环境中设置权限_mysql主从复制权限

来源:这里教程网 时间:2026-02-28 20:50:41 作者:

主从复制中哪些账号需要权限,分别要什么权限

主从复制本身不依赖用户权限,但实际运维中涉及两类关键账号:复制账号(用于

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
或慢日志都可能泄露。

相关推荐