迁移的核心风险只有一个:切过去之后发现有问题,又回不来。所以整个流程要围绕"可回滚"设计。
一、迁移前的三件事
- 完整备份。数据库、网站文件、配置文件、SSL 证书,各存一份到本地。
- 记录当前状态。截图首页、记录收录量、记录核心词排名,迁移后用来对比。
- 确认新环境。PHP 版本、MySQL 版本、扩展(GD、Redis、fileinfo)是否齐全。版本不一致是最常见的坑。
二、迁移的五个步骤
1. 部署新环境
在新服务器装好面板、建站、配好伪静态和 SSL。先放一个静态测试页,确认域名解析和访问正常。
2. 导入文件
打包旧站文件,排除缓存和日志目录。上传后解压,检查文件属主和权限(目录 755、文件 644)。
tar -czf site.tar.gz --exclude=cache --exclude=logs /www/wwwroot/old/
scp site.tar.gz root@新IP:/www/wwwroot/new/
3. 导入数据库
导出时用 --single-transaction 避免锁表,导入前先建库、设字符集 utf8mb4。
mysqldump -u root -p --single-transaction dbname > db.sql
mysql -u root -p dbname < db.sql
4. 改配置
数据库连接、站点 URL、缓存路径、邮件配置。改完搜索一遍配置文件里的旧域名,全部替换。
5. 测试
用 hosts 把域名指向新 IP,本地测试:首页、列表、详情、后台、表单、支付、图片。移动端也要测。
三、切 DNS 的时机
建议在流量低峰(凌晨)切,并把 TTL 提前一天调低到 300 秒,方便快速回滚。
切换后观察两小时:访问是否正常、日志有没有报错、表单是否收到测试提交。
四、回滚方案
回滚的前提是旧环境还在。所以:
- 旧服务器至少保留两周,别急着退。
- 旧站的 DNS 记录保留,随时可以切回。
- 如果迁移期间有新数据产生(比如新订单),回滚前要先同步回旧库。
这一步很多人忽略,结果回滚后发现丢了半天订单。
五、换域名的额外步骤
如果同时换域名,多三件事:
- 全站 301 到新域名,至少保留一年。
- 搜索资源平台做"站点改版"提交(百度)或"地址更改"(谷歌)。
- 更新所有外部的链接、广告落地页、名片和宣传物料。
六、迁移后的检查清单
| 检查项 | 合格标准 |
|---|---|
| 首页与内页 | 全部 200,无 404 |
| 伪静态 | 内页 URL 与旧站一致 |
| 图片 | 全部能显示,路径正确 |
| 后台 | 能登录,能发布文章 |
| 表单 | 提交后能收到邮件 |
| SSL | HTTPS 正常,无混合内容 |
| sitemap | 能访问,URL 正确 |
| robots | 没有误屏蔽 |
七、迁移后一周要盯什么
- 抓取频次是否恢复。
- 索引量是否稳定。
- 404 报告有没有异常增多。
- 服务器负载是否正常(新环境配置可能不同)。
通常三到七天恢复正常。如果一周后抓取频次仍然很低,检查是不是 DNS 还没完全生效,或者新服务器响应慢。
迁移时最容易被忽略的
不是文章和图片,而是表单收件邮箱、定时任务、SSL 证书、301 规则和第三方回调地址。这些不在页面上,迁移后很容易漏,等客户发现表单没收到,已经丢了几条线索。
做一张迁移清单,逐项打勾;在测试环境完整走一遍,再切正式。切完保留旧服务器一周,方便回滚。
切 DNS 前把 TTL 调低,切完观察 24 小时再调回。旧服务器保留一周,确认邮件、表单、支付都正常再关。
切 DNS 前把 TTL 调低,切完观察 24 小时再调回,旧服务器保留一周。
常见问题
迁移要不要关站
不建议关站。用 DNS 切换,配合低 TTL,可以做到几乎无感知。
数据库版本不同怎么办
先在新环境建同版本,导入成功后再升级。直接跨大版本导入容易出字符集和语法问题。
迁移后排名掉了
先确认 URL 没变、301 正确、服务器速度正常。多数是抓取延迟,两周内会恢复。
迁移前的备份策略见网站备份的三二一原则。