网站迁移到香港云服务器:真正的风险在切换的那几分钟
很多人把迁移理解成一个复制粘贴的问题——把文件和数据库搬过去,改一下域名解析,结束。文件复制那步通常确实没什么问题,真正容易出事的是切换过程中那段窗口期:一部分用户已经在访问新服务器,另一部分还在访问旧的,两边同时在产生新数据,最终两套数据没办法合并,你也不知道以哪边为准。
所以迁移的核心不是"怎么搬",而是"怎么在切换那一刻保证数据不出叉"。
先把旧服务器的情况摸清楚
动手之前,把旧环境的关键配置记下来:操作系统版本、Web服务器和数据库版本、PHP或其他运行环境的版本、已安装的扩展和依赖库。这步不只是为了在新服务器上复原,更重要的是发现版本差异——旧站可能依赖PHP 7.4的某个行为,新服务器直接装PHP 8.2,程序可能直接跑不起来,而且报错往往不直观。
业务侧的配置也要一并记录:域名和DNS记录、SSL证书的续期方式、定时任务、邮件发送配置、支付和第三方平台的回调地址、IP白名单。这些配置分散、容易漏,建议逐条对着旧服务器确认,而不是凭印象。
数据范围也需要提前想清楚:哪些必须迁、哪些可以重建、哪些不需要动。把旧的日志、缓存、临时文件一起打包过去,除了浪费传输时间还容易引入干扰。真正要带走的通常是:数据库、用户上传的文件、SSL私钥、环境变量和应用配置、以及定时任务配置。
定时任务这条尤其容易被遗漏。网站能正常打开,但定时发邮件、同步订单、触发备份这些全停了,往往过了好几天才发现。
新服务器先跑起来,不要动 DNS
在香港云服务器上把环境搭好之后,先用临时域名或修改本地 Hosts 文件访问新站,把主要功能完整走一遍:登录注册、商品下单、文件上传下载、支付回调、邮件发送、后台管理。不要只测首页能不能打开。
这步很多人会跳过,觉得"都是同一套代码应该没问题"。但迁移往往同时伴随着 PHP 版本更新、数据库配置变动,任何一处细微差异都可能在生产环境才暴露出来——不在测试阶段发现,就在切换后流量全上来时发现。
数据同步:先全量,切换前再做一次增量
文件同步推荐用 rsync,先做一次全量复制,等到正式切换前再做一次增量,只传这段时间变化的部分:
bashrsync -avz --delete /var/www/site/ user@new-server:/var/www/site/
--delete 这个参数会删除目标端多余的文件,第一次执行前建议先加 --dry-run 预览结果,确认输出符合预期再正式跑。
数据库不能直接复制数据目录文件夹。用数据库自带的导出工具,导出时确认字符集和时区设置,导入后检查表数量和存储过程、触发器是否完整,再抽查几条关键业务记录。数据量很大的情况下,可以考虑配主从同步,让新库实时跟上旧库,切换时的数据差会小很多。
正式切换要按顺序来
第一件事是提前降低 DNS TTL。 TTL 决定旧解析结果会被各地运营商缓存多久。如果 TTL 是 86400(一天),切换当天才改,部分用户可能还要再过一天才切到新服务器。提前几天把 TTL 改到 300 秒或更短,切换后旧缓存散得更快。
等到切换当天,顺序应该是这样的:
先暂停写入。 把订单、账户操作、评论这些会产生新数据的功能短暂切到维护模式或只读状态。不做这步,切换窗口期内就会出现两边同时有新数据、无法合并的情况。维护时间不需要很长,通常几分钟到十几分钟足够。
再做最后一次增量同步。 把这段维护时间之前新增或修改的文件、数据库、用户上传内容同步过来。
在新服务器上快速验一遍。 数据库连接、HTTPS 证书、文件权限、支付回调地址——在维护窗口内确认正常。
然后改 DNS 解析, 把 A 记录指向新服务器 IP。
改完之后继续盯着两边。 DNS 切换后不要立刻关旧服务器,观察新服务器的访问日志和接口错误,同时确认旧服务器的请求量在逐渐减少。等旧服务器的流量接近零、新服务器稳定运行一段时间后,再考虑下线旧机器。
很多人切完立刻关旧服务器,但 DNS 缓存导致还有一部分用户在访问旧站,旧服务器一关,他们直接 404。
回滚方案在动手前就要想好
迁移方案里没有回滚步骤,就还不完整。
最低限度要保留的是:迁移前的完整备份、旧服务器不要关、原 DNS 记录存档。提前定好回滚的触发条件——比如核心接口持续不可用、支付出现异常、数据库报严重错误——一旦触发,不要继续排查,先止损,把流量切回旧服务器,查清楚原因再做第二次迁移。
回滚操作的顺序同样重要:先停新服务器的写入,再把 DNS 改回旧 IP。 要先停写入,不然两边同时恢复接收数据,数据一样会出叉。
迁到香港之后,还要验一遍用户侧体验
技术上迁移完成,不等于用户侧一定有改善。新服务器上线后,要从目标用户所在的网络环境实测:DNS 解析时间、HTTPS 握手时间、首字节时间,以及晚高峰的丢包情况,电信、联通、移动分别测一遍。
这步最好用测试域名,在正式切换之前就做,不要等流量全切过来后才发现某个运营商的用户访问有问题。