核心概念
MySQL 高可用(High Availability, HA)核心目标是保障数据库服务持续在线、数据不丢失,通过冗余设计与故障自动转移消除单点故障,核心指标:
RTO(Recovery Time Objective):故障恢复时间,越短越好(通常秒级~分钟级)
RPO(Recovery Point Objective):故障后数据丢失量,越接近 0 越好
二、主流高可用方案总览
- 官方原生方案
主从复制(Replication):基础异步 / 半同步复制,一切 HA 方案基石
MySQL Group Replication(MGR):官方原生组复制,基于 Paxos,强一致、自动故障转移
InnoDB Cluster:MGR+MySQL Shell+MySQL Router 一体化集群,生产级标准方案
InnoDB ClusterSet:跨地域多集群级联,实现异地容灾
- 第三方开源方案
MHA(Master High Availability):经典主从自动切换工具,兼容旧版 MySQL
MMM(Master-Master Replication Manager):双主复制管理,早期常用、维护停滞
PXC/Galera Cluster:同步多主集群,强一致、高并发写入
三、方案详解(含原理、配置、优缺点、场景)
方案 1:主从复制(异步 / 半同步)
原理
主库(Master)记录二进制日志(Binlog),从库(Slave)通过 I/O 线程拉取、SQL 线程重放,实现数据复制。
异步复制(默认):主库写成功即返回,不等待从库确认,性能高、有数据丢失风险
半同步复制(MySQL 5.7+):主库事务提交前,等待至少 1 个从库 ACK,降低数据丢失风险
关键配置(my.cnf)
主库
ini
mysqld
server-id=1
log_bin=mysql-bin
binlog_format=ROW
gtid_mode=ON
enforce_gtid_consistency=ON
从库
ini
mysqld
server-id=2
relay_log=relay-bin
log_slave_updates=ON
read_only=ON
gtid_mode=ON
enforce_gtid_consistency=ON
优缺点
✅ 优点:架构简单、兼容性强、性能损耗小、易部署
❌ 缺点:故障转移需人工 / 第三方工具、无自动选主、存在脑裂风险
适用场景
读多写少、对一致性要求不极高的业务
读写分离、数据备份、读写扩展
方案 2:MGR(MySQL Group Replication)
原理
基于Paxos 分布式共识协议,多 MySQL 节点组成复制组,通过分布式事务认证保证强一致,支持单主模式(推荐)、多主模式。
单主:1 个 Primary 读写,其余 Secondary 只读,自动选主
多主:所有节点可写,内置冲突检测
核心要求
MySQL 5.7.17+ / 8.0+
仅支持 InnoDB、必须有主键
GTID=ON、binlog_format=ROW
奇数节点(3/5/7),防脑裂
关键配置(my.cnf)
ini
mysqld
server-id=1
gtid_mode=ON
enforce_gtid_consistency=ON
binlog_format=ROW
log_slave_updates=ON
binlog_checksum=NONE
transaction_write_set_extraction=XXHASH64
plugin_load_add=group_replication.so
group_replication_group_name="UUID"
group_replication_local_address="IP:33061"
group_replication_group_seeds="IP1:33061,IP2:33061,IP3:33061"
group_replication_single_primary_mode=ON # 单主模式
group_replication_enforce_update_everywhere_checks=OFF
优缺点
✅ 优点:官方原生、强一致、自动故障转移(秒级)、无第三方依赖、支持读写分离
❌ 缺点:仅支持 InnoDB、多主性能损耗、网络要求高、节点数有限(≤9)
适用场景
金融、电商等强一致、高可靠核心业务
云原生、微服务架构的标准 MySQL 集群
方案 3:InnoDB Cluster(MGR 企业级封装)
架构
三大组件:
MGR:数据复制与高可用底层
MySQL Shell:集群管理、部署、监控工具
MySQL Router:轻量中间件,流量路由、读写分离、故障透明
部署步骤(MySQL Shell)
检查实例配置
shell
dba.checkInstanceConfiguration('root@node1:3306')
dba.configureInstance('root@node1:3306')
创建集群
shell
var cluster = dba.createCluster('myCluster')
添加从节点
shell
cluster.addInstance('root@node2:3306')
cluster.addInstance('root@node3:3306')
部署 Router
shell
dba.deployRouter('root@router-host')
优缺点
✅ 优点:一体化部署、可视化管理、自动读写分离、应用透明、完善监控
❌ 缺点:架构较复杂、资源消耗高于普通主从
适用场景
生产环境标准首选方案(MySQL 8.0+)
企业级核心数据库集群
方案 4:MHA(经典第三方方案)
原理
基于主从复制,Manager 节点监控主库,故障时自动选最优从库升主、补全 Binlog、VIP 漂移、从库重定向。
架构
Manager:独立监控节点
Node:部署在所有 MySQL 节点
优缺点
✅ 优点:切换快(10~30s)、兼容所有引擎、数据丢失少
❌ 缺点:2018 年后停更、不兼容 MySQL 8.0 新特性、依赖 SSH 互信、运维复杂
适用场景
MySQL 5.7 及以下版本遗留系统
传统主从架构升级 HA
方案 5:PXC/Galera Cluster
原理
同步多主复制,事务在所有节点提交成功才返回,强一致、无延迟、全节点可写。
优缺点
✅ 优点:强一致、多主写入、无单点、自动扩容
❌ 缺点:性能损耗大、DDL 锁表、网络敏感、不支持大事务
适用场景
读写均衡、强一致、低延迟要求的业务
四、方案对比选型表
表格
方案 一致性 故障转移 多主 兼容引擎 维护状态 推荐度
主从复制 最终一致 手动 / 工具 ❌ 全部 活跃 ⭐⭐⭐
MGR 强一致 自动(秒级) ✅ InnoDB 活跃 ⭐⭐⭐⭐⭐
InnoDB Cluster 强一致 自动 ✅ InnoDB 活跃 ⭐⭐⭐⭐⭐
MHA 最终一致 自动(10~30s) ❌ 全部 停滞 ⭐⭐
PXC/Galera 强一致 自动 ✅ InnoDB 活跃 ⭐⭐⭐⭐
五、高可用关键技术要点
- GTID(全局事务 ID)
唯一标识事务,简化复制、故障切换、数据一致性校验
必须开启:gtid_mode=ON、enforce_gtid_consistency=ON
- 脑裂防护
奇数节点(3/5/7)+ 多数仲裁机制
网络分区时,仅多数派节点提供服务
- 读写分离
InnoDB Cluster:Router 自动读写分离
主从 + ProxySQL/Sharding-Proxy:自定义路由策略
- 监控与告警
关键指标:节点状态、复制延迟、事务成功率、连接数
工具:Prometheus+Grafana、MySQL Enterprise Monitor、Zabbix
六、生产环境最佳实践
首选方案:MySQL 8.0 + InnoDB Cluster(单主 MGR)
节点规划:3 节点(1 主 2 从),跨机架 / 机房部署
数据安全:开启半同步、Binlog 加密、定期全量 + 增量备份
性能优化:主从分离、从库读负载均衡、大事务拆分
故障演练:定期模拟主库宕机、网络分区、数据恢复
七、官方文档参考
MySQL Replication:https://dev.mysql.com/doc/refman/8.0/en/replication.html
MySQL Group Replication:https://dev.mysql.com/doc/refman/8.0/en/group-replication.html
InnoDB Cluster:https://dev.mysql.com/doc/mysql-shell/8.0/en/mysql-innodb-cluster.html