必须先满足五项硬性配置:①gtid_mode=ON且enforce_gtid_consistency=ON;②binlog_format=ROW;③transaction_write_set_extraction=XXHASH64;④disabled_storage_engines禁用非InnoDB引擎;⑤log_slave_updates=ON;缺一则插件加载失败或卡在RECOVERING。

必须先满足五项硬性配置,否则 group_replication 插件根本加载失败或启动后卡在 RECOVERING 状态。
MySQL 8.0 启动前必须确认的 5 项基础参数
MGR 不是“配完 my.cnf 就能跑”的复制方案,这五项缺一不可,且必须在所有节点上完全一致:
-
gtid_mode=ON且enforce_gtid_consistency=ON——MGR 依赖 GTID 追踪事务和检测冲突,关闭任一值,插件初始化直接报错 -
binlog_format=ROW——STATEMENT或MIXED模式下插件拒绝加载,错误日志明确提示Plugin 'group_replication' init function returned error -
transaction_write_set_extraction=XXHASH64——设成XXHASH32或留空,节点加入后无法解析写集,状态长期卡在RECOVERING -
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"——漏掉任意一个非 InnoDB 引擎,插件初始化时报错退出 -
log_slave_updates=ON——即使是单主模式,所有节点也必须开启;否则从节点无法将组内事务写入自身 binlog,后续节点无法追平
group_replication_group_name 必须是合法 UUID
这个值不是随便起的字符串,而是强校验字段。填错不会立即报错,但节点拒绝加入组,错误藏在错误日志里:Group replication: Invalid group name format。
安装、修复、更新或打包一个基于 Python 和 PyMySQL 实现的 Windows `mysql` 命令。适用于用户希望在 PowerShell/CMD 中输入 `mysql` 时重定向到 Python 实现、需要交互式输入 MySQL 连接信息、需要同步到当前用户本地 bin 目录,或需要将该能力封装成可公开复用的 Codex skill。
- 必须用真实 UUID,格式为 8-4-4-4-12 小写十六进制(如
a1b2c3d4-5678-90ab-cdef-1234567890ab),不能带空格、中文、下划线,也不能少位数 - 推荐方式:在任一节点执行
SELECT UUID();,取结果统一填到所有节点的loose-group_replication_group_name配置项中 - 不要复制示例里的占位符(如
aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa),它不合法
专用恢复账号必须显式创建并绑定到 group_replication_recovery 通道
MGR 不复用任何已有复制账号,也不自动推导凭据。漏掉任意一步,节点永远卡在 RECOVERING,日志反复出现 Failed to connect to recovery source。
- 所有节点执行:
SET SQL_LOG_BIN=0;→CREATE USER 'repl'@'%' IDENTIFIED BY 'your_password';(密码不能含@、/、:) - 依次授予权限:
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';→GRANT GROUP_REPLICATION_ADMIN ON *.* TO 'repl'@'%';(顺序不能反,且GROUP_REPLICATION_ADMIN是全局权限,不能限制库表级) - 必须显式执行:
CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='your_password' FOR CHANNEL 'group_replication_recovery';(MASTER_PORT填目标节点 MySQL 服务端口,如3306,不是 MGR 通信端口)
group_replication_local_address 和 group_replication_group_seeds 的网络配置陷阱
这两个地址不是客户端连接地址,而是 MGR 内部组通信端口(默认 33061),常被防火墙、Docker 网络或云主机安全组拦截。
-
group_replication_local_address必须填**其他节点能直连的 IP+端口**,比如 Docker 容器要用宿主机可路由的 IP(如192.168.157.10:33061),不能填127.0.0.1或容器内部网段 IP(如172.19.0.10:33061) -
group_replication_group_seeds是引导列表,每个地址格式同local_address,且必须包含所有节点的local_address;少一个,新节点可能无法发现集群 - 务必检查防火墙:
firewall-cmd --permanent --add-port=33061/tcp(CentOS)或对应云平台安全组规则
最易被忽略的是:所有节点的 server_id 必须唯一,且不能与 group_replication_group_name 冲突;另外,super_read_only=ON 在单主模式下由 MGR 自动控制,切勿手动设为 OFF 干扰选主逻辑。

















