group replication需手动配置插件、网络、复制账户及一致性参数,缺一不可;必须满足版本要求(5.7.14+/8.0+)、启用gtid与row格式binlog、设置唯一server_id和可解析的group_replication_local_address、创建专用复制用户并临时禁用sql_log_bin,首节点需bootstrap引导,其余节点通过seeds加入,通信端口33061须开放。

Group Replication 不是开箱即用的功能,必须手动配置插件、网络、复制账户和一致性参数。直接启用默认配置一定会失败——节点之间连握手都通不过。
确认 MySQL 版本与插件可用性
MySQL 5.7.14+ 或 8.0+ 才支持 group_replication 插件,但不同小版本行为差异明显(比如 8.0.23 后强制要求 binlog_checksum=NONE)。执行前先验证:
-
SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = 'group_replication';—— 返回ACTIVE才表示插件已加载 -
SHOW VARIABLES LIKE 'version';确认不是 5.7.13 或更旧版本(插件不可用) - 若返回空行,需先执行
INSTALL PLUGIN group_replication SONAME 'group_replication.so';,注意路径要匹配实际插件位置(如/usr/lib/mysql/plugin/group_replication.so)
my.cnf 必须设置的 5 个关键项
漏掉任意一项,节点无法加入组或反复退出。尤其注意 server_id 和 group_replication_local_address 必须全局唯一且可被其他节点解析(不能写 localhost 或 127.0.0.1):
-
server_id = 1(每台机器递增:2、3) -
gtid_mode = ON且enforce_gtid_consistency = ON(否则插件拒绝启动) -
binlog_format = ROW+log_bin = binlog+log_slave_updates = ON -
group_replication_group_name = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"(所有节点必须完全一致,建议用uuidgen生成) -
group_replication_local_address = "maria-01:33061"(主机名必须能被ping通,端口不能被占用)
创建复制用户并关闭 SQL_LOG_BIN
在每个节点上执行时,必须临时禁用二进制日志,否则创建用户的操作会被同步到其他节点,引发循环复制或权限冲突:
SET SQL_LOG_BIN = 0; CREATE USER 'rpl_user'@'%' IDENTIFIED BY 'StrongPass123!'; GRANT REPLICATION SLAVE ON *.* TO 'rpl_user'@'%'; FLUSH PRIVILEGES; SET SQL_LOG_BIN = 1; CHANGE MASTER TO MASTER_USER = 'rpl_user', MASTER_PASSWORD = 'StrongPass123!' FOR CHANNEL 'group_replication_recovery';
注意:MASTER_PASSWORD 在 MySQL 8.0.31+ 已弃用,改用 MASTER_AUTO_POSITION = 1,但 group_replication_recovery 通道仍需显式指定用户凭证。
启动组时 bootstrap 只能执行一次
首次初始化集群必须由第一个节点执行 group_replication_bootstrap_group = ON,其余节点只能设为 OFF。误操作会导致脑裂:
- 节点 1 启动前,在配置文件中临时加一行:
group_replication_bootstrap_group = ON - 启动 MySQL,连接后执行:
START GROUP_REPLICATION; - 确认状态:
SELECT * FROM performance_schema.replication_group_members;显示ONLINE后,立刻执行:SET GLOBAL group_replication_bootstrap_group = OFF; - 再配置节点 2/3 并启动,它们会自动从节点 1 拉取全量数据(通过
group_replication_recovery通道)
如果某节点启动失败并卡在 RECOVERING,大概率是 group_replication_group_seeds 配置错误或防火墙未放开 33061 端口——这个端口专用于组内 Paxos 通信,和 MySQL 主端口 3306 完全无关。











