必须手动勾选「REPLICATION SLAVE」和「REPLICATION CLIENT」,二者均位于phpMyAdmin「管理」分类底部且须展开查看;host必须精确匹配从库真实IP(如'192.168.5.22'),不可用'%';还需指定mysql_native_password认证插件并执行FLUSH PRIVILEGES。
必须手动勾选「replication slave」和「replication client」,且 host 必须精确匹配从库真实 ip;只勾选前者、用 % 或漏掉后者,从库大概率连不上。
phpMyAdmin 权限界面里,“REPLICATION SLAVE”藏在哪?
它不在「数据」或「结构」分类下,而在「管理」分类的最底部——和 REPLICATION CLIENT 并列。phpMyAdmin 的权限复选框是分组折叠的,默认不展开「管理」,容易直接跳过。常见错误是只勾了 SELECT 或 SUPER,结果 START REPLICA 报错:Access denied; you need (at least one of) the SUPER or REPLICATION SLAVE privilege(s)。
操作要点:
- 进入「用户账户」→「添加用户账户」→ 展开「管理」权限组
- 务必勾选
REPLICATION SLAVE(I/O 线程必需)和REPLICATION CLIENT(MySQL 8.0+ 握手阶段查SHOW MASTER STATUS所需) - 别信「全选」按钮——
ALL PRIVILEGES不包含任何复制类权限
host 写 % 还是具体 IP?MySQL 8.0+ 必须写死
MySQL 8.0+ 默认启用 require_row_format 和更严格的 host 匹配策略,'repl'@'%' 在多数部署中会被拒绝连接,即使网络通。错误现象是:从库能 ping 通主库,但 CHANGE REPLICATION SOURCE TO 后 Replica_IO_Running 始终为 No,日志里只有模糊的 Access denied。
正确做法:
立即学习“PHP免费学习笔记(深入)”;
- host 填从库发起连接的真实出口 IP,例如
'repl'@'192.168.5.22',不是localhost,也不是% - 创建时显式加
PASSWORD EXPIRE NEVER,否则 MySQL 8.0 默认 360 天密码过期,过期后REPLICATION SLAVE权限静默失效 - 验证命令:
SELECT user, host, password_last_changed, account_locked FROM mysql.user WHERE user = 'repl';
为什么授权后还是连不上?三个高频硬坑
权限勾对了、host 写准了,仍连不上,大概率卡在这三处:
-
caching_sha2_password认证插件不兼容:MySQL 8.0 默认用它,但旧版从库或同步工具只认mysql_native_password。解决:建用户时加IDENTIFIED WITH mysql_native_password BY 'xxx',或后续执行ALTER USER 'repl'@'192.168.5.22' IDENTIFIED WITH mysql_native_password BY 'xxx'; -
FLUSH PRIVILEGES没执行:phpMyAdmin 界面点「执行」不等于刷新权限表,必须进「SQL」页手动跑一遍FLUSH PRIVILEGES; - binlog 格式不是
ROW:REPLICATION SLAVE权限只是“准入证”,但同步工具(如 canal、debezium)和 MySQL 自身从库都要求binlog_format = ROW,否则拉到空事件或解析失败。检查:SHOW VARIABLES LIKE 'binlog_format';
比 phpMyAdmin 点击更稳的方案:直接 SQL 授权
界面操作易漏项、缓存延迟、权限刷新不及时,尤其在调试阶段。直接在 phpMyAdmin 的「SQL」页执行以下语句,一气呵成:
CREATE USER 'repl'@'192.168.5.22' IDENTIFIED WITH mysql_native_password BY 'your_strong_pass' PASSWORD EXPIRE NEVER; GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'repl'@'192.168.5.22'; FLUSH PRIVILEGES;
注意三处细节:
-
IDENTIFIED WITH mysql_native_password是认证协议,不是可选项 -
ON *.*不能缩写,也不能写成ON `db`.*—— 复制权限必须全局 -
FLUSH PRIVILEGES必须执行,否则权限不生效
真正麻烦的从来不是勾哪个框,而是 host 是否真实、密码插件是否匹配、以及那条被忽略的 FLUSH PRIVILEGES。



















