网站迁移完全指南:更换服务器/主机商的注意事项与步骤
网站迁移表面上只是"把文件拷过去、把 DNS 指过去",但真正做起来,多数团队栽跟头的地方恰恰是那些看起来不起眼的细节:数据库字符集不一致、上传目录的权限没跟上、邮件服务只绑定了旧服务器 IP,甚至忘了把某个 cron 任务同步到新机器。DNS 传播延迟、数据丢失、SSL 证书失效和配置差异叠加在一起,很可能把一次常规迁移变成一次事故复盘。下面这套流程来自多次真实迁移的总结,适合 95% 的中小网站场景。
迁移前准备
1. 完整备份
备份不是"留一份底",而是要能让你随时回退到迁移前的完整状态。除了网站文件和数据库,还需要覆盖配置文件、定时任务(crontab)、环境变量和邮件数据。
# 文件备份
tar -czf website-backup-$(date +%Y%m%d).tar.gz /var/www/
# 数据库备份
mysqldump -u root -p --all-databases > db-backup-$(date +%Y%m%d).sql
# 配置文件备份
tar -czf config-backup.tar.gz /etc/nginx/ /etc/apache2/
备份完成后做两件事:一是把备份文件下载到本机或对象存储,不要只留在原服务器上;二是实际解压验证一次,确认备份可恢复。很多团队在出问题时才发现备份文件损坏,这一步能提前暴露问题。
2. 检查新环境兼容性
新服务器不等于"一模一样的空机器",版本差异往往是迁移后最大的隐性坑:
- PHP/Node.js/Python 版本是否与旧环境匹配或向后兼容
- MySQL/PostgreSQL 等数据库版本,注意大版本升级时的字符集、sql_mode 差异
- 是否有必要的系统扩展和库(如 PHP 的 gd、imagick、redis 扩展)
- 磁盘空间和 inode 数量是否充足——流量不大但文件很多的小站常在这里翻车
3. 降低 TTL
在迁移前 48 小时将 DNS TTL 降低到 300 秒(5 分钟),这样 DNS 切换后新记录能在几分钟内生效,而不是拖上一天。别忘了迁移结束后把 TTL 调回原来的值(通常是 3600 或 86400),否则会增大后续修改记录的传播负担。
4. 选定窗口并准备清单
迁移尽量安排在流量低谷,比如工作日的凌晨。同时给团队留出"迁移当天不安排其他发布"的约定,避免多变更叠加导致问题难以定位。
迁移执行
步骤一:设置新环境
在新服务器上安装与旧环境一致的软件栈,恢复配置。这一步先不要放正式数据,先把 Nginx/PHP/数据库跑起来,确认服务能正常启动。
步骤二:迁移数据
# 使用 rsync 高效同步文件
rsync -avz --progress /var/www/ user@new-server:/var/www/
# 导入数据库
mysql -u root -p < db-backup.sql
站点文件较大的场景,建议分两步:先在停机前做一次完整 rsync,停机窗口内再做一次增量 rsync(只同步差异文件),可以显著缩短正式切换的停机时间。数据库导入后记得执行 FLUSH PRIVILEGES 并核对数据行数与旧库一致。
步骤三:测试新环境
在切换 DNS 之前,通过 hosts 文件或 IP 直连测试新环境:
# 在本地 hosts 文件中添加
# 123.456.789.0 example.com www.example.com
用修改后的 hosts 访问站点,重点验证登录、支付回调、上传、搜索等依赖绝对地址和 Session 的功能——这些最容易因为域名或环境变量不同而出问题。
步骤四:切换 DNS
将域名的 A/AAAA 记录或 NS 记录更新指向新服务器。若同时使用 CDN,还需确认 CDN 回源地址已指向新服务器 IP。
步骤五:监控和验证
# 确认解析结果
dig +short example.com
# 检查 HTTP 状态码与响应头
curl -I https://example.com
# 检查证书有效期
openssl s_client -connect example.com:443 -servername example.com < /dev/null 2>/dev/null | openssl x509 -noout -dates
- 使用
dig和nslookup确认 DNS 解析正常 - 使用
curl -I检查 HTTP 响应 - 检查 SSL 证书是否正常
- 测试网站所有核心功能
迁移策略对比
| 策略 | 停机时间 | 风险 | 适用场景 |
|---|---|---|---|
| 全量停机迁移 | 1-2 小时 | 中 | 小型静态站、访问量低的业务站 |
| 增量滚动迁移 | 5-15 分钟 | 低 | 数据持续变化的中型业务站 |
| 蓝绿并行迁移 | 零停机 | 较高(需双倍资源) | 电商、SaaS 等不能接受停机的站点 |
对绝大多数个人站和中小企业站,增量滚动迁移是性价比最高的选择:前期准备充分的话,真正"切换"的窗口往往不超过半小时。
常见问题与解决方案
| 问题 | 解决方案 |
|---|---|
| DNS 传播延迟 | 提前降低 TTL,耐心等待 24-48 小时 |
| SSL 证书不匹配 | 在新服务器重新签发或安装证书 |
| 数据库连接失败 | 检查数据库用户和主机权限 |
| 文件权限错误 | 检查新服务器的文件和目录权限 |
| 邮件发送失败 | 更新 SPF/DKIM/DMARC 记录,确认新 IP 不在黑名单 |
回滚计划
如果迁移后出现严重问题,应该能够在 30 分钟内回滚:
- DNS 记录切回旧服务器 IP
- 保留旧服务器至少 7 天
- 保留完整备份以备不时之需
回滚不是"重来一次",而是在迁移前就写清楚回滚触发条件和操作步骤,并让至少两个人知道这份文档放在哪里。
16IDC 观察
网站迁移中 90% 的问题可以通过充分的迁移前准备来避免。建议在迁移前准备一份详细的迁移清单,逐项确认:备份可恢复、兼容性已验证、TTL 已降低、回滚步骤已写好。选择新服务器时,也建议利用试用期进行充分测试,性能与稳定性并重——可以参考服务器选型分类下的评测与对比来挑选可靠的托管服务商。