mysql 8.0 mgr单主模式启动失败90%源于五项硬性配置缺失:gtid_mode=on且enforce_gtid_consistency=on、binlog_format=row、transaction_write_set_extraction=xxhash64、disabled_storage_engines="myisam,blackhole,federated,archive,memory"、log_slave_updates=on,缺一即卡在recovering或报错。

MySQL 8.0 的 MGR 单主模式不是配完 my.cnf 重启就能跑通的——它卡在 RECOVERING 或静默失败,90% 是因为五项基础配置漏掉任意一项。
五个必须写进 my.cnf 并重启生效的硬性参数
这些不能 SET GLOBAL 动态改,也不能只改一个;缺一就会让 START GROUP_REPLICATION 报错或卡住。
-
gtid_mode=ON且enforce_gtid_consistency=ON:MGR 用 GTID 做事务唯一标识和冲突检测,关掉任一,插件初始化直接失败,日志报Plugin 'group_replication' init function returned error -
binlog_format=ROW:MGR 只认 ROW,设成MIXED或STATEMENT时插件加载失败,日志明确提示Group Replication requires binlog_format = ROW -
transaction_write_set_extraction=XXHASH64:写集哈希算法必须显式指定为XXHASH64;留空、设成XXHASH32或XXHASH128,节点会永远卡在RECOVERING状态,performance_schema.replication_group_members里MEMBER_STATE不变ONLINE -
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY":大小写敏感,英文逗号分隔,不能有空格;漏掉任意一个,INSTALL PLUGIN group_replication可能成功,但START GROUP_REPLICATION必然失败,报错含Plugin 'group_replication' 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 - 长度严格为 36 位(32 字符 + 4 个短横),少一位或多一位都失败
- 不能手写、不能复制示例占位符(如
aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa)、不能含空格/中文/下划线 - 所有节点值必须完全一致,建议用系统命令
uuidgen生成后统一粘贴
/etc/hosts 和网络端口是启动前最容易被忽略的两道坎
MGR 节点间靠主机名通信,不是靠 IP;33061 端口被拦住,握手就断在第一步。
-
/etc/hosts每台机器都要单独编辑,内容严格一致:IP 与主机名一一对应,不加端口、不加空格、不写注释;三节点必须用不同主机名(如mgr-node1、mgr-node2、mgr-node3),不能是localhost或127.0.0.1 -
group_replication_local_address中的 host 必须能在本机ping通,且必须出现在/etc/hosts里;port 推荐固定为33061 -
group_replication_group_seeds必须包含所有节点的local_address,**顺序无关,但必须包含自身地址**(否则首次启动可能失败) - SELinux 必须关:
setenforce 0,并修改/etc/selinux/config中SELINUX=disabled;防火墙必须放行3306和33061,仅开3306不够
启动流程中三个关键操作不能颠倒顺序
单主模式下,第一个节点要“引导”,其他节点才能加入;用户权限、插件安装、启动命令都有严格依赖。
- 先创建复制用户:
CREATE USER 'repl'@'%' IDENTIFIED BY 'xxx'; GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'repl'@'%'; FLUSH PRIVILEGES; - 再执行
CHANGE MASTER TO ... FOR CHANNEL 'group_replication_recovery',指定该用户用于恢复通道 - 然后
INSTALL PLUGIN group_replication SONAME 'group_replication.so';确认SHOW PLUGINS里状态是ACTIVE - 第一个节点运行:
SET GLOBAL group_replication_bootstrap_group = ON;→START GROUP_REPLICATION;→SET GLOBAL group_replication_bootstrap_group = OFF;(这步必须做,否则下次重启会脑裂) - 其余节点只执行
START GROUP_REPLICATION;,不执行 bootstrap
真正麻烦的从来不是命令怎么敲,而是五项基础配置里某一项没生效、/etc/hosts 少写了一行、UUID 多了个空格,或者防火墙漏放了 33061 —— 这些地方不报红错,只让你盯着 RECOVERING 发呆。











