最近老服务器租约快到期,趁着活动买了一台配置更高的新机,周末花了大半天时间把上面的 4 个站点完整挪了过去。这种操作虽然频率不高,但每次做都要提心吊胆,生怕漏了数据或者搞崩权限。
只要思路清晰,整个迁移过程其实可以做到接近零停机。顺手把这次的完整步骤和踩过的细节坑记下来,方便自己以后换机时对着看,也给准备搬家的朋友一个参考。
1. 迁移前的环境对齐与准备
很多人一上来就急着拷文件,最后在新机器上一跑直接报 500 错误。迁移前最关键的一步是把新服务器的环境版本尽量与老服务器配成一致,尤其是 PHP 的小版本与扩展组件。
在老服务器的宝塔后台里先扫一眼这几项,并在新机上提前安装好:
| 软件/配置项 | 检查建议 | 为什么重要 |
|---|---|---|
| Nginx / Apache | 大版本保持一致(如 1.22) | 避免伪静态规则或自定义配置指令在新版弃用 |
| MySQL / MariaDB | 尽量一致(如 MySQL 5.7 转 5.7) | 低版本导出的 SQL 导入高版本偶尔会有语法报错 |
| PHP 版本 | 站点绑定的具体版本(如 7.4 或 8.1) | 新机未装对应版本会导致站点无法启动 |
| PHP 扩展组件 | 如 redis、fileinfo、exif、imagemagick | 缺少关键扩展会导致程序逻辑直接 Fatal Error |
| 内存交换分区 (Swap) | 2G 及以下机器务必先分配 1~2G Swap | 防止导入大型数据库时 MySQL 进程被系统 OOM 杀掉 |
环境搭好后,顺便把域名的 DNS 解析 TTL 提前调小(比如从 10 分钟调成 60 秒),这样后续切解析时能更快在全网生效。
2. 数据传输与同步操作
根据数据量大小,通常有两种比较稳妥的搬法:
方式 A:宝塔自带的「一键迁移」插件
如果两台机器都可以通过公网正常访问,这是最轻松的方案。在老机器安装「宝塔一键迁移 API 版」,新机器也安装相同插件。在新机器上获取 API 密钥填入老机器,勾选要迁移的网站、数据库和 FTP,面板会自动在后台完成打包、传输、解压、新建站点和导入数据库。注意:如果单站点文件超过 30GB 或者包含了海量小图片,API 传输在网络波动时可能会出现超时断联。遇到这种大体积网站,建议使用方式 B。
方式 B:手动打包压缩 + 命令行同步
对于大体积站点,手动操作虽然稍繁琐,但心里最踏实。- 老机备份数据库:直接在面板「数据库」里点备份,或者用命令行导出 SQL 文件并压缩:
bashmysqldump -u root -p db_name > /www/backup/db_name.sql
- 老机打包站点目录:进入
/www/wwwroot目录,排除掉无关的临时缓存目录后打包:
bashtar -czvf site.tar.gz /www/wwwroot/your-site.com
- 直接传到新机:通过
scp或rsync直连传输,速度完全取决于两台机器的公网带宽峰值:
bashscp -P 22 site.tar.gz root@新服务器IP:/www/wwwroot/
- 新机解压并导入:在宝塔后台新建对应的同名站点与同名数据库(账号密码尽量与老机保持一致,省去改配置文件的麻烦),解压源码覆盖到目录,并在面板里导入刚才传过来的 SQL 备份。
3. 数据库校验与文件权限检查
文件和数据库到位后,千万别急着解析域名,这里最容易遗漏两个细节问题:
- 文件属主权限:
root:root,导致网站程序无法生成缓存或上传图片。在新机器的宝塔面板中进入 /www/wwwroot,点击站点目录右侧的「权限」,确认权限为 755,所有者为 www:www。也可以直接在终端跑一条命令递归修正:
bashchown -R www:www /www/wwwroot/your-site.com
- 数据库连通性:
wp-config.php,Laravel 的 .env),核对数据库名、用户名、密码是否与新机宝塔建好的完全一致。
- 伪静态与 SSL 证书:
4. 本地 Hosts 测试与域名解析切换
在新服务器完全准备就绪后,先不要直接动公网 DNS 解析。通过修改自己电脑本地的 hosts 文件来验证:
text新服务器IP your-site.com 新服务器IP www.your-site.com
保存后,用浏览器无痕模式打开网站:
- 检查前台首页、文章页、图片加载是否正常。
- 登录后台发布一篇测试草稿,测试上传一张图片,确认数据库写入和上传目录权限没毛病。
验证通过后,将本地 hosts 恢复原样。进入域名 DNS 服务商后台,把 A 记录修改为新服务器的 IP。因为前面已经把 TTL 调小了,通常几分钟内各地就会陆续切到新机。
老机别急着退役:切完解析后,建议保留老服务器的数据和运行状态至少 3 到 5 天。观察两台机器的访问日志,直到老机器的 Nginx 访问日志基本不再产生动态请求,确认迁移彻底平稳过渡后,再去格式化或注销老服务器。