第 6 篇:从自建 MySQL 迁移到云数据库的实战路径
数据库迁移最容易犯的错,就是把它想成搬家。好像把数据导过去、把连接串改掉、挑个低峰期切一下,就完事了。真正做过的人都知道,最难的从来不是导数据,而是怎么在业务不停、风险可控、出了问题还能退回来的前提下完成切换。
如果你的目标是把自建 MySQL 迁到云数据库,一个更靠谱的思路不是“找个周末晚上狠狠干一把”,而是把迁移拆成一串可以验证、可以中止、可以回滚的阶段。
第一步:先做盘点,不要急着建新库
迁移前第一件事不是建目标库,而是盘点现状。至少要搞清楚这些信息:
- 数据量有多大,增长速度如何
- 是否存在大表、热点表、归档表
- 哪些业务依赖强事务
- 是否存在存储过程、触发器、事件调度器
- 是否有跨库依赖、外部 ETL 或报表任务
- 当前的备份、主从、监控和权限模型是什么
很多迁移失败,不是迁移工具不行,而是依赖关系没盘清楚。常见漏项包括:
- 某个老报表任务直接连生产库跑
- 某个运营脚本依赖特定账号权限
- 某个服务偷偷用了本地时区或特定 SQL mode
- 某些触发器和事件调度器没人知道还在跑
这些东西不在架构图上,但很可能在切换当天跳出来打你。
第二步:目标不是“兼容”,而是“可运行”
很多云数据库会写“兼容 MySQL”,这句话可以信,但不能全信。兼容通常意味着大部分常规场景可用,不意味着所有行为完全一致。
你至少要重点验证这些差异:
- 核心 SQL 在目标环境的执行计划是否变化
- 连接池和驱动版本是否兼容
- 账号权限模型是否满足现有应用
- 备份恢复、监控、告警是否能接上现有体系
再展开一点,实际还要看:
- MySQL 版本差异会不会影响保留字、函数行为、字符集排序
- 参数默认值有没有变化,比如事务隔离级别、
sql_mode、大小写敏感规则 - 只读节点的一致性语义是不是和原来预期一致
- 主从延迟暴露方式有没有变化
- 慢日志、审计日志、监控指标是不是还能接到原来的系统里
迁移前发现兼容性问题,代价通常是几天验证;上线后才发现,代价通常是事故。
第三步:建立双环境验证链路
一个成熟的迁移流程,重点不是把数据同步过去,而是让你在正式切换前,多次确认目标库是可信的。
比较实用的一套做法是:
- 先做全量迁移,再持续增量同步
- 对核心表做行数校验、校验和校验、抽样字段比对
- 把只读流量或影子流量引到目标库验证查询行为
- 对关键写入链路做灰度和回放验证
这里最重要的不是“同步任务状态显示成功”,而是“业务视角验证成功”。因为迁移工具只知道数据在不在,不知道业务语义是不是对的。
比如你可以做这些更靠谱的验证:
- 核心表行数对齐
- 金额、状态、时间字段做抽样比对
- 关键查询在新旧库上的结果集做一致性比较
- 同一批影子请求在新旧环境上的响应差异监控
- 压测时观察主库、只读节点、连接池、复制延迟的表现
这一步做得越扎实,切换窗口就越不需要赌。
第四步:切换窗口只做一件事
切换窗口的原则非常简单:动作越少越好。
不要在切换当天同时做这些事:
- 升级应用版本
- 修改数据库参数
- 改造 SQL
- 新增缓存策略
- 调整基础网络拓扑
切换当天最理想的状态就是只做一件事:把流量从旧库切到新库。其他动作都应该提前做完并验证过。这样一旦出问题,定位范围才足够小。
第五步:一定准备回滚
很多迁移方案会把切换步骤写得很细,但对回滚只写一句“如有异常立即回滚”。这等于没写。
没有明确回滚条件和回滚路径的切换,本质上不是工程方案,只是一次运气测试。
你至少要把这些事写清楚:
- 什么现象出现时必须回滚
- 回滚决策由谁拍板
- 回滚后数据差异怎么处理
- 回滚路径能否在限定时间内完成
如果业务无法承受双写复杂度,那至少要保证在回滚窗口里,源库依旧保持完整可用,且切换后的一段时间内有办法把新产生的数据安全带回去,或者有明确的差异补偿方案。
一个更现实的迁移节奏
对大多数中大型系统来说,更现实的迁移节奏通常是这样:
- 完成资产盘点和风险分级。
- 创建目标库并做参数、权限、监控初始化。
- 执行全量迁移和增量同步。
- 反复做数据校验和压测。
- 先切只读或低风险流量。
- 正式切主写流量。
- 观察稳定一段时间后,再下线源库。
这个过程看起来慢,但它的好处是把风险拆散了。数据库迁移最怕的不是慢,而是把所有未知风险压缩到一个晚上。
小结
迁移数据库不是搬文件,而是迁移一套一直在跑的系统。真正值得追求的目标不是最快切过去,而是:
- 每一步都知道在验证什么
- 出问题时知道先停哪
- 必要时知道怎么退回去
很多看起来“很猛”的迁移方案,失败点都在于把切换当天当成决战日;而真正成熟的迁移,往往在切换前就已经把大部分风险消化掉了。
至此,这组云数据库系列文章完成了第一版。后续如果继续往下写,很适合再拆出几篇更实战的细分主题,比如“云上 MySQL 慢 SQL 排查套路”“数据库切换窗口 checklist”“数据库成本归因体系怎么建”“跨地域容灾演练应该怎么做”。