迁移当天发现数据量远超预估,先别急着加机器,立刻冻结变更、重算停机窗口,按“数据分级、分批迁移、增量补齐、随时可回退”四件事走,比硬扛更稳。下面按现场处置顺序拆开讲,尽量让你拿着就能用。
迁移当天数据量超预估怎么处理:先保窗口再保一致
迁移当天最怕两件事:源端被拖垮,业务窗口被击穿,发现实际数据量比预估大,先做一轮15分钟现场止损。
- 冻结变更:停DDL、停批量导入、停定时任务,记录当前增量位点,MySQL执行
SHOW MASTER STATUS;,PostgreSQL执行SELECT pg_current_wal_lsn();。 - 拉齐数字:源端总大小、目标端已写入量、最近30分钟平均速率、剩余窗口,别用“感觉快好了”做判断。
- 保住源端:迁移工具限速,避免把生产磁盘IO打满,文件同步可用
rsync --bwlimit=50M,数据库迁移工具一般有限速参数,先限再调。 - 留好退路:确认快照或备份可用,连接串切换开关可控,DNS TTL提前调小。
- 设定决策点:给业务一个最晚决策时间,比如窗口结束前两小时必须定“继续硬扛、改分批还是回退”。
重新算窗口:三个数决定硬扛还是改方案
- 总数据量:文件用
du -sh /data粗看,精确用find /data -type f -printf '%s\n' | awk '{s+=$1} END {print s/1024/1024/1024" GB"}',MySQL看库表大小:SELECT table_schema, ROUND(SUM(data_length+index_length)/1024/1024/1024,2) AS gb FROM information_schema.tables GROUP BY table_schema;,PostgreSQL用SELECT pg_size_pretty(pg_database_size(current_database()));。 - 有效迁移速率:别用峰值,用最近半小时平均值,有效带宽受源端读、目标端写、网络丢包共同限制,据中国信息通信研究院公开资料,跨地域数据传输要同时评估带宽、时延和丢包。
- 剩余窗口:从当前时间到业务允许恢复时间,再扣掉校验和回退时间,只有“剩余窗口大于预计迁移时间加校验回退时间”,才考虑继续硬扛;否则切分批或双写。
| 超出程度 | 现场表现 | 优先动作 | 主要风险 |
|---|---|---|---|
| 略超预估 | 剩余窗口仍够 | 限速、调并行度、压缩传输 | 源端IO升高 |
| 明显超出 | 窗口不够但可延 | 核心表优先,冷数据后置,增量同步 | 校验复杂 |
| 数倍超出 | 全量短时间完不成 | 暂停全量,改双写或CDC加分批 | 架构改动 |
| 极端情况 | 已影响生产 | 回退,保留源端,重新评估 | 业务中断 |
先分级再动手:别把所有表当核心
核心交易表优先迁,必须可回退;配置和字典表量小,先迁;日志、附件、历史归档可后置或离线迁;大字段表单独评估,避免拖慢整体,行业共识认为,迁移事故多数不是“拷不完”,而是增量追不上、回退没准备好,先把增量位点和回退开关抓在手里,再谈速度。
数据库迁移数据量比预估大怎么办:四条处置路径对比
数据库迁移和文件拷贝不一样,数据库还要追增量、保一致,四条路径不是越高级越好,看窗口和回退成本。
| 路径 | 适用场景 | 优点 | 代价 | 回退难度 |
|---|---|---|---|---|
| 压缩窗口加并行迁移 | 略超预估,窗口可小幅延长 | 改动小 | 源端压力大 | 低 |
| 分批全量加增量CDC | 明显超预估,可接受分批 | 对业务影响可控 | 要管位点和校验 | 中 |
| 双写切换 | 数倍超预估,不能长停 | 停机窗口短 | 改应用,冲突处理复杂 | 中高 |
| 暂缓迁移重新评估 | 已影响生产或口径不清 | 保业务 | 项目延期 | 低 |
别一上来就双写,双写要改应用、处理冲突、做对比校验,没准备好反而添乱,先把全量拆小、把增量追上,往往更现实。
分批迁移怎么切:按主键区间还是时间分区
- 主键区间:适合自增主键表,先定步长,比如每批10万到50万行,用水位表推进。
SELECT FROM orders WHERE id > ? AND id <= ? ORDER BY id;迁完更新水位,不要用大OFFSET,越翻越慢。 - 时间分区:适合有创建时间的表,按天或按月切,注意
>=和<边界,跨时区统一用UTC。 - 冷热分离:历史数据先不迁,核心表先走,附件用对象存储工具分批同步。
- 校验:行数、主键最大值、金额汇总、抽样比对,MySQL可用
CHECKSUM TABLE做粗校验,重要表再做字段级比对。 - 命令示例:文件分批用
rsync -av --bwlimit=50M --files-from=list.txt /data/ user@target:/data/;数据库按where条件分批,必须带断点和批次记录,别写不带断点的循环。
异地机房迁移数据量超预估怎么办
跨机房最容易被忽略的是有效带宽和丢包,先测再迁:iperf3 -c 目标IP -t 30 -P 8,mtr -rw 目标IP看丢包和抖动,有效带宽不是网卡标称值,长距离传输通常要打折看,数据量特别大、带宽又有限时,行业里会用加密硬盘离线搬迁做底量,再用网络追增量,操作上先传冷数据,再传热数据;开压缩rsync -z或先zstd再传;限速避免打满生产链路;每批记录开始结束时间和校验值,跨地域还要注意加密和合规,传输走SSH或专线。
数据迁移服务收费按数据量还是按工时
市面上常见三种计价:按数据量、按人天、按项目包干,问价时别只问总价,要问清四件事:超出预估数据量怎么计费;校验和回退算不算工时;夜间窗口是否加价;源端限速导致工期拉长谁承担,合同里写清单价、封顶价和变更单流程,比口头承诺有用,数据量超预估时优先走变更单,把新增工作量写清楚,现场少扯皮。
迁移当天数据量远超预期如何应急:现场指挥与回退
设一个现场指挥,别让DBA、网络、业务各自为战,每30分钟对一次数:已迁量、剩余量、当前速率、预计完成时间、错误数,监控盯三个指标:迁移速率是否稳定、目标端写入延迟、源端磁盘IO和连接数。
回退开关提前演练:DNS TTL调小、连接串可切、双写可关、快照可恢复,验收别只看进度100%,要做核心业务抽检、行数比对、关键金额汇总、增量延迟归零,对外沟通用事实:当前完成多少、还差多少、预计几点、两个方案代价,别用“快了”安抚。
现场命令和检查点
- 磁盘和负载:
df -h、iostat -x 1、vmstat 1。 - 网络:
sar -n DEV 1、ss -s。 - 迁移进度:文件用
rsync --info=progress2,数据库看工具日志和增量位点延迟。 - 校验:行数SQL、抽样SQL、业务只读查询。
- 记录:把决策时间点、决策人、回退点写进迁移记录,事后复盘用。
迁移当天数据量超预估不是灾难,硬扛和瞒报才是,先把窗口算清楚,再选分批、双写或回退,保住源端和回退路径,项目就还有主动权。
常见问题Q&A:迁移当天数据量超预估怎么处理
能不能直接加带宽硬扛过去?
先算有效速率和剩余窗口,加带宽只解决网络瓶颈,解决不了源端磁盘IO和目标端写入瓶颈,剩余窗口仍不够时,改分批或双写更稳。
已经迁了一半,发现数据量太大要不要停?
看是否影响生产,核心表优先继续,非核心表暂停;保留源端不动,记录增量位点;不要为了赶进度删源数据或跳过校验。
数据迁移延期怎么向业务说明?
给四个事实:已完成量、剩余量、当前平均速率、预计完成时间;再给两个方案和代价,让业务选窗口,事实清楚,沟通成本最低。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/774534.html


