简介:资源为一份关于阿里云核心服务与系统数据迁移的技术文档,面向云运维工程师、解决方案架构师以及正在学习云计算的学生。文档以系统性视角介绍了OSS对象存储的桶、对象、存储类型与权限管理,RDS关系型数据库的实例、数据库、账户及备份恢复功能,SLB负载均衡的监听器、后端服务器、会话保持、健康检查与证书管理,并结合实际迁移场景说明了这些服务的协作方式与选型思路。资源为单个docx文件,大小仅1.78MB,但目录结构完整,内容层级清晰,涵盖产品概念、服务功能、应用场景及快速入门等模块。目前已有778人学习下载。读者阅读后可快速建立起对阿里云常用产品组合的整体认知,理解各服务在数据迁移中的具体作用,为后续上云方案设计或迁移实施提供实用参考。
1. 一次把 SLB-ECS-OSS-RDS 全链路搬家的真实复杂度
某公司做阿里云系统迁移,方案评审只排了两天窗口,结果 RDS 同步完发现 OSS 的 Bucket 权限策略没跟着走,SLB 健康检查对不上新 ECS 的安全组,页面能开但登录请求全部 504。这种翻车在云上迁移里太常见。SLB、ECS、OSS、RDS 四件套看着各自独立,实际串联后迁移复杂度是四个组件复杂度之和再乘以依赖关系数。这篇笔记把这套架构的迁移拆成盘点、分模块搬移、一致性校验、切换与回滚几个环节,覆盖备份命令、参数设置、校验脚本和五个高频踩坑点,适合正在做云上迁移的运维和全栈开发,照着排迁移计划就能少踩一半坑。
2. 迁移前先摸清四件套边界:盘点清单与停机窗口怎么定
迁移最容易翻车的原因不是命令写错,而是漏了组件之间的隐式依赖。SLB 依赖后端 ECS 的安全组放行,ECS 里的应用依赖 RDS 的连接串和 OSS 的访问凭证,OSS 的权限策略又可能被 RAM 角色绑定。任何一个依赖断掉,业务表现为「时好时坏」而不是「完全不可用」,排查成本反而比直接挂掉更高。
2.1 SLB、ECS、OSS、RDS 各自的迁移边界与依赖关系
先给四件套划边界。SLB 本身不存业务数据,迁移的是配置:监听协议与端口、转发规则、证书、健康检查路径、会话保持的超时时间。配置数量不大,但容易漏的是后端服务器组的权重和慢启动参数,尤其新 ECS 刚起来应用还在预热时,权重不均会把流量打到没准备好的机器上。
ECS 的迁移边界有两层:实例配置(CPU、内存、带宽、系统盘类型)和数据(系统盘内容、数据盘内容、快照)。如果只是换账号或换 region,自定义镜像是省事的路;如果顺便要做版本升级或架构调整,镜像迁移会把旧环境的坑也搬过去,此时应用层部署更合适。选型逻辑在 3.3 节展开。
OSS 的迁移边界不只是对象数据,还包括 Bucket 的权限策略、跨域规则 CORS、生命周期规则和防盗链配置。很多人只做了数据同步,结果图片在浏览器里能打开、在代码里发请求却被 CORS 拦截。RDS 的迁移边界是库表结构、数据、账号权限、参数组、白名单和安全组,其中参数组最容易被忽略——源库 max_connections 是 2000,目标库默认 200,业务高峰直接连接数打满。
依赖关系上,我一般按流量方向画一条链路:域名解析 → SLB 监听 → 后端 ECS 组 → 应用内连接 RDS / 调用 OSS。迁移的每个动作都要沿着这条链路检查上下游是否就绪。比如切 DNS 之前,SLB 的健康检查必须已经显示后端 ECS 全部正常;ECS 上的应用必须已经能连上目标 RDS;OSS 的凭证和权限必须已经实测读写通过。顺序错了,切完就是事故。画这条链路时可以用一张表格把每个组件的「上游依赖」和「下游被依赖」列出来,比如 RDS 被 ECS 上的应用依赖,而应用又依赖 RDS 的连接串配置和账号白名单,逐项打勾才算盘点完。
2.2 一张盘点清单:域名、证书、白名单、备份策略一个不能漏
动手迁移前,我习惯先按下面这张表把家底盘一遍。这张表不是从哪份标准文档抄的,是几次迁移翻车后补出来的,每一项背后都有对应的线上事故。
| 盘点项 | 具体内容 | 漏掉会怎样 |
|---|---|---|
| 域名解析 | A 记录 / CNAME 指向,TTL 值 | DNS 切完后流量走旧 SLB,新旧数据分裂 |
| SSL 证书 | 证书绑定的域名、到期时间、是否托管 | 新 SLB 没配证书,HTTPS 直接握手失败 |
| SLB 配置 | 监听端口、转发规则、健康检查、会话保持 | 流量路径错乱,部分请求 504 |
| ECS 快照 | 系统盘 / 数据盘最后有效快照 | 迁移失败时没有回滚基准 |
| RDS 账号 | 账号列表、权限、host 白名单 | 应用连接被拒,报 access denied |
| RDS 参数组 | max_connections、wait_timeout、字符集 | 连接数打满或写入报错 |
| OSS 权限 | Bucket 策略、RAM 授权、CORS、防盗链 | 文件访问 403 或被浏览器拦截 |
| 定时任务 | crontab、调度平台中的任务清单 | 新旧环境同时跑任务,数据双写冲突 |
| 应用配置 | 数据库连接串、OSS Endpoint、日志路径 | 应用起不来或日志丢失 |
| 备份策略 | RDS 自动备份、OSS 版本控制、ECS 快照策略 | 迁移后源端数据被清,无法回溯 |
表格里每一项在迁移计划中都要有明确处理动作,不能只写「确认」。比如 SSL 证书要写清楚是重新申请还是导出再导入,RDS 白名单要列清楚需要放行的 IP 或安全组 ID。我会把这张表转成迁移计划的检查项,每项标注负责人和完成时间,盘点做完迁移方案才有依据,否则后面每一步都在赌运气。
2.3 停机窗口怎么算:读多写少和写多读少的两种口径
停机窗口的估算直接决定迁移方案是「全量 + 停服」还是「全量 + 增量 + 闪断」。我先把业务按读写特征分两类来算。
读多写少的系统,典型如内容站点、报表平台,凌晨两小时写入量很低。这种场景可以这么做:先做全量备份恢复,再用增量同步把源库到目标库的差距追平,追平后观察 5 到 10 分钟,确认延迟为 0 再切流量。停服窗口只需要覆盖「停止写入 → 确认延迟归零 → 切换 DNS → 验证」这一小段,通常在 15 到 30 分钟。
写多写少的系统,比如订单、库存这类,凌晨也有持续写入。只有两种选择:要么接受更长的停服窗口,把增量追平时间也包进去;要么做双写改造——业务代码同时写源库和目标库,以源库为准,迁移完成后切主。双写改造要改 DAO 层、要做幂等处理,工作量大,但能大幅缩短最终切换窗口。增量追平阶段要盯的指标是同步延迟秒数,它受源库 binlog 产生速度和同步工具消费速度共同影响,延迟一直降不下来时先看源库是否有大事务,再看同步任务的并行度配置。
注意:不管选哪种口径,切换前都要把源 RDS 设置成只读,强制保证增量追平后不再有新写入。只读设置要提前测过权限,别等切换那一刻才发现账号没有改只读的权限。
停机窗口定下来后,还要在窗口内给「验证」和「回滚」各留出冗余时间。我见过太多方案把验证时间压到 5 分钟,结果一验证就发现线上问题,窗口直接爆掉。一般经验是验证和回滚各占窗口的三分之一,真正执行切换只占三分之一。
3. 分模块搬移实战:RDS、OSS、ECS、SLB 的执行顺序与命令
这章按「数据先走、应用跟上、流量最后切」的原则排执行顺序:RDS 迁移耗时最长要最先启动,OSS 数据量大要并行同步,ECS 镜像或应用部署等数据就绪后做,SLB 和 DNS 切换放在最后。顺序反了会导致应用先起来、连不上数据库,或者数据同步完了但应用配置还指向旧库。
3.1 RDS 数据迁移:逻辑备份与增量追平的完整命令
RDS 迁移的第一步是确定备份方式。逻辑备份用 mysqldump,优点是可跨版本、可过滤部分表、恢复时能改表结构;缺点是全量导出耗时随数据量线性增长,恢复速度比物理备份慢。物理备份基于文件级别,速度快,但依赖同版本数据库,跨大版本迁移可能不兼容。我的选型标准:数据量小于 100GB、需要过滤或变更表结构时用逻辑备份;数据量大、版本一致、追求最短恢复时间用物理备份。
逻辑备份的常用命令:
# 导出全量数据,包含建库建表语句和 INSERT mysqldump -h <源RDS内网地址> -u <迁移账号> -p \ --single-transaction --routines --triggers --events \ --master-data=2 --set-gtid-purged=OFF \ --databases <业务库名> > full_backup.sql每个参数都有讲究。--single-transaction让导出基于 InnoDB 一致性快照,过程中不锁业务表;--routines --triggers --events把存储过程、触发器、事件计划一起导出,漏了这三个,应用跑起来会报找不到存储过程;--master-data=2在备份文件头部写入 binlog 文件名和位置,这是做增量追平的关键锚点;--set-gtid-purged=OFF避免 GTID 信息写入备份文件,防止目标库复制时 GTID 冲突。
备份文件传到目标端后恢复:
# 导入目标 RDS,先确认目标库已建好且字符集一致 mysql -h <目标RDS内网地址> -u <迁移账号> -p <业务库名> < full_backup.sql恢复完成后,用增量同步能力把从master-data=2记录的 binlog 位置开始的新增变更同步到目标库。如果不用云上数据传输服务,自建方案可以先用SHOW MASTER STATUS拿到源库当前 binlog 位点,再启动消费 binlog 的同步任务追增量。增量追平期间盯两个指标:延迟时间(目标库落后源库多少秒)和同步任务状态是否异常。追平到延迟为 0 并稳定 5 到 10 分钟,再进入切换流程。
提示:mysqldump 导出超大库时,
max_allowed_packet不够会导出中断,报Lost connection。导出前在客户端配置里把max_allowed_packet调到 1G,同时确认 ECS 到 RDS 的内网带宽不是瓶颈。
3.2 OSS 对象迁移:ossutil 同步与跨 region 复制的取舍
OSS 迁移有两种主流做法。同 region 内或跨 region 但目标 Bucket 已存在时,用 ossutil 的 sync 命令做增量同步;跨 region 且希望迁移过程中保持持续自动同步时,用 OSS 的跨区域复制功能。
ossutil 同步命令:
# 将源 Bucket 的某个前缀同步到目标 Bucket,只上传新增或变化的文件 ossutil sync oss://source-bucket/prefix/ oss://target-bucket/prefix/ \ --update --delete --resume --jobs 10 --parallel 20--update表示源端比目标端新的文件才覆盖,避免重复传;--delete表示目标端在源端不存在的文件会被删掉,保证两端完全一致——但这是把双刃剑,如果源 Bucket 里误删了文件,目标端也会跟着删。我第一轮同步不加--delete,等校验完再补一轮带--delete的对账同步。--resume开启断点续传,大文件传一半中断,重跑能续上;--jobs和--parallel控制并发,值太大会打满带宽甚至触发限流,值太小大文件列表阶段很慢。几十 TB 的量级,我会先用一批大文件测试,找到当前带宽下不触发限速的最大并发值。
跨区域复制适合业务不能停、数据持续写入的场景:开启后新写入的对象会自动同步到目标 region。它有两个限制:复制有秒级延迟,极端时会到分钟级;删除操作默认不复制,需要单独配置。所以跨区域复制适合做长期同步基线,切换前还是要用 ossutil 跑一轮最终对账。
OSS 迁移的关键不只是数据,还有权限策略。Bucket Policy、RAM Policy、CORS 规则都要在迁移计划里列出,逐一在目标 Bucket 上重建。我的习惯是先把目标 Bucket 的权限配置全部建好,再跑数据同步,最后用一组「匿名读、带签名读、跨域请求」的测试 URL 验证权限行为与源端一致。
3.3 ECS 实例迁移:自定义镜像 vs 应用层部署怎么选
ECS 迁移有两条路:自定义镜像复制和应用层重新部署。自定义镜像把操作系统、软件环境、数据盘一起打包,操作路径最短,但有两个硬约束:不同账号之间共享镜像要先做镜像共享授权;跨 region 要先复制镜像再共享。镜像里如果带着旧日志、旧依赖版本、旧配置文件,这些历史包袱也会被一起搬过去。
应用层部署则是在新 ECS 上装系统、装运行时、部署代码、改配置。工作量更大,但能顺便做一次环境标准化,把之前「只有某台机器能跑」的玄学问题彻底清掉。我的判断标准:如果源 ECS 里跑的应用依赖本地磁盘上的大量数据文件,用镜像复制;如果应用数据都在 RDS 和 OSS 上、ECS 本身无状态或只有缓存,用应用层部署。很多系统 ECS 上唯一的本地数据就是日志,直接把日志卷挪到新实例就行,没必要整机镜像。
镜像复制的操作可以用命令行工具串起来,方便脚本化和重跑:
# 在源 region 基于实例创建自定义镜像 aliyun ecs CreateImage \ --RegionId <源region> \ --InstanceId <源实例ID> \ --ImageName migrate-from-old-account # 跨 region 复制镜像到目标 region aliyun ecs CopyImage \ --RegionId <源region> \ --ImageId <镜像ID> \ --DestinationRegionId <目标region> \ --DestinationImageName migrate-<日期>用命令行操作的好处是每步都有明确返回值可以判断成功与否。镜像复制完别急着开实例,先在目标 region 用该镜像创建一台测试实例,验证应用能启动、能连 RDS、能读写 OSS,再批量创建正式的 ECS 实例加入 SLB 后端组。
3.4 SLB 切换:监听、健康检查与 DNS 的先后顺序
SLB 是流量入口,切换时最怕新旧两个 SLB 同时收流量。顺序应该是:目标 SLB 先配好监听和转发规则 → 后端 ECS 组加入目标 ECS → 健康检查全部变绿 → 验证通过 → 改 DNS 指向或调整权重 → 观察流量。整个过程我分两步走:先灰度,再全量。
DNS 切换前,目标 SLB 上要做一次完整的连通性验证:用 curl 带 Host 头和 SNI 直连目标 SLB 的公网 IP,确认返回的业务响应和源 SLB 一致。
# 直连目标 SLB 验证,绕开 DNS 缓存 curl -H "Host: www.example.com" https://<目标SLB公网IP>/healthz -k -v这一步绕开 DNS 直接验证到 SLB 这一层。返回 200 且响应体正确,说明监听、证书、后端 ECS 链路都已就绪。之后再改 DNS 的 TTL 和解析记录,把流量从源 SLB 切到目标 SLB。灰度切换时可以利用 SLB 的权重功能,让源后端组权重逐渐降低、目标后端组权重逐渐升高,但要注意会话保持——如果开了会话保持且权重变化触发新会话,用户可能被踢下线重新登录。
注意:改 DNS 前先把 TTL 调小到 300 秒左右,切换完成后观察稳定了再调回原值。TTL 过大时,用户端的本地 DNS 缓存会让新旧流量混跑很久,数据分裂的概率大增。
4. 数据一致性校验与回滚:迁移完成的标准是什么
数据搬完了、流量也切了,怎么证明迁移真的成功了?答案是三层校验加一套回滚预案。这章解决两个问题:用什么方法验证「数据没丢、没错、没乱」,以及万一验证不过,怎么退回去。
4.1 三层校验法:行数、校验和、抽样比对怎么落
第一层是行数统计。先分别对源库和目标库查每张表的行数:
-- 源库和目标库各执行一次,导出结果后做 diff SELECT TABLE_NAME, TABLE_ROWS FROM information_schema.TABLES WHERE TABLE_SCHEMA = '业务库名' ORDER BY TABLE_NAME;但TABLE_ROWS是估算值,InnoDB 下不精确。更可靠的是对每张表做COUNT(*),数据量大时 count 本身很慢。我的做法:核心大表用COUNT(*),小表全量 count,然后按表名逐行比较。这里的差异表清单就是后续排查的入口,要保留下来。
第二层是校验和。对每张表做聚合校验,把每一行的关键列拼接后算 CRC:
-- 源库和目标库各执行一次,比较结果值 SELECT COUNT(*) AS row_cnt, CRC32(GROUP_CONCAT(CONCAT_WS('|', id, order_no, amount, status) ORDER BY id)) AS table_crc FROM business_order;GROUP_CONCAT在行数特别多时可能超过max_allowed_packet,建议分批按 id 范围做,比如每 10 万行一个分片,分别算 CRC 再汇总比较。这样不仅知道有没有差异,还能定位差异发生在哪个分片。需要注意 CRC32 本身有碰撞概率,所以对于核心表我会把 CRC 校验结果和一个随机的行号校验结合起来——比如取第 1、1000、5000、10000 行的完整数据做精确比对。
第三层是抽样比对应用层数据。挑几条核心业务链路的数据,在源库和目标库执行同样的查询,比对返回值。比如查最近一笔订单的完整状态、查某个用户的历史记录列表、查某个统计报表的汇总数字。这一层解决「数据一致但业务语义不对」的问题——比如字符集导致中文内容变成问号,CRC 能查出来,但如果源库本来就是脏数据,CRC 比对反而验证不出来。抽样时专门挑「时间边界数据」——迁移时跨在切换点前后的记录最容易出问题。
校验完数据库后,还要验证 OSS 和数据库的关联一致性。附件表里的 objectKey 是否在目标 OSS Bucket 里都存在,这个用 SQL 导出所有 objectKey 和 OSS list 结果做差集比对。我一般先导 SQL 侧列表,再拉 OSS 文件清单,两边做集合比较,任何一边多出来的项都要追查原因。
4.2 回滚预案:源端保留只读,切换顺序决定后悔药有没有效
回滚不是把刚才的命令反着执行一遍,而是一套提前设计好的恢复路径。我坚持两条原则:源端资源在迁移完成并稳定运行一周之前不做任何清理;源 RDS 保持只读而不是直接停机,这样回滚时只改 DNS 就能让流量回到旧环境。
回滚触发条件要提前定义,不能现场拍脑袋。一般包括:切换后 1 小时内核心接口错误率持续超过 5%、数据校验发现无法接受的不一致、RDS 连接数持续打满且调参无效。定义好条件后,回滚步骤要具体到命令级别。比如回滚就是两步:把源 SLB 的权重调回 100,把 DNS 解析改回源 SLB 的 IP,然后观察源库的健康状态。
回滚有一个容易被忽略的点:切换期间产生的增量数据怎么处理。如果目标库在切换期间持续写入,回滚后这些写入会丢。所以切换后的短时间内,源 RDS 和目标 RDS 都要保留,一旦决定回滚,要把目标库在切换时段产生的数据导出,回放进源库。这个回放脚本必须在迁移前就写好、测过,不能等回滚时再现场写。具体做法是:切换前后各记录一次目标库的SHOW MASTER STATUS位点,切换期间的目标库 binlog 就是回放的数据源,用增量同步能力反方向拉回源库,回放时遇到主键冲突要跳过而不是中断。
注意:回滚动作越早触发越安全。我的底线是切换后 4 小时内可以走完整回滚,超过 4 小时就倾向于「错下去再修」,因为此时目标库的增量数据已经积累到一定程度,回滚的数据回放复杂度会急剧上升。
5. 迁移避坑指南:五个高频翻车现场与排查路径
这一章整理了我在 SLB-ECS-OSS-RDS 迁移中遇到最多的五个问题,每条按「现象 → 原因 → 解决」记录,都是真实排过查过的。
5.1 自增主键冲突导致写入失败
现象:迁移完成后业务正常,但第二天某张表的 INSERT 开始报主键重复,报错的 id 集中在某个区间。
原因:迁移时 mysqldump 导出的数据里带显式主键值,但目标库的自增计数器没有跟着更新。InnoDB 在重启后会按「当前最大 id + 1」重新计算自增,但如果导入后目标库没重启,且之前有测试数据写入过,计数器可能停在错误位置。另一个更隐蔽的原因是 mysqldump 导出时没有同步AUTO_INCREMENT当前值,目标库从 1 开始数,插入几百条后撞上已存在的主键。
解决:迁移完成后立刻对每张自增表执行ALTER TABLE <表名> AUTO_INCREMENT = <源库当前值 + 1>,或者写一条 SQL 从 information_schema 里批量查出源库每张表当前自增值,在目标库逐张设置。我习惯把这个动作写进迁移脚本,在切换前执行,避免上线后补。
5.2 OSS 对象迁移后图片 URL 全部 403
现象:OSS 数据同步完成后,页面图片全部加载失败,控制台里打开文件有时能看有时不能看,直接访问 URL 返回 AccessDenied。
原因:文件权限不一致。源 Bucket 可能是私有读写,业务代码用的是带签名的 URL,但目标 Bucket 的权限策略还没配好,或者业务代码里用的凭证对目标 Bucket 没有读权限。更隐蔽的是 CORS 规则没同步——浏览器里图片能加载,但跨域请求被拦。
解决:先对比源和目标 Bucket 的权限策略,重点看 Bucket Policy、RAM Policy、CORS、Referer 防盗链。然后写一个权限验证脚本:用业务代码里那套凭证分别对源和目标 Bucket 做 get 和 put 操作,确认行为一致。如果业务用的是私有 Bucket 加签名 URL,要确认签名的 Endpoint 是否写死成了源 Bucket——这种写死在代码里的 Endpoint 在迁移后最坑,签名是用新 Bucket 做的,但 Endpoint 还是旧的,请求发到了错误的地址。
5.3 SLB 健康检查反复失败,流量切不过去
现象:后端 ECS 加入目标 SLB 后,健康检查一直显示异常,状态在「正常」和「异常」之间反复跳动,流量切过去就 504。
原因:典型的有三个。一是安全组没放行 SLB 的健康检查来源 IP 段,探测请求被防火墙挡掉;二是健康检查路径配置不对,应用的探活接口返回 4xx 或 5xx;三是新 ECS 上的应用还没启动完成,健康检查的超时设置太短,应用启动慢就反复抖动。
解决:先看控制台的健康检查探测记录,确认失败原因是被拒还是超时。安全组问题就在目标 ECS 的安全组里放行对应来源 IP 段;路径问题就把健康检查 URL 调整到应用真实的探活接口;启动慢的问题把检查间隔调大、超时调长,同时确认 ECS 上的应用配置了开机自启,否则每次重启都有一段不可用时间。
5.4 迁移后中文乱码:字符集不一致的隐蔽坑
现象:页面上的中文显示为问号或乱码,控制台看数据库里存的也是乱码,但源库看起来正常。
原因:mysqldump 导出时没有显式指定字符集,客户端和源库的字符集设置不同,导出文件内部的实际编码和目标库表字符集不符。最常见的是源库表是 utf8mb4,但导出的 SQL 文件在导入时被客户端按其他字符集解析,中文字符被截断。
解决:导出和导入时都显式加--default-character-set=utf8mb4,导入前先确认目标库的库、表、字段三级字符集都是 utf8mb4。检查语句:
SELECT TABLE_SCHEMA, TABLE_NAME, TABLE_COLLATION FROM information_schema.TABLES WHERE TABLE_SCHEMA = '业务库名';如果某张表的 collation 不是 utf8mb4 系列,先改表再导数据。已经导乱的只能删掉重导,没有更快的办法。所以迁移计划里要把字符集确认放在第一步,别等数据导完才发现。
5.5 定时任务双跑:迁移期最常见的脏数据来源
现象:迁移完成几天后,发现统计报表数据翻倍,或者用户收到重复的推送消息。
原因:迁移期间新旧环境都活着,源 ECS 和目标 ECS 上的 crontab 都在执行。定时任务没有幂等保护,同一时间点两边各跑一次,数据就重复了。
解决:迁移前把所有定时任务清单列出来,目标 ECS 刚建好时不配 crontab,等切换完成后再把任务迁过去,迁移时错开时间点观察至少一个执行周期。写代码做幂等是长期方案——用数据库唯一索引或分布式锁保证同一任务同一时刻只执行一次——但迁移场景下更直接的做法是「旧机器先停任务、新机器再开任务」的先后顺序。切换窗口内宁可任务漏跑一次,也不能双跑产生脏数据。
6. 迁移收尾的三个习惯:验证脚本、流量观察与回滚演练
迁移收尾阶段我最常做的事,是把所有校验动作固化成三个脚本,放进「迁移验收」目录里,每次迁移直接复用。
第一个是数据库一致性对账脚本,输入源库和目标库的连接串,自动执行行数 count 和 CRC 分片比对,输出差异表清单,非零差异直接标红。这个脚本我在迁移前先跑一遍确认零差异,迁移后再跑一遍。第二个是 OSS 对账脚本,列出源和目标 Bucket 所有文件的 key 和 size,做差集比对。第三个是业务探针脚本,模拟核心链路请求,检查 SLB 入口、登录返回码、读写数据库和 OSS 的完整链路,任何一步超时就报警。
切换后的观察期盯四个指标:SLB 的 QPS 和 5xx 错误率、RDS 的连接数和慢查询数、OSS 的请求错误码分布、ECS 的 CPU 和内存水位。与迁移前的同期数据做对比,任何指标异常放大都要立刻排查,不要觉得「过两天就好了」。我见过太多问题就是拖出来的。
迁移完成一周内,我会在测试环境完整走一遍回滚脚本,不真回滚生产,但确保脚本可用。这个习惯来自一次真实教训:某次迁移后第三天发现数据对不上,准备回滚时发现回放脚本跑挂了——切换期间目标库收到了一些源库没有的数据,回放时主键冲突直接中断。从那以后,我每次迁移都会在切换前把增量回放脚本一起写好测好,并且把回滚最佳时间定义为切换后 4 小时内。
数据迁移做得多了你会发现,真正的门槛不在命令怎么敲,而在于能不能把「万一失败了怎么办」想清楚。校验脚本是证明迁移成功的手段,回滚脚本是保命的底牌,源端资源多留几天不清理,就是给线上系统买一份保险。希望帮到你。
本文还有配套的精品资源,点击获取