Skip to content

主从复制与高可用

1. 这是什么

主从复制用于把主库的数据变更同步到从库。
高可用则关注数据库节点故障时系统如何保持服务能力。

一句话理解:

  • 主从复制解决的是“数据怎么从主库同步出去”
  • 高可用解决的是“主库或节点出问题时怎么办”

2. 为什么重要

数据库往往是系统最关键的状态中心。
如果不理解复制和高可用,系统在这些场景下会很被动:

  • 扩展读能力
  • 数据容灾
  • 节点故障恢复
  • 故障切换

3. 先建立直觉:有从库不等于天然高可用

这是学习这章最重要的一条直觉。

很多人会以为:

  • 有主从复制
  • 就已经高可用了

其实不是。
复制只说明:

  • 数据在同步

但高可用还要额外解决:

  • 节点故障检测
  • 角色切换
  • 业务接入切换
  • 延迟一致性问题

4. 核心内容

4.1 Binlog

MySQL 主从复制最核心的基础之一是:

  • Binlog

你可以先把它理解成:

  • 主库上的变更日志

从库正是基于这些变更日志去追赶主库状态。

4.2 主从复制基本流程

学习阶段先记这条主线就够用:

  1. 主库写入数据并记录 binlog
  2. 从库拉取主库日志
  3. 从库重放日志
  4. 从库数据逐步追平主库

所以复制不是“瞬时魔法同步”,而是一个:

  • 拉取 + 重放 + 追平

的过程。

4.3 读写分离

主从复制很常见的落地方向是:

  • 主库负责写
  • 从库负责读

它的价值在于:

  • 分担读压力

但它也带来新的问题:

  • 主从延迟
  • 读到旧数据

4.4 复制延迟

复制延迟是主从架构里非常关键的问题。
典型现象是:

  • 数据已经写入主库
  • 但从库还没追上
  • 结果读请求读到了旧值

这对这些场景尤其敏感:

  • 写后立刻读
  • 强一致查询
  • 状态流转类业务

4.5 故障切换

高可用体系里最关键的问题之一就是:

  • 主库挂了以后,谁接替它

这通常涉及:

  • 主从角色切换
  • 服务发现或连接配置切换
  • 业务恢复过程

4.6 高可用方案基本思路

学习阶段先抓住概念主线即可:

  • 复制提供数据同步能力
  • 监控和选主机制提供切换依据
  • 接入层切换保证业务流量继续可达

5. 学习重点

这一章最重要的是掌握:

  • 主从复制依赖 binlog 等日志机制
  • 复制的主要目标是扩展读能力和容灾
  • 读写分离会带来一致性风险
  • 高可用一定伴随切换成本和管理复杂度
  • 有复制不等于真正高可用

6. 常见问题

6.1 读写分离后忽略主从延迟

这会让业务在“写后马上读”场景下出现诡异问题。

6.2 只关注吞吐,不关注故障恢复

这会让系统平时看起来很强,一出故障就很脆。

6.3 认为有从库就天然高可用

复制和高可用不是同一件事。

7. 动手验证

当前环境没有 mysql 客户端,也没有可直接操作的主从集群,所以这一节改成“架构验证步骤 + 观察点”。

7.1 复制链路验证思路

如果你在真实 MySQL 环境中做实验,建议重点观察:

sql
SHOW MASTER STATUS;
SHOW REPLICA STATUS\G

或旧版本兼容命令:

sql
SHOW SLAVE STATUS\G

重点看:

  • 当前主库 binlog 位点
  • 从库复制线程状态
  • 延迟时间

7.2 读写分离一致性演练

你可以设计一个最小场景:

  1. 向主库插入一条新记录
  2. 立刻从从库查询
  3. 观察是否立即可见

这个实验很适合理解:

  • 主从延迟为什么会变成业务问题

7.3 高可用思考题

可以把自己代入生产环境问三个问题:

  1. 主库挂了以后,谁来发现?
  2. 发现后,谁来切换角色?
  3. 切换后,应用连接怎么更新?

这三个问题答不完整,就说明“复制”和“高可用”还没有真正连起来。

8. 练习建议

  • 画出主从复制流程图
  • 思考一个读写分离场景下的一致性风险
  • 总结常见数据库高可用方案差异
  • 用自己的话解释“为什么有从库不等于高可用”

9. 自测问题

  • MySQL 主从复制依赖什么日志机制?
  • 主从延迟会带来什么业务问题?
  • 为什么“有复制”不等于“高可用”?
  • 读写分离为什么会引入一致性风险?

10. 自测核对要点

  • Binlog 是主从复制的重要基础
  • 主从复制主要解决扩展读能力和容灾问题
  • 主从延迟会直接影响业务一致性体验
  • 高可用必须包含故障检测、切换和接入恢复能力