mysql 读写分离、高可用方案
一、mysql的高可用架构
| 特性 | 传统主从复制 | MGR (Group Replication) | InnoDB Cluster |
|---|---|---|---|
| 高可用 | ❌ 依赖外部工具(如 MHA) | ✅ 原生支持自动主选举 | ✅ 自带高可用管理 |
| 读写分离 | ✅ 需要手动或中间件实现 | ✅ 支持(需要中间件) | ✅ 支持自动读写路由 |
| 自动主备切换 | ❌ 需要外部工具 | ✅ 支持 | ✅ 支持 |
| 一致性保证 | 异步或半同步,可能数据丢失 | 强一致性(基于 Paxos) | 与 MGR 相同 |
| 部署复杂度 | 简单 | 中等偏高 | 高(含 MySQL Shell、Router) |
| 成熟度 | 非常成熟、广泛使用 | 新一代方案,逐步成熟 | 相对新,依赖官方生态 |
| 管理工具 | MHA、Orchestrator 等 | 无需额外工具 | MySQL Shell 管理 |
| 节点数量限制 | 理论无限 | 推荐奇数节点,≥3,≤9 | 同上 |
| 官方支持 | ✅ | ✅ | ✅(推荐方向) |
1、 ✅ 传统主从复制
-
特点:一主多从,异步/半同步复制。
-
优点:
-
架构简单,部署方便。
-
社区资料丰富,成熟稳定。
-
灵活支持读写分离架构。
-
-
缺点:
-
不具备自动主备切换。
-
主库宕机后需要手动干预(或借助 MHA、Orchestrator 等第三方工具)。
-
数据一致性依赖于半同步,仍可能有延迟或数据丢失。
-
✅ 适用场景:
-
中小型系统、对一致性要求不高。
-
成本敏感,追求部署简单的项目。
✅ 复制过程:

