最近手头一台老服务器到期,续费不太划算,干脆趁着优惠换了一台新机器。周末花了半天时间把跑在上面的两个 WordPress 和一个静态小站平移过去。数据量加起来大概二十多吉字节,为了尽量缩短停机时间,避免搬家后出现权限错乱、伪静态失效或者数据库字符乱码,我顺手把这次迁移的实测步骤和排错细节记下来,留作日后备忘。
1. 迁移前的环境对齐与准备
很多人搬家喜欢直接打个包扔到新机器上解压,这样往往会在恢复阶段踩一堆坑。最省心的做法是先对齐两台服务器的基础软件栈。
在老机器的宝塔面板查看当前的运行环境,并在新服务器上尽量安装相同的主版本:
| 软件/服务 | 推荐处理方式 | 注意事项 |
|---|---|---|
| Nginx | 安装相同主版本(如 1.22) | 提前导出老站的自定义伪静态与反代配置 |
| PHP | 安装完全一致的版本(如 7.4 或 8.1) | 检查并安装老站用到的扩展(如 redis, exif, fileinfo) |
| MySQL | 尽量保持大版本一致(如 5.7 或 8.0) | 跨大版本导入时偶发语法不兼容,建议版本对齐 |
| 域名 TTL | 提前 24 小时调低至 60 秒 | 便于后续解析修改后快速在各地生效 |
提前把域名解析商那里的 TTL 改小非常重要。如果是默认的 600 秒甚至更长,等切解析的时候各地运营商 DNS 刷新会很慢,导致部分访客还在往老服务器写入数据。
2. 网站文件与数据库的迁移操作
如果站点数据量比较小(几百兆以内),可以直接用面板自带的“一键迁移”插件公网传输;但如果数据量超过 5G,或者图片附件特别多,建议手动打包传输,更稳妥且不易超时断连。
网站代码与静态附件打包
打包前建议清空站点的缓存目录(如 WP 缓存插件的 cache 文件夹)和无用的临时日志,减少体积。在老服务器终端执行压缩命令,直接走多线程压缩比较省时:
bashtar -zcvf site_backup.tar.gz /www/wwwroot/yourdomain.com
打包完成后,在新服务器直接通过 rsync 或 scp 从老服务器拉取,走内网(同机房)或者直接公网拉取,速度远高于面板网页下载再上传:
bashscp root@老服务器IP:/root/site_backup.tar.gz /www/wwwroot/
数据库安全导出与导入
千万不要在 MySQL 运行状态下直接打包拷贝/www/server/data 目录,极易损坏表结构。
推荐在老服务器通过命令行或者宝塔的“备份数据库”功能导出为 .sql.gz 文件:
bashmysqldump -u用户名 -p密码 数据库名 > db_backup.sql
传到新机器后,先在宝塔面板的“数据库”菜单里新建一个同名数据库,然后通过面板的“导入”功能或者终端命令导入:
bashmysql -u新用户名 -p新密码 新数据库名 < db_backup.sql
3. 容易遗漏的关键配置与权限修复
把文件解压到新服务器的目录后,先别急着改解析,有三个地方最容易被忽略:
目录权限重置
通过tar 解压出来的文件,所有者经常会变成 root,导致网站程序无法上传图片、无法更新插件,甚至直接报错 500。
解压后必须在终端重置文件归属给 www 用户:
bashchown -R www:www /www/wwwroot/yourdomain.com find /www/wwwroot/yourdomain.com -type d -exec chmod 755 {} \; find /www/wwwroot/yourdomain.com -type f -exec chmod 644 {} \;
数据库连接参数核对
如果新建立的数据库密码跟老机器不一样,记得去修改站点的配置文件(例如 WordPress 的wp-config.php,Typecho 的 config.inc.php),核对数据库名、用户名、密码和主机地址(通常保持 localhost)。
SSL 证书与伪静态
在新面板新建站点后,把老站的伪静态规则复制过来。如果原先有 Let's Encrypt 证书,建议直接把证书文件(fullchain.pem 和 privkey.pem)复制到新面板的 SSL 自定义证书栏中,确保切解析时直接支持 HTTPS,避免出现安全证书告警。
4. 本地验证与解析平滑切换
为了在切换前确保网站在新机器上没有任何问题,建议先不要改公网 DNS,而是通过修改本机的 hosts 文件进行测试。
修改本机 hosts 文件(Windows 位于 C:\Windows\System32\drivers\etc\hosts,Mac 位于 /etc/hosts),添加一行:
text新服务器IP yourdomain.com
保存后用浏览器隐身模式打开网站,测试以下几项:
- 首页、分类页、内容页是否能正常打开,伪静态是否生效;
- 后台登录是否正常,能否正常发布测试文章并上传图片;
- 数据库读写是否正常,检查页面是否有 PHP 报错日志。
确认一切正常后,将公网 DNS 解析修改为新服务器 IP。由于前面把 TTL 调到了 60 秒,通常几分钟内就能完成切换。老服务器先保留运行 2-3 天,观察新服务器的 Nginx 日志确认访客已全部转移后,再做下线处理即可。