不能直接平滑迁移。Galera Cluster与MGR底层协议、事务认证、状态传输机制完全不同,无原生升级路径;必须停写后逻辑导出、初始化MGR集群、校验一致性并调整应用连接逻辑。

不能直接平滑迁移。Galera Cluster 和 MySQL Group Replication(MGR)是两套互不兼容的同步复制机制,底层协议、事务认证方式、状态传输逻辑完全不同,没有原生的“升级路径”或“在线切换”能力。
为什么 Galera 无法直接切换到 MGR
Galera 使用 Certification-Based Replication(CBR),依赖 wsrep API 和全局事务序号(GTID-like 的 seqno),所有节点必须运行 Galera 插件;而 MGR 基于 Paxos 协议 + MySQL 原生 GTID,要求 gtid_mode=ON、enforce_gtid_consistency=ON,且完全不识别 wsrep 状态变量和写集格式。两者在以下关键点上不可互通:
-
SHOW STATUS LIKE 'wsrep_%'输出的全部字段在 MGR 中不存在,反之performance_schema.replication_group_members在 Galera 中也不存在 - Galera 的 SST/IST 传输使用 xtrabackup 或 rsync,MGR 的分布式恢复(distributed recovery)只接受 binlog + relay log 回放,不接受物理快照
- Galera 要求所有节点使用
REPEATABLE-READ隔离级别,MGR 允许READ-COMMITTED,且对隔离级别无强制约束 - Galera 的多主写入默认允许冲突检测后回滚(如主键冲突触发
WSREP_ERROR: 1213),而 MGR 多主模式下冲突会直接报错ER_GR_APPLIER_CONFLICT并中断事务
可行的迁移路径:停写 + 逻辑导出 + 初始化 + 切流
真实生产环境(如你提到的 780G BC-Linux 迁移场景)必须走「业务可接受的短时停写」流程,而非“零停机”。核心步骤不是“切换集群”,而是“重建服务”:
- 在 Galera 集群中选定一个节点执行
FLUSH TABLES WITH READ LOCK,获取当前SHOW MASTER STATUS的 binlog 文件名与位置(注意:该位置是 Galera 自身的 binlog,非 wsrep seqno) - 用
mysqldump --single-transaction --routines --triggers --databases db1 db2导出全量逻辑数据(务必加--set-gtid-purged=OFF,否则 dump 会注入无效 GTID set) - 在目标 MGR 三节点集群完成初始化后,先关闭
group_replication_start_on_boot=OFF,逐个节点导入 dump;导入完成后,再启用 MGR 插件并加入组 - 导入期间,Galera 集群需保持只读(
SET GLOBAL super_read_only=ON),避免新写入导致数据差 - 切流前,用
pt-table-checksum对比 Galera 某节点与 MGR 主节点的表一致性(注意:MGR 单主模式下仅 Primary 可写,checksum 必须连 Primary 执行)
最容易被忽略的兼容性陷阱
很多团队卡在细节上不是因为操作不会,而是低估了存储引擎和 SQL 行为差异:
- Galera 默认禁用
MyISAM,但若旧库存在 MyISAM 表,mysqldump不报错却导出无效 DDL;MGR 完全不支持 MyISAM,导入必失败 —— 必须提前ALTER TABLE t ENGINE=InnoDB - Galera 允许空字符串插入
NOT NULL字段(取决于 SQL mode),而 MGR 严格遵循 MySQL 8.0 默认 strict mode,会报ER_BAD_NULL_ERROR - Galera 的
wsrep_OSU_method设为TOI时可在线改表,但 MGR 不支持在线 DDL 同步(DDL 被视为事务,需所有节点成功执行),迁移后首次 DDL 必须手动在每个节点执行或用mysqlsh的dba.configureLocalInstance()校准 - 应用连接串中的
failover逻辑(如 JDBC 的loadBalance)在 Galera 下有效,在 MGR 下必须替换为MySQL Router或ProxySQL,否则写请求可能发到 Secondary 节点直接报错
真正耗时的从来不是配置 MGR 参数,而是验证每一张表的 DDL 兼容性、每一类业务 SQL 在 strict mode 下的行为、以及 Router 路由策略与现有连接池的耦合深度。别信“自动迁移工具”,它们只处理 schema 和数据,不处理语义。


















