group_replication插件需5项静态配置:gtid_mode与enforce_gtid_consistency必须on;binlog_format=row;transaction_write_set_extraction=xxhash64;disabled_storage_engines严格指定5种引擎;log_slave_updates=on。

group_replication 插件不是改完配置 reload 就能跑的模块——它对 MySQL 实例启动前的基础参数有五项硬性要求,缺一就会卡在 OFFLINE 或 RECOVERING 状态,甚至不报错、只静默失败。
必须在 my.cnf/my.ini 中静态配置的 5 项强制参数
这些不是“建议开启”,而是插件加载和组通信的准入门槛。动态SET GLOBAL 修改无效,必须写进配置文件并重启 mysqld。
-
gtid_mode=ON且enforce_gtid_consistency=ON:MGR 依赖 GTID 做事务唯一标识和冲突检测,任一为OFF或ON_PERMISSIVE都会导致插件初始化报错Plugin 'group_replication' init function returned error -
binlog_format=ROW:MGR 只支持行格式,因为 write-set 提取依赖每行变更记录;设成MIXED或STATEMENT时插件直接拒绝加载,错误日志明确提示Group Replication requires binlog_format = ROW -
transaction_write_set_extraction=XXHASH64:必须显式指定,不能留空、不能用XXHASH32或XXHASH128;否则节点加入后长期卡在RECOVERING,performance_schema.replication_group_members中MEMBER_STATE不变 -
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY":大小写敏感、英文逗号分隔、无空格;漏掉任意一个,INSTALL PLUGIN group_replication会失败,且错误提示极不明确(例如只报Plugin registration failed) -
log_slave_updates=ON:即使单主模式也必须开,否则从节点无法将组内事务写入自身 binlog,后续节点追平失败
group_replication_group_name 必须是合法 UUID v4
这个值看着像普通字符串,实则是强校验字段。填错不会立即报错,但节点会拒绝加入组,错误藏在错误日志里:Group replication: Invalid group name format。
- 必须是标准 UUID v4 格式,例如
c482bdca-d23e-11eb-972a-fa163edf10ea - 不能手写、不能复制示例占位符(如
aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa)、不能含空格/中文/下划线 - 长度必须严格为 36 位(32 字符 + 4 个短横);少一位或多一位都会失败
- 所有节点配置值必须完全一致,建议用系统命令
uuidgen生成后统一粘贴
Windows 下必须加 loose- 前缀的组复制变量
Windows 启动时若遇到不认识的系统变量会直接退出。而 group_replication_* 变量默认不被核心识别,必须加 loose- 前缀让 MySQL 忽略其未知性并继续加载插件。
- 所有组复制相关变量都必须带
loose-,例如:loose-group_replication_group_name、loose-group_replication_local_address、loose-group_replication_group_seeds -
server_id、gtid_mode、enforce_gtid_consistency等基础复制变量不能加loose-,否则 GTID 不生效,事务无法加入组 -
plugin_dir必须显式指定为 MySQL 安装目录下的lib/plugin路径(如C:/Program Files/MySQL/MySQL Server 8.0/lib/plugin),路径中不能含空格或中文;Windows 下插件文件名是group_replication.dll,不是.so
group_replication_local_address 和网络端口常见陷阱
这两个地址不是客户端连接地址,而是 MGR 内部组通信端口(默认 33061),常被防火墙、Docker 网络或 DNS 解析拦住。
-
group_replication_local_address必须用真实网卡 IP + 端口(如192.168.3.71:33061),不能用localhost、127.0.0.1或 WSL2 虚拟网卡地址;Windows 多网卡环境下极易填错 - Windows 防火墙默认拦掉
33061端口,仅开放3306不够;需用New-NetFirewallRule显式放行 -
group_replication_group_seeds中列出的所有地址,必须确保每个节点都能双向 ping 通且端口可连;可用telnet node1 33061或Test-NetConnection node1 -Port 33061验证
真正容易被忽略的是:所有节点的 disabled_storage_engines 值必须一字不差,包括大小写和逗号分隔方式;哪怕多一个空格,插件就加载失败,而错误日志里可能只显示一行模糊的 “registration failed”。











