网站迁移到新服务器怎么做?数据一致性、DNS 切换与回滚步骤
网站迁移到新服务器,最容易出错的往往不是复制速度,而是切换前后谁负责接收新数据。静态展示站与持续产生订单、评论、附件的网站,迁移方法不同。下面以可安排短暂停写窗口的常见动态网站为例;需要接近连续运行的业务,应另行设计数据库复制、流量调度与一致性验证方案。
切换前先做清单和恢复预演
列出应用版本、运行时、数据库、上传目录、定时任务、队列、证书、邮件服务和外部接口白名单。检查新服务器的系统架构、磁盘空间、字符集、时区与数据库版本兼容性。不要把迁移和大型版本升级放进同一个窗口,否则出问题后更难区分原因。
先用一份备份在新服务器恢复预演,并记录实际导入时间。测试环境使用受控数据和权限,停止发信、支付、通知及其他会触发真实外部动作的任务。确认新环境能运行后,再安排正式停写时段、验收人及放弃迁移的时间界限。
提前处理 DNS,但不要误解 TTL
查清正在使用的 A、AAAA、CNAME、CDN 回源地址及相关子域名。如果打算降低 DNS TTL,应提前修改,并留出原 TTL 对应的缓存时间。刚降低数值就立即切换,已缓存的旧记录仍可能继续有效。TTL 影响解析缓存,不能保证所有用户在同一秒转向新服务器。DNS TTL 说明
迁移前不要忘记 IPv6:仅修改 A 记录,旧 AAAA 记录可能仍把部分用户引到旧机器。使用 CDN 时,需要分清公网 DNS 是否指向边缘节点,以及真正需要修改的是否为回源配置。提前记录所有原值,作为回退依据。
在不修改公网解析时验证新服务器
可从自己的管理电脑为单次请求指定新 IP,保留真实域名参与 HTTPS 校验。示例中的域名与地址需替换:
curl --resolve www.example.com:443:203.0.113.20 --max-time 15 -sS -o /dev/null -w 'status=%{http_code}\n' https://www.example.com/
--resolve 将指定域名与端口映射到测试 IP,不会修改公共 DNS。不要加入跳过证书校验的参数,否则可能错过证书或域名配置问题。这里适用于使用公开可信证书、允许管理来源直连的源站;若源站只允许 CDN 回源或使用专用证书,应通过相应受控测试路径验收。curl 官方手册
命令返回正常还不够,继续测试登录、静态资源、图片、上传与关键页面。可在自己的浏览器测试环境中使用临时本地解析,但验收后应恢复,避免后续误以为公网已经切换。发现证书、权限或应用配置错误,应先在新环境修复,不急着更改解析。
停止全部写入,再做最终同步
正式迁移时启用维护或只读模式,并暂停后台队列、计划任务、管理后台写入及可能到达的接口回调。对外部回调,应事先确认重试、缓冲或补偿机制;只把首页设为维护页,无法阻止其他写入入口。等正在执行的关键任务结束后,标记明确的数据切换点。
数据库应使用数据库支持的导出、备份恢复或复制方法。以 MySQL 为例,mysqldump --single-transaction 的一致性适用于 InnoDB 等事务表,不能保证持续变化的非事务表一致,导出期间也应避免表结构修改。权限、存储过程、事件与恢复兼容性都应在预演中检查。MySQL mysqldump 文档
不要对仍在写入的数据库目录直接做 rsync,然后尝试作为完整数据库启动。普通附件可先预同步,在停写后补齐最终差异,并核对文件数量、大小或校验值。数据库记录与附件必须对应同一个业务状态,不能分别取两个相隔很久的时间点。
明确新服务器成为唯一写入端
最终数据导入、权限检查和关键业务验收通过后,再切换流量并开放新服务器写入。旧服务器保持只读或维护状态,暂停其定时任务与消费者。缓存中的旧解析仍可能带来访问,应事先决定旧入口显示维护提示,还是经过验证地转发到唯一的新后端,不能让两台服务器各自接受订单。
观察解析、新旧服务器访问日志、错误比例与关键业务数据。不要只检查首页:支付回调、邮件发送、上传、后台任务和外部接口的来源 IP 白名单都可能需要单独验证。对任务是否已经执行,应以业务标识与日志核对,避免迁移后手工重复触发。
回滚要分清是否已经产生新数据
新服务器尚未开放写入时,回滚相对简单:恢复原来的流量入口,确认旧服务数据仍是权威版本,再恢复旧端写入。DNS 回改同样受缓存影响,因此新端也需保持可控状态,不能任由部分流量继续写入。
新服务器已经接收订单、评论或附件后,直接把 DNS 改回旧机器会丢失或分裂这部分数据。此时应先停止新增写入,保存两端数据,核对切换后的增量与已发生的外部动作,再按预先验证的回迁或对账方案处理。未经验证,不要将两份数据库直接相互覆盖。
完成观察期后才下线旧服务器,并保存迁移前备份、最终同步记录和变更清单。若只是更换服务器,尽量保持原有页面 URL、HTTPS、重定向和内容状态稳定;这些检查也有助于减少搜索引擎在迁移期间遇到访问错误。