日期:2026-07-11
难度:中等
标签:#面试 #MySQL #数据迁移 #CDC #场景题 #VIP
一句话答案
采用兼容性改造、全量快照、binlog/CDC 增量同步、持续校验和灰度切流,在短暂写栅栏下追平最后增量后切换,并保留旧库回滚窗口。
面试口语版
不停服迁移的核心是把历史数据和迁移期间的新写入都送到新库。先做容量、字符集、账号权限和 SQL 兼容评估,应用改为支持新旧数据源;在一致性快照位点做全量迁移,同时从该位点消费 binlog 增量。全量结束后持续追平并对行数、校验和与核心业务账目做核对。随后灰度读新库,对比结果;写切换前设置短暂写栅栏或可靠双写,等待 CDC 延迟归零,再切主写。切换后旧库只读保留一段时间,明确回切方向,避免双主无序写造成冲突。
原理拆解
flowchart LR
A[兼容改造] --> B[全量快照]
B --> C[CDC 增量追平]
C --> D[持续校验]
D --> E[灰度读新库]
E --> F[写栅栏/最后追平]
F --> G[切换写流量]
G --> H[观察与回滚窗口]
关键细节
- 全量与增量必须用同一一致性位点衔接,否则会丢数据或重复。
- 双写要处理先后顺序、部分失败、幂等和补偿,不能把它当天然强一致。
- 校验不仅看行数,还要分片 checksum、抽样字段和业务账务对账。
- “不停服”通常允许极短写栅栏,不等于完全没有延迟或风险。
面试官追问
- 全量期间数据变化如何捕获?
- 双写一边失败怎么办?
- 切换后如何安全回滚?
- 主键冲突如何处理?
高分补充
迁移前要演练限速、暂停、续传和回滚;目标不是只完成切换,而是任何阶段都能解释数据状态。
学习清单
- 能画出全量、CDC、校验、灰度、切写、回滚链路。