MySQL 主从复制账号应配置为仅拥有 REPLICATION SLAVE 和 REPLICATION CLIENT 权限,禁止使用 root 或赋予 SUPER 权限。该方案适用于 MySQL 5.7 及 8.0 以上版本,风险边界在于旧版本可能需要额外权限且需确保网络访问控制配合到位。
先说结论:最小权限配置能有效降低账号泄露后的库表破坏风险,但不影响复制功能。
- 先判断:确认 MySQL 版本是否支持独立复制权限,5.1.7 之后通常支持。
- 优先做:创建专用账号并仅授予 REPLICATION SLAVE 和 REPLICATION CLIENT。
- 再验证:通过 SHOW SLAVE STATUS 确认 IO 和 SQL 线程状态正常。
命令速用版
在主库执行以下 SQL 创建复制账号并授权:
CREATE USER 'repl'@'192.168.1.%' IDENTIFIED BY 'StrongPassword123!';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'repl'@'192.168.1.%';
FLUSH PRIVILEGES;在从库配置连接信息:
CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='StrongPassword123!';
START SLAVE;为什么会这样
最小权限原则要求账号仅拥有完成工作所需的最低能力。复制账号只需要读取二进制日志,不需要修改数据或变更结构,赋予过高权限会在凭证泄露时导致全库风险。
分步处理
- 创建专用用户:避免使用 root,命名建议包含用途标识如 repl_user。
- 限制访问主机:授权语句中的 host 部分尽量指定从库 IP 段,不要使用 '%'。
- 授予最小权限:仅执行 GRANT REPLICATION SLAVE, REPLICATION CLIENT。
- 更新从库配置:在从库使用 CHANGE MASTER TO 更新账号密码信息。
- 清理旧账号:确认复制正常后,回收之前使用的宽权限账号。
怎么验证是否生效
在从库执行 SHOW SLAVE STATUS\G,检查 Slave_IO_Running 和 Slave_SQL_Running 均为 Yes。同时可在主库执行 SHOW PROCESSLIST 查看连接用户是否为专用账号。
常见坑
- host 限制过松:使用 '%' 允许任意 IP 连接,增加暴力破解风险。
- 权限遗留:旧账号未禁用,导致最小权限配置形同虚设。
- 版本差异:MySQL 5.1.7 之前版本可能需要 SUPER 权限,升级前需查阅对应版本文档。
常见问题
复制账号需要 SUPER 权限吗?
通常不需要。MySQL 5.1.7 之后版本仅需要 REPLICATION SLAVE 权限,除非涉及特殊全局变量修改。
可以只给 REPLICATION SLAVE 权限吗?
可以。REPLICATION CLIENT 主要用于监控主库状态,不参与数据同步,可根据监控需求决定是否授予。
配置后复制断开了怎么办?
检查从库 error log 中的 Access denied 报错,确认主库账号密码及 host 限制是否匹配。
参考来源
- MySQL Official Documentation, Privileges Provided by MySQL, https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html
- MySQL Official Documentation, Setting Up Replication, https://dev.mysql.com/doc/refman/8.0/en/setting-up-replication.html