MySQL 8.4 LTS中MGR插件已稳定集成,但需严格配置:group_replication_group_name须为合法UUID;group_replication_local_address须用独立端口(如33061);group_replication_group_seeds须完整列出所有节点地址;bootstrap仅首节点临时启用一次;SSL强制启用(REQUIRED),必须配全证书路径。

MySQL 8.4 LTS 版本起,group_replication 插件已稳定集成,无需额外下载;只要满足基础约束(InnoDB、主键、GTID、ROW 格式),三节点单主 MGR 就能跑起来——但配置错一个参数、漏掉一次初始化顺序、或网络端口不通,START GROUP_REPLICATION 就会卡住或报 ERROR 3092,根本加不进组。
my.cnf 里哪些 group_replication_* 参数不能乱设
MySQL 8.4 的 MGR 参数比 8.0 更严格,尤其是引导阶段。关键项不是“越多越好”,而是“必须精准匹配组内语义”:
-
group_replication_group_name必须是合法 UUID(如aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa),不能用字符串或空值,否则插件加载直接失败 -
group_replication_local_address必须写成host:port形式,且该port不能和 MySQL 实例端口相同(推荐用33061这类专用端口),否则节点间无法建立 GCS 连接 -
group_replication_group_seeds必须包含所有节点的group_replication_local_address,且顺序无关,但少写一个,新节点就找不到引导源 -
group_replication_start_on_boot=OFF—— 强烈建议关掉,避免 systemd 启动时因网络未就绪导致插件加载失败后静默退出 -
group_replication_bootstrap_group=OFF—— 仅第一个节点首次启动时临时设为ON,其他节点必须为OFF,否则多个节点同时引导会脑裂
START GROUP_REPLICATION 失败最常见的三个原因
执行 START GROUP_REPLICATION 后卡住、报错或状态始终是 RECOVERING,基本逃不出这三类:
解析 MySQL 8.0 的 DDL 脚本,并将表结构导出为 Excel 格式。适用于用户需将 MySQL 的 `CREATE TABLE` 语句转换为结构化的 Excel 文件场景,导出内容包含字段名、数据类型、长度及精度等信息。支持多张表的批量处理,每张表对应 Excel 中的一个独立工作表。适用于数据库文档编写、数据字典生成及模式分析等任务。
- 网络不通:
telnet mgr2 33061连不上?检查防火墙(firewalld或iptables)、SELinux 是否拦截了非标准端口、/etc/hosts解析是否准确(禁用skip-name-resolve时尤其关键) - 账号权限不足:MGR 要求复制账号有
GROUP_REPLICATION_ADMIN权限,光给REPLICATION SLAVE不行;且该账号必须用CREATE USER ... IDENTIFIED WITH 'caching_sha2_password'创建(8.4 默认认证插件变了) - 事务冲突残留:如果之前启停过 MGR 但没清干净,
SELECT * FROM performance_schema.replication_group_members可能看到旧成员状态为UNREACHABLE或ERROR,此时必须先在所有节点执行STOP GROUP_REPLICATION,再用RESET MASTER和RESET SLAVE ALL清理元数据
为什么第一次必须只在一个节点上执行 bootstrap
所谓“引导”,本质是让第一个节点以“空组”身份启动共识服务,生成初始视图(view_id)。这个动作只能发生一次:
- 在节点 A 上执行
SET GLOBAL group_replication_bootstrap_group=ON→START GROUP_REPLICATION→ 成功后立刻执行SET GLOBAL group_replication_bootstrap_group=OFF - 这时 A 的状态是
ONLINE,且SELECT * FROM performance_schema.replication_group_members显示它自己为PRIMARY - 其余节点 B/C 只需配置好
group_replication_group_seeds指向 A 的local_address,然后直接START GROUP_REPLICATION即可加入——它们会自动从 A 拉取全量状态,不需要、也不允许再开bootstrap - 如果 B 也开了
bootstrap,A 和 B 会各自形成孤立组,performance_schema.replication_group_members查不到对方,后续也无法合并
真正容易被忽略的是 SSL:MySQL 8.4 默认强制组通信加密,group_replication_ssl_mode=REQUIRED 是硬性要求,哪怕测试环境也得配好证书路径(group_replication_recovery_ssl_ca 等),否则节点间握手直接拒绝——这不是可选项,是连接建立的前提。