| 步骤 | 角色 | 动作描述 |
|---|---|---|
| 1 | Master | 主库执行事务(INSERT/UPDATE/DELETE),写入 binlog(二进制日志)。 |
| 2 | Master | Binlog Dump 线程主动将 binlog 事件推送给从库的 I/O 线程。 |
| 3 | Slave | 从库的 I/O 线程 接收 binlog 事件,并写入本地 relay log(中继日志)。 |
| 4 | Slave | 从库的 SQL 线程 读取 relay log 中的事务,重放(Replay)到从库数据库。 |
| 5 | Slave | 从库数据与主库同步完成。 |
2、 ✅ MySQL Group Replication(MGR)组复制
-
特点:MySQL 官方提供的原生多主/单主复制方案,基于 Paxos 实现强一致性。
-
模式:
-
单主模式(Single-Primary):1 写多读。
-
多主模式(Multi-Primary):所有节点可写(不推荐,冲突处理麻烦)。
-
-
优点:
-
高可用,自动主选举。
-
数据强一致性,适合金融/核心业务。
-
与 ProxySQL、MySQL Router 等兼容。
-
-
缺点:
-
部署配置较复杂。
-
不支持级联复制,要求节点之间网络稳定。
-
吞吐受限于写一致性协议。
-
✅ 适用场景:
-
对一致性要求高(如金融、电商订单等)。
-
架构希望减少人为操作,自动容灾。
-
有能力维护高质量网络与部署环境。
3、 ✅ InnoDB Cluster
-
特点:是基于 MGR + MySQL Shell + MySQL Router 封装的官方完整 HA 解决方案。
-
组件组成:
-
MySQL Group Replication(核心复制协议)
-
MySQL Shell(管理集群)
-
MySQL Router(客户端读写路由)
-
-
优点:
-
完全官方解决方案,生态闭环。
-
自带故障恢复、自动重连、拓扑感知。
-
管理操作便捷(Shell 自动化)。
-
-
缺点:
-
依赖官方组件,不够灵活。
-
部署略复杂,升级受限于版本兼容。
-
不适合和非官方组件混合使用。
-
✅ 适用场景:
-
对官方支持依赖强(如云平台、金融、政务)。
-
想要“一站式”高可用部署。
-
不想用第三方中间件管理。
二、读写分离中间件
| 中间件 | 语言 | 优点 | 适用场景 |
|---|---|---|---|
| ProxySQL | C++ | 功能最全,灵活性高,性能强大,企业级首选 | 高并发、高可用生产环境 |
| MySQL Router | C++ | MySQL 官方支持,自动路由,简单可靠 | 搭配 InnoDB Cluster、MGR |
| MaxScale(MariaDB) | C++ | 丰富插件机制,安全控制、读写分离、审计功能强 | MariaDB/MariaDB Galera |
| Atlas(Qihoo 360) | C | 轻量级,支持分库分表,部署简单 | 中小型业务系统 |
| Cobar(阿里早期) | Java | 分库分表读写分离,早期产品,已不再维护 | 历史系统或定制需求 |
| MyCAT(国产开源) | Java | 分库分表+读写分离,支持 SQL 解析 | 中小项目、学习实验环境 |
| ShardingSphere-Proxy | Java | 分布式数据库代理层,支持分库分表 + 读写分离 + 分布式事务 | 对分布式有需求的中大型业务 |
| DBProxy(网易) | C++ | 高频业务优化、读写分离、负载均衡 | 私有业务系统内部使用 |
1、ProxySQL(强烈推荐)
-
🔧 功能:读写分离、SQL 路由规则、自定义负载均衡、连接池、SQL 缓存、防火墙、监控等。
-
🏷 优点:
-
规则非常灵活(基于用户、SQL 类型、正则等)。
-
配合 MGR/InnoDB Cluster 可实现自动主从切换。
-
支持连接后端多个实例组(多租户架构)。
-
-
❗ 缺点:学习曲线略高,需熟悉配置。
👉 [适合]:追求企业级高可用与性能的系统
2、MySQL Router
-
🔧 功能:只提供自动连接转发和负载均衡(读/写路由)。
-
🏷 优点:
-
官方产品,完美支持 MySQL InnoDB Cluster。
-
自动感知主从拓扑,应用透明切换。
-
-
❗ 缺点:
-
功能比较基础(不支持 SQL 路由规则、缓存、SQL 防火墙等)。
-
👉 [适合]:用官方方案做 HA 的项目,或对 ProxySQL 配置要求过高的用户
3、MaxScale
-
MariaDB 官方维护,支持 MySQL(兼容)和 MariaDB。
-
支持读写分离、负载均衡、安全控制、查询重写、审计日志等。
-
提供图形界面管理(GUI)。
👉 [适合]:使用 MariaDB 的项目
4、ShardingSphere-Proxy
-
Apache 顶级项目。
-
读写分离 + 分库分表 + 分布式事务,Java 开发,插件化强。
-
支持异构数据库、可编程规则。
👉 [适合]:复杂分布式架构、有微服务/中台需求的企业系统
5、MySQL Proxy(全称:MySQL Proxy by Oracle)
曾经是 MySQL 官方推出的 SQL 中间层代理工具,用于实现 简单的读写分离、SQL 过滤、监控 等功能。
但需要注意的是:
⚠️ MySQL Proxy 项目已基本停止维护,性能与稳定性远落后于现代主流中间件(如 ProxySQL、MySQL Router),不再推荐用于生产环境。
三、读写分离 + 高可用组合方案
1、方案推荐
| 方案 | 架构搭配 |
|---|---|
| 企业生产级读写分离 | MySQL MGR + ProxySQL |
| 官方全套解决方案 | InnoDB Cluster + MySQL Router |
| 分布式数据库方案 | ShardingSphere-Proxy + MySQL 后端 |
| 教学/快速搭建 | MyCAT + 主从复制 |

浙公网安备 33010602011771号