MySQL的高可用

1. 主从复制 + 手动 / 自动切换(最基础)

  • 原理:一台主库负责写入,多台从库负责读取 / 备份,主库挂了,从库顶上。
  • 高可用方式:
    • 手动切换:运维人员手动改配置、切流量
    • 自动切换:用工具接管(比如 MHA)
  • 举例:主库在上海,从库在杭州,主库断电,工具自动把杭州从库升为主库,业务无感。
  • 优点:简单、成本低、所有 MySQL 版本都支持
  • 缺点:纯主从没有自动故障感知,必须搭配工具

2. MHA(经典自动切换方案)

  • 企业最常用的轻量高可用方案
  • 功能:自动检测主库故障 → 自动选最优从库 → 自动切换 → 自动修复复制关系
  • 举例:主库宕机 30 秒内完成切换,业务只短暂卡顿,无需人工操作
  • 优点:切换快、稳定、不侵入 MySQL、适配所有版本
  • 缺点:无法做到绝对零数据丢失(极端场景丢极少量)

3. MySQL InnoDB Cluster(官方原生高可用)

  • MySQL 官方推出的集群方案,自带高可用
  • 原理:多节点同步数据,自动选举主节点,故障自动剔除
  • 举例:3 台服务器组成集群,任意一台挂掉,剩下两台继续提供服务
  • 优点:官方支持、稳定、配置简单、数据强一致
  • 缺点:只支持新版 MySQL,对服务器数量有要求

4. Galera Cluster(多主高可用)

  • 特点:所有节点都能读写,没有主从之分
  • 优势:任意节点挂了都不影响写入,切换无感知
  • 举例:4 节点集群,坏 2 台依然正常运行,业务不用改连接地址
  • 缺点:对网络质量要求高,写入性能略低

5. 主从 + VIP + 代理层(企业级标准架构)

  • 最稳定、最通用的生产架构
  • 结构:主从复制 → 自动切换工具 → VIP(虚拟 IP)/ 代理 → 业务
  • 举例:业务只连一个虚拟地址,主库挂了,地址自动飘到新主库,代码完全不用改
  • 代理常用:HAProxy、MaxScale
  • 优点:业务无感知、高可用最彻底、可搭配读写分离
  1. 数据一致性

    • 异步复制:性能好,可能丢数据
    • 半同步复制:性能适中,基本不丢数据(企业首选)
    • 强一致:完全不丢数据,性能稍降
  2. 故障自动切换高可用≠双机热备,必须满足:

    • 自动检测故障
    • 自动选举新主库
    • 自动切换流量
    • 自动修复复制
  3. 读写分离高可用常搭配读写分离:主库写、从库读,提升性能同时提高可用性。

  • 小公司 / 简单业务:主从 + MHA

  • 中大型企业 / 金融 / 支付:半同步复制 + MHA + 代理 + VIP

  • 追求官方稳定:InnoDB Cluster

  • 必须多节点同时写入:Galera

  • 高可用不能替代备份:删库、误操作,高可用救不了,必须定期备份

  • 网络差的环境,不要用强一致集群

  • 切换必须测试:不演练的高可用,故障时一定会出问题


总结

  • MySQL 高可用核心:主从复制 + 自动切换 + 流量统一入口
  • 最实用组合:半同步主从 + MHA 自动切换 + 代理层
  • 最终效果:单节点故障 → 秒级 / 数十秒切换 → 业务无感 → 数据安全
相关推荐
eEKI DAND29 分钟前
对Docker部署的MySQL中的数据进行备份恢复
mysql·docker·容器
untE EADO1 小时前
在 MySQL 中使用 `REPLACE` 函数
android·数据库·mysql
STAT abil2 小时前
MySQL 的mysql_secure_installation安全脚本执行过程介绍
数据库·mysql·安全
geBR OTTE6 小时前
flask后端开发(8):Flask连接MySQL数据库+ORM增删改查
数据库·mysql·flask
识君啊6 小时前
中小厂数据库事务高频面试题
java·数据库·mysql·隔离级别·数据库事务·acid
c***89206 小时前
在 Ubuntu 上安装 MySQL 的详细指南
mysql·ubuntu·adb
Bert.Cai7 小时前
MySQL CONCAT()函数详解
数据库·mysql
Bert.Cai7 小时前
MySQL DDL简介
数据库·mysql
我们的五年8 小时前
mysql报错,net_async_status
数据库·mysql·adb
hINs IONN8 小时前
在Mysql环境下对数据进行增删改查
数据库·mysql