宝塔面板整站搬家换服务器的实操记录与踩坑细节

核心导读:记录最近把站点从老机器迁移到新服务器的完整流程,涵盖环境对齐、大文件传输、数据库导入、权限修复与平滑解析切换,留作运维备忘。

最近手头一台老服务器到期,续费不太划算,干脆趁着优惠换了一台新机器。周末花了半天时间把跑在上面的两个 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 文件夹)和无用的临时日志,减少体积。

在老服务器终端执行压缩命令,直接走多线程压缩比较省时:

bash
tar -zcvf site_backup.tar.gz /www/wwwroot/yourdomain.com

打包完成后,在新服务器直接通过 rsyncscp 从老服务器拉取,走内网(同机房)或者直接公网拉取,速度远高于面板网页下载再上传:

bash
scp root@老服务器IP:/root/site_backup.tar.gz /www/wwwroot/

数据库安全导出与导入

千万不要在 MySQL 运行状态下直接打包拷贝 /www/server/data 目录,极易损坏表结构。

推荐在老服务器通过命令行或者宝塔的“备份数据库”功能导出为 .sql.gz 文件:

bash
mysqldump -u用户名 -p密码 数据库名 > db_backup.sql

传到新机器后,先在宝塔面板的“数据库”菜单里新建一个同名数据库,然后通过面板的“导入”功能或者终端命令导入:
bash
mysql -u新用户名 -p新密码 新数据库名 < db_backup.sql

3. 容易遗漏的关键配置与权限修复

把文件解压到新服务器的目录后,先别急着改解析,有三个地方最容易被忽略:

目录权限重置

通过 tar 解压出来的文件,所有者经常会变成 root,导致网站程序无法上传图片、无法更新插件,甚至直接报错 500。

解压后必须在终端重置文件归属给 www 用户:

bash
chown -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.pemprivkey.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 日志确认访客已全部转移后,再做下线处理即可。

常见问题与解答 (FAQ)

Q 迁移完成后打开网站提示“Error establishing a database connection”怎么办?

这通常是因为新站配置文件中的数据库连接信息(库名、用户名、密码)与新服务器创建的 MySQL 凭据不一致,去核对并修改 wp-config.php 等站点配置文件即可。

Q 老服务器上的数据什么时候可以彻底清理释放?

建议在新服务器解析生效并稳定运行 3 到 7 天后再清理老服务器,期间观察新机日志,确认没有残留的外部调用或未同步的遗留数据。

返回运维知识库