双十一买的那台轻量服务器下周就要到期,续费太贵,于是趁着活动入手了一台配置高一点的新机器。周末花了两个小时把上面的三四个站点全迁了过来,期间遇到了数据库编码和上传超时的小坑,这里把整个完整、平滑且丢数据风险最小的搬迁流程记下来备忘。
1. 迁移前的环境对齐与准备
很多人一上来就直接打包解压,结果到了新服务器发现程序打不开,大概率是环境不一致导致的。在开始搬数据之前,先花五分钟检查新旧两台服务器的运行底子:
- PHP 与 MySQL 版本:尽量保持主版本完全一致(比如老机器是 PHP 7.4 + MySQL 5.7,新机器也先装相同的版本)。
- PHP 扩展:检查老服务器装了哪些扩展(如 redis、fileinfo、opcache、exif 等),新服务器务必补齐,否则程序调用函数直接报错 500。
- 放行安全端口:新服务器如果开了云厂商安全组,记得提前放行 8888、80、443 以及后续搬迁可能用到的临时传输端口。
2. 网站文件与数据库的导出及导入
如果数据量在 10G 以内,使用面板自带的打包功能或一键迁移 API 是最稳妥的。以下是关键配置与超时参数建议:
| 数据规模 | 建议压缩方式 | PHP超时限制 (max_execution_time) | 客户端请求超时 (client_max_body_size) |
|---|---|---|---|
| 1G 以下 | 面板直接在线打包 .zip | 默认 60s 即可 | 50M 即可 |
| 1G - 5G | 终端 tar.gz 分卷或后台压缩 | 建议临时调至 300s | 设为 500M 以上 |
| 5G 以上 | 建议终端 rsync / 内网直接传输 | 建议命令行操作,不依赖网页执行 | 不受 HTTP 限制 |
具体操作顺序如下:
- 老站停写:为了防止迁移过程中有新评论或订单写入,最好先在老站点后台开启维护模式,或者临时在 Nginx 停用写入接口。
- 导出数据库:宝塔后台直接点击数据库“备份”,下载生成的
.sql.gz文件。如果库比较大(超 1G),直接去 SSH 终端执行mysqldump -u用户名 -p密码 数据库名 > db_backup.sql,速度更快且绝不会漏表。 - 打包文件:进入网站根目录,把文件打成压缩包。日志目录(logs)、缓存目录(cache)可以直接排除掉,能省下一大半体积。
- 新站导入:在新服务器面板新建站点和数据库(保持数据库名、用户名、密码与老站一致,可以省去改配置文件的麻烦),将文件解压到根目录,并在数据库管理中导入刚才的备份文件。
3. 域名解析切换与常见坑位处理
文件和数据库到位后,不要急着把域名全部解析过去,先做本地验证:
- 修改本地 Hosts 预览:在电脑本地修改 hosts 文件,将域名强制指向新服务器 IP,在浏览器里完整走一遍前后台流程,确认图片、上传、伪静态和文章保存都没问题。
- SSL 证书迁移:宝塔新站点建立后,把老站点的 Let's Encrypt 或商业证书的密钥与 PEM 内容直接粘贴进新站的 SSL 面板,确保解析切过来的一瞬间 HTTPS 不会报红标。
- 调整 DNS TTL 值:在改解析的前一天,把域名的解析 TTL 改成 60 秒或 600 秒。等新解析生效、老服务器访问日志彻底没有新请求后,再关停老服务器。
4. 以后如何避免繁琐的手工搬迁?
每次手工打包、下载、上传,不仅耗时耗力,而且一旦中间断流就得重来。对于日后业务量增加、有多台机器或者需要更严谨容灾的站点,更建议搭建自动化的同步机制。
宝塔官方其实提供了几个专门针对这类场景的高阶工具,比如【网站文件多机实时同步】(利用底层 inotify 机制做毫秒级增量文件镜像,主服务器一传图片从服务器自动同步),以及【企业级多云自动备份】(定时将增量数据库加密分发上传到阿里云 OSS、腾讯云 COS 或 AWS S3,哪怕服务器突发故障,拉取异地镜像几分钟就能拉起新机)。
不过大家用面板也知道,宝塔官方这类高级运维插件如果单独买,每个单月都要好几十块,长期下来很不划算。如果你的站点打算长期稳定跑,直接用宝塔企业版就划算得多,包括这两款数据容灾在内的 30 多款企业级插件全都直接解锁免费用。我们网站这边拿到了官方合作的正版终身授权方案,一次买断终身有效,而且支持后台自主免费换绑服务器 IP,换新机也不用担心授权浪费,有长期建站需求的朋友可以在博客首页顺手了解一下。