先说结论:跨云迁移不是“把文件拷过去”这么简单,真正难的是依赖梳理、数据一致性、DNS 切换和回滚。停机窗口能压到几分钟,前提是提前把新环境跑通、数据同步好、DNS TTL 调低,并且准备好回滚。
迁移前先回答五个问题:
- 迁什么:只有网站,还是数据库、对象存储、队列、定时任务一起迁
- 停多久:能接受几分钟、几小时,还是必须零停机
- 数据多大:几十 G 和几个 T,方案完全不同
- 依赖谁:支付、短信、CDN、邮件、第三方回调,换 IP 后要不要改配置
- 怎么回:新环境出问题时,多久能切回旧环境
迁移前评估
先把现有架构画出来:入口 DNS、CDN、负载均衡、应用服务器、数据库、缓存、对象存储、队列、定时任务、监控。每一项标注“迁/不迁/替换”,再评估数据量和依赖顺序。
重点查三类隐蔽依赖:写死在代码里的 IP、第三方白名单、回调地址。换 IP 后支付回调、短信回调、OAuth 回调都可能失效,提前列出来。

选哪种迁移方式
| 方式 | 适合 | 停机 |
|---|---|---|
| 重新部署 | 环境简单、有自动化脚本 | 短 |
| 镜像/快照迁移 | 同平台或兼容平台 | 短 |
| rsync + 数据库 dump | 跨云、异构环境 | 中 |
| 双写/双跑 | 不能停机、预算充足 | 几乎为零 |
大多数团队用“重新部署 + 数据同步”最稳:新环境按文档搭一遍,顺便验证依赖和版本;数据用 dump/rsync 同步;最后切 DNS。

数据怎么迁
数据库是核心。小库用 mysqldump/pg_dump 导出导入;大库用物理备份或主从复制,先全量再增量,最后短暂停写切主。迁移前在新库跑一遍查询和写入测试,确认字符集、时区、SQL 模式一致。
# MySQL 示例
mysqldump --single-transaction --routines --triggers \
-u root -p appdb > appdb.sql
# 导入新库后核对行数、索引、字符集
文件用 rsync 同步,先全量再增量;对象存储用厂商工具或 rclone 迁移,注意权限、CDN 回源和签名 URL。迁移后校验文件数量、大小和关键文件哈希。
DNS 怎么切
切换前把 TTL 调低到 60 秒,观察一天再切。切换时先切一小部分流量或一个子域名,验证正常后再全量。切完保留旧环境至少 24 小时,方便回滚。
dig +short 你的域名
dig @8.8.8.8 你的域名
# 多地解析验证
注意 CDN:如果域名接在 CDN 上,要先改回源,再改 DNS;否则切了 DNS 但回源还指向旧站。证书、HSTS、CAA 记录也要一起检查。
停机窗口怎么定
停机窗口 = 数据同步时间 + 切换时间 + 验证时间 + 缓冲。数据同步可以提前做,真正停写的只有“最后一次增量 + 切主 + 验证”,通常几分钟到几十分钟。
选低峰时段,提前通知客户和客服;准备好公告、回滚口令和值班表。别在周五下午切,出问题没人处理。

验证清单
- 首页、登录、下单、支付、回调全链路走一遍
- 数据库读写、主从延迟、字符集正常
- 文件上传下载、图片、附件正常
- 邮件、短信、推送能发出
- 定时任务、队列、监控正常
- 日志、备份、告警接上
- 多地访问延迟和证书正常
怎么回滚
回滚方案要提前写:DNS 切回旧 IP、数据库切回旧主、文件保留旧副本。回滚前确认旧环境还在、数据没被新环境写乱;如果已经双写,回滚会更复杂,尽量别让两边同时写。
成本和合规
迁移不只是机器费用:流量出口费、对象存储请求费、CDN 回源、证书、备案变更都要算。跨境迁移还要看数据合规,别把敏感数据搬到不允许的区域。
迁移顺序
先迁无状态服务,再迁文件,再迁数据库,最后切 DNS。每迁一步都验证,别等全部迁完再发现环境不对。数据库最后迁,因为它的切换窗口最短、回滚最麻烦。
常见故障
切换后 502:新环境 Nginx/PHP 没起;登录失效:session 还在旧 Redis;支付回调失败:白名单没加新 IP;图片 404:对象存储没同步。提前按清单逐项验证,能避免大部分问题。
通知和客服
提前公告停机窗口,准备好客服话术;切换时值班表排好,数据库、网络、应用各有人。出问题先按预案回滚,别在现场临时改架构。
迁移后观察
切换后至少观察 24 小时:错误率、延迟、数据库连接、磁盘、带宽、支付成功率。旧环境保留一周再释放,期间不要改配置。
双跑和灰度
不能停机的业务可以双跑:旧环境继续服务,新环境接少量流量,对比错误率和延迟,再逐步放量。双跑期间要避免双写数据库,必要时用只读流量验证。
证书和 HSTS
换环境后证书要能正常续期;开了 HSTS 的域名,证书错误会让用户直接打不开。切换前检查证书链、到期时间和自动续期任务。
最后,迁移预算要包含新环境试运行、旧环境保留、流量出口和人工时间,别只算新机器月费。
迁移完成后做一次复盘:哪些步骤超时、哪些依赖漏了、回滚是否可用。把清单沉淀下来,下次扩容或换区能直接复用。
迁移不是一次性任务,环境、依赖和证书都会变,定期检查比出事再补更省心,记在运维日历里,真的没错啊。
常见问题 FAQ
Q1:跨云迁移要停机多久?
看数据量和方案。小站几分钟到半小时;大库可能几小时。用双跑或主从可以把停写压到几分钟。
Q2:能不停机迁移吗?
可以,用双写、主从复制、灰度切流,但复杂度高、成本高。大多数业务接受短窗口更划算。
Q3:DNS 切了为什么不生效?
本地 DNS 缓存、TTL 太长、CDN 回源没改。提前调低 TTL,多地 dig 验证。
Q4:迁移后要不要换证书?
证书可以复用,但要确认新环境能自动续期;如果换域名或 CDN,重新签发更稳。
Q5:怎么保证数据不丢?
迁移前全量备份,迁移中记录增量,切主前停写并核对行数;旧环境保留到验证完成。
总结
跨云迁移的关键是“先评估、再搭环境、同步数据、低 TTL 切 DNS、留回滚”。停机窗口能压多短,取决于准备有多充分。别在没验证的新环境上直接切生产。
需要一台新环境做迁移预演,可以按小时开一台萤光云香港 CN2 VPS,把部署、同步和切换流程先跑一遍。







