网站迁移是运维工作中常见任务,更换云服务器/升级主机配置/切换服务商,都绕不过这坎。数据迁移本来不复杂,但是一个细节疏忽可能引发数据丢失、服务中断,甚至SEO排名骤降。下面是关于标准的迁移流程分享。
正式动手之前,几项准备工作决定了迁移的成败。
完整备份,且验证可恢复。这是整个迁移流程的底线。备份至少要覆盖两部分:网站所有文件(WordPress核心、主题、上传的图片和附件)和完整的数据库导出文件(.sql格式)。仅仅下载备份文件还不够,必须在另一台测试服务器上实际执行一次恢复操作,确认备份文件没有损坏、没有遗漏`/wp-content/uploads`目录下的媒体文件。迁移时若发现备份不可用,一切补救手段都为时已晚。
梳理环境依赖,提前对齐配置。网站能正常运行,依赖的是一整套环境:PHP版本、MySQL版本、Nginx或Apache、已安装的PHP扩展(如mysqli、curl、mbstring)。迁移前务必记录下源服务器的这些关键版本号,并在目标服务器上预先安装相同或更高版本的环境。环境不一致是迁移后网站打不开的最常见原因之一,框架类应用(如Laravel、ThinkPHP)对版本差异尤为敏感,差一个小版本都可能白屏。
收集所有访问凭证。迁移过程中你可能需要登录多个后台,提前备好:网站后台管理员账号、源服务器SSH或FTP账号、数据库连接信息(数据库名、用户名、密码、主机地址)、域名DNS管理后台、以及CDN或WAF服务的控制台权限。
文件传输:选对工具事半功倍
文件传输的效率直接决定了迁移耗时。数据量不同,适用的工具也不同。
对于50GB以下的中小型网站,rsync命令是最稳妥的选择。它通过增量算法仅传输变更的数据块,并支持断点续传——网络中断后可从断点继续,无需重传整个文件。实测1TB数据中仅有15GB增量时,rsync耗时仅需2.5小时,而scp则需要12小时。常用命令如下:
rsync -avz --progress /data/ root@目标IP:/backup/ --exclude='*.log'
该命令会同步整个网站目录到目标服务器,同时排除日志文件以减少传输量。如果只是传输少量文件,scp命令更简洁:
scp -r /path/to/local/files user@目标IP:/path/to/remote/
对于超过1TB的超大数据量,建议联系服务商通过物理介质邮寄,或使用服务商提供的专属迁移通道,避开公网带宽瓶颈。轻量应用服务器用户可关注控制台中的在线迁移功能,部分服务商支持同平台一键迁移。
数据库迁移:保证数据一致性
数据库是网站的心脏。迁移时建议使用mysqldump工具导出SQL文件:
mysqldump -h 源数据库IP -u 用户名 -p 数据库名 > backup.sql
为确保导出期间数据不被写入,可在业务低峰期先执行`FLUSH TABLES WITH READ LOCK`锁表,再配合`--single-transaction`参数导出。将生成的SQL文件传输到目标服务器后,通过以下命令导入:
mysql -h 目标数据库IP -u 用户名 -p 目标数据库名 < backup.sql
需要注意的是,源和目标数据库的字符集应保持一致。若迁移后出现乱码,通常是因为两边的默认字符集不统一,可在导出时通过`--default-character-set=utf8mb4`参数指定编码。另外,务必确保SQL文件名不包含“test”等敏感字符串,否则可能被服务商的安全策略拦截。
DNS切换与最终验证
文件和数据库迁移完成后,进入最关键的割接阶段。
降低TTL,缩短切换窗口。在计划切换DNS之前24至48小时,将域名A记录的TTL值从默认的600秒或更长,临时调整为300秒。这样正式切换后,全球递归DNS服务器最快可在5分钟内刷新解析记录,大幅缩短新旧服务器并存的时间窗口。
预先测试新环境。在修改DNS之前,通过修改本地hosts文件,将域名指向新服务器IP,用浏览器逐项验证:首页是否正常加载、登录功能是否可用、图片和附件是否完整显示、表单提交是否正常处理。只有所有功能测试通过,才能执行DNS切换。
切换后持续监控。DNS修改后并非瞬间完成,部分地区的用户可能仍需数小时才能访问到新服务器。切换后至少持续监控24小时,重点观察:新服务器的访问日志是否出现大量404错误(说明旧URL未正确重定向)、数据库连接是否正常、以及Google Search Console中是否有索引异常报告。
常见问题与注意事项
迁移过程中容易踩的几个坑,提前了解可以少走弯路。
迁移后网站打不开。先检查目标服务器的Nginx或Apache服务是否已启动,再用`netstat -tulnp`命令确认Web服务端口是否正常监听。其次排查`/etc/hosts`文件中是否包含指向旧服务器内网IP的记录。最后别忘了检查防火墙或安全组规则是否放行了80和443端口。
数据库连接失败。WordPress的`wp-config.php`或Laravel的`.env`文件中,数据库连接信息仍指向旧服务器,必须手动修改为新数据库的地址、用户名和密码。
伪静态规则未生效。使用宝塔面板的用户需要特别注意:迁移插件不会自动同步Nginx的伪静态配置文件,这个文件存放在`/www/server/panel/vhost/rewrite/`目录下,需要手动下载后上传到新服务器的对应位置。
SSL证书需要重新绑定。即使证书文件随站点一同迁移,宝塔等面板也不会自动关联。迁移后需要进入站点的SSL设置界面,手动导入证书文件并点击部署。
为SEO留好后路。迁移前务必梳理旧站所有URL结构,确保新旧页面之间存在一一对应的301重定向。迁移完成后在Google Search Console和百度站长平台中提交新站点地图,并在验证阶段同时验证新旧两个域名,便于后续监控索引状态。
关于费用。网站迁移本身不产生额外费用,但目标服务器会产生新购费用。以Jtti轻量云服务器为例,入门级2核2G配置年费约$87左右,足以支撑日均数万PV的企业官网。
CN
EN