必须先确认5个硬性条件:server_id与server_uuid全局唯一;所有表须有主键;binlog_format=row、gtid_mode=on、enforce-gtid-consistency=on三者缺一不可;仅允许innodb引擎;网络互通且group_replication_local_address端口可达。

必须先确认的 5 个硬性条件
不满足这些,START GROUP_REPLICATION 肯定失败,别急着改配置文件。
-
server_id和server_uuid在所有节点上必须唯一(server_uuid不能靠 MySQL 自动生成,要手动写进my.cnf) - 所有表必须有主键 ——
sql_require_primary_key=ON是保险,但 MGR 自身检查更严格,没主键的表直接被拒绝加入组 -
binlog_format=ROW且gtid_mode=ON必须启用,enforce-gtid-consistency=ON也得开,三者缺一不可 - 存储引擎只能是 InnoDB:
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"建议加上,防止误用 - 网络互通且端口放行:
loose-group-replication-local-address指定的端口(如33061)必须能被其他节点 telnet 通,防火墙和 SELinux 都得关或配规则
my.cnf 里最容易写错的参数组合
参数名带 loose- 不是装饰,是救命开关 —— 插件没加载时,MySQL 会跳过这些参数报错;但一旦插件装上,loose- 就自动失效,变成真实生效项。
-
loose-group-replication-group-name必须是合法 UUID 格式(如"aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"),不能用字符串或数字,否则节点间无法识别为同一组 -
loose-group-replication-local-address写的是“本机用于组内通信的地址”,不是 MySQL 监听端口(3306),而是独立端口(如node1:33061),DNS 可解析,IP 也可,但别混用 -
loose-group-replication-group-seeds是种子列表,不是“当前节点列表”——哪怕只有 3 个节点,这里也要写全,比如"node1:33061,node2:33061,node3:33061" -
loose-group-replication-ip-allowlist默认只允许本地,生产环境务必显式放开网段,例如"192.168.1.0/24",否则新节点根本连不上
启动第一个节点时最危险的操作
首次引导组必须只在一个节点执行,且顺序不能乱,否则出现双主、脑裂或 ERROR 3092 (HY000)。
- 先执行
INSTALL PLUGIN group_replication SONAME 'group_replication.so',确认插件状态:SELECT * FROM information_schema.PLUGINS WHERE PLUGIN_NAME = 'group_replication'; - 再设
SET GLOBAL group_replication_bootstrap_group = ON;—— 这条只在第一个节点运行,且执行完立刻START GROUP_REPLICATION - 启动后**必须马上关掉引导模式**:
SET GLOBAL group_replication_bootstrap_group = OFF;,否则后续节点加入时会冲突 - 加入第二个节点前,确保第一个节点已显示
ONLINE状态:SELECT * FROM performance_schema.replication_group_members;
验证集群是否真正常的关键检查点
看到 ONLINE 不代表万事大吉,很多故障藏在细节里。
- 查成员状态时,
member_state是ONLINE,但member_role是SECONDARY(单主模式下)或PRIMARY(多主模式下)才合理 - 检查事务一致性:
SELECT * FROM performance_schema.replication_group_member_stats\G,重点关注COUNT_TRANSACTIONS_IN_QUEUE和COUNT_TRANSACTIONS_CHECKING,长期非零说明冲突或延迟堆积 - 日志里搜
Plugin group_replication reported: 'This server is not configured to replicate from any source.'—— 这是正常提示,不代表出错;但若出现'The member was expelled from the group',就得查网络或超时参数 -
loose-group-replication-member-expel-timeout默认 0(禁用驱逐),生产建议设为 10–30 秒,避免临时抖动导致误踢节点
实际部署中,最难调的不是配置,而是节点间时钟偏差和网络延迟。哪怕 ping 延迟只有 2ms,如果三个节点时间差超过 500ms,MGR 的 Paxos 协议就可能判定心跳超时。NTP 同步必须做,且要用 ntpd -qg 或 chronyd,别只靠 systemctl restart ntpd。











