数据库上云完整流程图

MySQL & Redis 迁移至云端的全流程详解 | 按执行顺序展示

📋 整体上云流程(按执行顺序)

阶段一:准备

评估与规划

在开始迁移前,必须完成充分的评估和准备工作,这是整个迁移成功的基础。

执行任务

  • 业务场景评估:读多写少?事务要求?数据量级?
  • 容量规划:预估存储空间、内存、CPU需求
  • 选型决策:单机/主从/集群 vs 云数据库规格
  • 云服务商对比:阿里云/腾讯云/AWS/华为云
  • 制定迁移方案:选择迁移工具(DTS/备份恢复/双写)
  • 确定迁移窗口:业务低峰期,预留足够时间
阶段二:搭建

云端环境准备

在云上创建目标数据库实例,配置网络和安全策略。

执行任务

  • 创建云数据库实例(MySQL/Redis)
  • 配置 VPC 网络 / 安全组 / 白名单
  • 设置参数组(字符集、连接数、内存策略)
  • 开启备份策略和日志
  • 创建应用访问账号(权限最小化原则)
  • 验证网络连通性(telnet/ping 测试)
阶段三:同步

数据同步

这是最核心的阶段,需要将源库数据完整、同步地迁移到云端。

执行任务

  • 方式A - DTS迁移:配置全量+增量同步任务
  • 方式B - 备份恢复:导出备份文件 → 上传云存储 → 导入
  • 方式C - 双写方案:应用层同时写入新旧库
  • 监控同步进度和延迟
  • 定期校验数据一致性
  • 记录 Binlog 位点 / RDB 快照位置
阶段四:割接

业务割接

在低峰期停止写入,进行最终数据校验后切换流量。

执行任务

  • 通知业务方准备进入割接窗口
  • 等待增量同步追平(数据一致)
  • 停止应用写入(或开启只读)
  • 断开所有数据库连接
  • 执行最终数据校验(记录数、内容抽样)
  • 修改连接串:老库地址 → 新库地址
  • 启动应用,验证功能正常
阶段五:观察

观察与验证

割接后持续观察,确保云端运行稳定。

执行任务

  • 监控核心指标:QPS、延迟、连接数、CPU、内存
  • 验证业务功能:增删改查是否正常
  • 检查日志:确认无异常错误
  • 对比性能:是否比预期更好/更差
  • 保留源库:建议保留 7-30 天
  • 准备回滚方案:随时可切回
阶段六:收尾

完成与归档

确认一切正常后,完成迁移并归档文档。

执行任务

  • 连续稳定运行 48-72 小时后,确认迁移成功
  • 下线源库(或按需保留一段时间)
  • 更新监控告警配置
  • 更新文档:连接方式、账号密码、备份策略
  • 复盘总结:记录问题、耗时、经验

🔄 双写方案详解(灰度切换)

双写方案可以实现几乎0停机的平滑迁移

1
第一阶段:单写旧库(不变)
灰度比例:旧库 100% | 新库 0%
应用
老数据库
✅ 当前状态 📝 准备阶段:云端实例已创建 📝 应用代码:预留双写开关
2
第二阶段:开始双写(同步进行)
灰度比例:旧库 100% | 新库 100%(写入) | 读:旧库 100%
应用
老数据库
||
云数据库
⚙️ 双写逻辑:先写旧库成功 → 再写新库
📋 代码改造:应用层同时写入两个库 📋 失败处理:新库写入失败记录日志,不影响旧库 📋 事务注意:新旧库事务独立,不要嵌套
3
第三阶段:读取灰度切换
灰度比例:旧库写 100% | 新库写 100% | 读:旧库 70% → 新库 30%
应用
70%
老数据库
30%
云数据库
↑ 读取流量按比例分发
📋 灰度策略:按用户ID/请求ID取模分流 📋 功能验证:新库读取数据是否正确 📋 逐步提升:30% → 50% → 80% → 100%
4
第四阶段:全量切换(双写结束)
灰度比例:旧库 0% | 新库 100% | 写读均在云端
应用
☁️ 云数据库
✅ 读取全部切换到云端 ✅ 关闭双写逻辑 ✅ 保留老库观察一段时间

🚀 割接切换流程(停机迁移方案)

适用于对停机时间有容忍度的场景,流程更简单直接

1
通知与准备
提前通知业务方,告知停机窗口时间
✅ 已完成
2
进入停机窗口
业务低峰期,停止所有写入操作
🔄 进行中
3
等待增量同步追平
确认源库与目标库数据完全一致
⏳ 待执行
4
断开所有连接
kill 残留连接,确保无活动事务
⏳ 待执行
5
最终数据校验
SELECT COUNT(*) 比对,抽检数据内容
⏳ 待执行
6
修改连接配置
DNS / VIP / 连接串:老库地址 → 新库地址
⏳ 待执行
7
启动应用
验证连接成功,功能正常
⏳ 待执行
8
业务验证
核心业务流程走一遍,确认无异常
⏳ 待执行

⏱️ 双写时序流程图

展示双写过程中各组件的交互时序

时间
应用
老数据库
云数据库
T1
请求写入数据
T2
写入老库 ✓
T3
双写:写入云库 ✓
T4
返回成功给应用
📌
关键点:失败处理
云库写入失败时:记录日志 → 标记补偿队列 → 不阻塞业务(最终一致性)

⏪ 回滚方案

任何时候发现问题,都可以快速回滚到源库

⚠️ 回滚触发条件

  • 云端数据库连接失败、频繁超时
  • 性能严重下降,响应时间翻倍甚至更多
  • 数据丢失或数据不一致
  • 核心功能不可用

📋 回滚步骤 1

停止应用所有写入操作,确认当前请求处理完毕

📋 回滚步骤 2

修改连接配置:新库地址 → 老库地址

📋 回滚步骤 3

启动应用,验证老库连接正常

📋 回滚步骤 4

检查老库数据完整性,必要时从备份恢复

📋 回滚步骤 5

分析云端失败原因,修复后重新迁移

📋 回滚原则

回滚操作必须在 30 分钟内完成,否则影响业务