网站搬家最怕的不是慢,而是搬到一半发现备份漏了、数据库连不上、域名解析指到旧机器上,前台直接打不开。这篇教程教你按”先备份、再传输、后配置、最后验证”的顺序完成一次服务器迁移,把风险点一步步排除。下面以迁往 Hostease 的 VPS(虚拟专用服务器,在一台物理机上隔离出的独立运行环境)为例,用真实命令走完整条流程,适合跑在小鸡上的站点,也适配独服(独立专用服务器,整台硬件资源独享)与云服务器(在虚拟化平台上按需分配资源的服务器)。
先说结论:服务器迁移没有玄学,只要做到”备份可恢复、传输可校验、配置可复现、上线可回滚”,成功率就很高。下面从打包数据开始,一步步展开每一个环节的实测细节。
一、迁移前先盘点:哪些数据必须带走
动手之前,先把机器上的东西分成三类:网站文件、数据库、配置文件与计划任务。网站文件通常存放在 Web 服务的根目录下,例如 Nginx 的 /var/www 或 Apache 的 /var/www/html;数据库则是 MySQL(关系型数据库管理系统)或 MariaDB 里的库;配置文件包括 Web 服务器、PHP(服务器端脚本语言)运行时、SSL(安全传输协议,为网站连接加密)证书等。最后别漏掉 crontab 里的计划任务,否则搬家后定时备份会静默失效。
用磁盘占用和条目清单确认范围,命令如下:
du -sh /var/www mysql -u root -p -e "SHOW DATABASES;" crontab -l
前三行分别看网站目录体积、列出数据库、导出计划任务。把这些输出保存下来,作为迁移的”清单”对照,避免到了新机器才想起漏了什么。
二、打包网站文件并压缩
范围确认后,先把网站文件压缩成一个归档包。这里推荐 tar(文件打包工具)+ gzip 组合,能保留文件权限与软链接,这对网站运行很关键。在旧服务器上执行:
cd /var/www tar czf /tmp/backup-site.tar.gz html
如果网站目录体积超过几个 GB,可以先用 du 确认大小,再决定是否排除缓存目录。缓存的日志、临时文件不需要带走,用 --exclude 排除能显著缩小包体。例如:
tar czf /tmp/backup-site.tar.gz --exclude='cache/*' --exclude='logs/*' html
打包完成后,用 sha256sum 记录归档包的校验值,传输到新机器后再算一次,两值一致才能确认文件没有在传输中损坏。

三、导出数据库
网站文件打包好之后,进入数据库导出环节。用 mysqldump 把目标库导出成一个 SQL 文件,这里建议加上 --single-transaction,在读操作不锁表的情况下获得一致性快照,避免在导出中途数据被写入造成不一致。命令如下:
mysqldump -u root -p --single-transaction --databases mydb > /tmp/backup-db.sql
导出完成后同样记录校验值。对于大库(例如超过 1 GB),可以配合 gzip 压缩再记录,减小传输带宽耗时:
gzip /tmp/backup-db.sql sha256sum /tmp/backup-db.sql.gz
到这一步,旧服务器上已经有了两份核心产物:website 归档包和数据库导出文件,加上它们的校验值。
四、传输到新服务器并校验
把两份归档从旧机器传到新机器,最稳妥的方式是 scp(基于 SSH 的文件复制命令)加上之前的校验值,确保文件完整到达。在新服务器上执行:
scp old_host:/tmp/backup-site.tar.gz /tmp/ scp old_host:/tmp/backup-db.sql.gz /tmp/ sha256sum /tmp/backup-site.tar.gz /tmp/backup-db.sql.gz
把算出的 sha256 与旧机器上记录的值逐行对比,完全一致再继续。这一步不要省,尤其是跨机房或跨运营商线路传输,偶发的丢包或中断都可能让压缩包在解压时报错。若 scp 因网络不稳定失败,可改用 rsync(增量同步工具)配合 --partial 断点续传:
rsync -av --partial --progress old_host:/tmp/backup-site.tar.gz /tmp/
文件校验通过后,在新机器上解压网站归档到目标目录,并导入数据库:
cd /var/www tar xzf /tmp/backup-site.tar.gz gzip -d /tmp/backup-db.sql.gz mysql -u root -p mydb < /tmp/backup-db.sql
导入完成后,用 mysql -u root -p -e "SHOW TABLES IN mydb;" 核对关键表是否都在,别急着切 DNS。

五、配置新环境:从数据库密码到 Web 服务
数据落位后,最常踩的坑是站点的配置文件里还写着旧机器的数据库地址或密码。以 WordPress(常用的内容管理系统)为例,wp-config.php 里的 DB_HOST、DB_NAME、DB_USER、DB_PASSWORD 必须改成新机器数据库的对应值。用编辑器打开核对:
grep -E "DB_HOST|DB_NAME|DB_USER|DB_PASSWORD" wp-config.php
若站点之前用绝对路径引用了旧域名或旧 IP,例如数据库里的 home、siteurl 字段或主题里的硬编码 URL,也要一并批量替换成新地址。数据库层面可以用 SQL 快速更新:
UPDATE wp_options SET option_value='https://new-domain.com' WHERE option_name IN ('siteurl','home');
接着把 Web 服务器配置指向新的网站根目录,并补上 PHP 与数据库模块,然后测试语法并重载:
nginx -t && systemctl reload nginx
配置完成后,先在本机用 hosts 或临时监听端口验证前台能正常渲染,再进入 DNS 切换环节。
六、DNS 切换与上线验证
本地验证通过后,才把域名解析切到新服务器。在域名管理后台把 A 记录或 CNAME(规范名称记录,指向目标主机名)的 IP 改成新机器地址。由于 DNS(域名系统,把域名解析为服务器 IP)缓存存在,全球生效需要几分钟到几小时不等,此时不要删除旧机器上的数据,保留回滚余地。
切换后用下面的命令确认解析与连接:
dig +short yourdomain.com curl -I https://yourdomain.com openssl s_client -connect yourdomain.com:443 -brief </dev/null | grep -i protocol
dig 应返回新 IP,curl 返回 HTTP 200,openssl 能协商到 TLS 1.2 或 1.3。三者都正常,基本可以判定迁移成功。建议再用浏览器从手机流量和不同地区的测试节点各访问一次,排除本地缓存造成的假象。

七、复盘清单与行动建议
迁移收尾阶段,建议把 crontab 计划任务、日志轮转、防火墙规则逐一在新机器上重建,并开启一轮完整备份。把这次迁移用到的命令、路径和校验值归档成文档,方便半年后复盘或再次搬家参考。对于数据量小、时间紧的站点,也可以考虑更完整的迁移工具,但手工流程能让你掌握每一步的边界,必要时回滚更可控。
如果还在纠结新机选型,可先回顾这套海外与境内 VPS 性能差异,确认迁移目标能匹配带宽(单位时间内可传输的数据量)与线路需求。对网站提速叠加 CDN(内容分发网络,分散节点加速访问)感兴趣的话,可以进一步查看CDN 与高防服务协同的解析,以及这份WordPress 迁移指南里的工具对比。建议按"备份→传输→配置→DNS→验证"五步回放一遍,每步都留下可恢复的快照,才是迁移到新服务器最稳的打法。

微信扫一扫打赏
支付宝扫一扫打赏