📄 一句话概括
同步复制=主库每写一笔,从库跟着抄一笔:多台机器数据一致地跑同一个库——读写分离靠它、故障切换靠它、异地容灾也靠它。
📝 本节和前面几节的关系
7-8 的横向扩展说「加机器」,本节回答「多台机器的数据怎么保持一致」。它是读写分离的基石,也是 6-6 备份的升级版:备份是快照(要动手恢复),复制是活的副本(实时跟着走)。
一、复制的基本模型
应用写 → 主库(唯一可写)
│ 实时同步(日志/变更流)
▼
从库1、从库2、从库3(只读副本,扛查询)
- 主库:负责写(INSERT/UPDATE/DELETE)
- 从库:复制主库的变更,负责读(SELECT)
- 主库宕机 → 提拔一台从库当新主库(故障切换)
二、同步 vs 异步复制
| 同步复制 | 异步复制 | |
|---|---|---|
| 主库提交时机 | 等所有从库确认后才算成功 | 先提交,变更随后送达 |
| 一致性 | 强(主从时刻一致) | 弱(有延迟,主新从旧) |
| 写入速度 | 慢(要等网络往返) | 快 |
| 主库挂掉时 | 从库不丢数据 | 可能丢最后一小段 |
取舍口诀:钱的事用同步,浏览的事用异步——余额、订单要强一致;文章浏览量晚几秒无所谓。
三、动手 Demo:纸面推演一次故障切换
正常时:主库 M 写入 order=1001 → 从库 S1/S2 秒级跟进
事故:M 断电(7-1 物理威胁)
切换:监控发现 M 失联(6-5)→ 提拔 S1 为新主
→ S2 改为跟随 S1 → 应用连接串切到 S1
恢复:M 修好后降级为从库,追平进度
—— 整套动作的前提:复制链路健康 + 切换流程演练过
【准备块】无——单机 SQLite 做不了真复制,推演记住「主从分工+切换前提」即可。
四、30 秒实验
把复制想成抄笔记:同步复制=你每写一笔同桌就核对一笔(永远一致,但你写字变慢);异步复制=下课再对(你写得快,但同桌可能漏最后一题)。考试(资金)选哪种?
五、常见误区
- 「复制=备份」:复制是实时冗余,但误删会立刻同步到所有从库(7-1 的 RAID 同理)——备份依然不可替代
- 「从库数据永远最新」:异步复制有延迟;读了从库再写回主库可能踩到旧数据
- 「复制配置完就不用管」:主从延迟要监控(6-5)、切换要演练——没演练过的切换=赌命
自测三问
1. 主库和从库各负责什么?(主库唯一可写;从库只读副本扛查询) 2. 同步与异步的核心取舍?(一致性 vs 写入速度——资金用同步、浏览用异步) 3. 为什么复制不能替代备份?(误删同步到全部副本——只有备份能回到过去)- ☐ 下一节(7-10 SQL注入-从外部操作数据库的问题)
相关笔记
- 纵向扩展、横向扩展-均衡负载 —— 读写分离的蓝图在本节落地
- 备份、全量备份、差分备份、增量备份-定期记录当前的数据 —— 复制与备份是两道不同的防线
- SQL注入-从外部操作数据库的问题 —— 下一节:全章收官,外敌入侵的经典手法
- 🗄️ 数据库基础 · 索引 —— 全课路线图