FTP传了8个G的网站文件传到一半连接断了、rsync增量同步10分钟搞定剩下的、Duplicator插件一键打包连数据库带插件全部导入新服务器,这三种网站迁移方式你站的数据量决定了该用哪个
网站迁移实际上要搬三样东西,少一样站就打不开
| 1 | 网站文件(HTML/PHP/图片/JS/CSS/上传目录)——占空间最大、文件数量最多的部分 |
| 2 | 数据库(文章/页面/设置/用户/评论/插件数据)——网站的灵魂,导出导入最容易出编码问题 |
| 3 | 配置文件(wp-config.php / database.php / .htaccess / Nginx conf)——新服务器数据库名密码不同,必须对应修改 |
换服务器这事,真正操作过的人都知道最怕的不是花钱,是迁过去之后站打不开了。数据库连接报错、图片全部404、伪静态失效、中文乱码——每个坑都够喝一壶的。更崩溃的是,很多站长是原服务器快到期了才急急忙忙搞迁移,一边顶着时间压力一边祈祷别出问题。
迁移网站本质上就是把三样东西从A服务器搬到B服务器:文件、数据库、配置。听上去简单,但文件可能有几万个小文件(WordPress光核心文件就2000+)、数据库可能几百MB、配置文件里有绝对路径和旧域名需要替换。三个环节任何一个出错,网站就是白屏或者一堆报错。
一、迁移之前先做三件事,比选什么工具更重要
不管用什么工具迁移,动手之前这三步没做,出了事没有回头路。
全量备份
把整站文件打成tar.gz包 + 导出完整数据库SQL文件,存到本地电脑和另一个服务器各一份。这是最后的救命稻草——万一迁移失败,还能在原服务器上恢复。
记录旧环境参数
PHP版本、MySQL版本、Nginx/Apache版本、PHP扩展列表(php -m)、当前域名、数据库名和用户名。新服务器环境不一致是迁移后报错的第一大原因。

关站通知
如果网站有用户交互(评论、订单、注册),迁移前先挂一个维护模式页面,防止迁移期间产生的数据丢失。WordPress可以用WP Maintenance Mode插件一键开启。
二、三种迁移方式,按数据量和技能选
| 迁移方式 | 最适合的场景 | 耗时参考(5GB站点) | 技术门槛 | 断点续传 |
|---|---|---|---|---|
| rsync增量同步 | 大文件、多文件、跨服务器直传 | 首次5-15分钟,后续秒级 | 需SSH | 支持 |
| CMS迁移插件 | WordPress等主流CMS,一站打包 | 10-30分钟 | 零门槛 | 不支持 |
| FTP/SCP直传 | 小站、临时传几个文件 | 30分钟-2小时 | 极低 | 不支持 |
rsync——大站和多站迁移的首选
rsync 的核心优势是增量同步和断点续传。你第一次运行它会把所有文件传过去,之后每次只传有变化的文件。如果传输中途断开,重新运行同一个命令,它会自动跳过已经传完的文件,从断点继续。对于几GB甚至几十GB的网站文件,rsync 是唯一靠谱的选择。
# 整站文件同步(保留权限、保留时间戳、显示进度、排除缓存目录)rsync -avzP --progress \--exclude 'wp-content/cache/' \--exclude 'wp-content/updraft/' \/var/www/html/ \root@新服务器IP:/var/www/html/# 参数说明:# -a 归档模式,保留权限、时间戳、软链接# -v 显示详细输出# -z 传输时压缩# -P 显示进度 + 支持断点续传# --exclude 排除不需要迁移的缓存和备份目录rsync 传完文件后,数据库还需要单独处理。在旧服务器导出、在新服务器导入:
# 旧服务器:导出数据库mysqldump -u用户名 -p 数据库名 > site_backup.sql# 把SQL文件传到新服务器rsync -avzP site_backup.sql root@新服务器IP:/root/# 新服务器:先创建数据库和用户,再导入mysql -u用户名 -p -e "CREATE DATABASE 新数据库名 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"mysql -u用户名 -p 新数据库名 < site_backup.sql数据库导入最常见的问题:文件太大传不上去
phpMyAdmin默认上传限制通常是50MB,如果你的SQL文件超过这个大小,有三种办法:
· 用命令行 mysql 直接导入(无大小限制)
· 把SQL文件压缩成 .gz 格式,用 zcat backup.sql.gz | mysql 管道导入
· 用 BigDump 这类分块导入工具,会自动把大SQL文件拆成小块逐段执行
CMS迁移插件——WordPress用户的最省心方案
如果你是WordPress站点,迁移插件把文件+数据库+域名替换打包成一个流程,不需要碰命令行。目前最主流的三款:
All-in-One WP Migration
操作最简单。旧站装插件→导出成一个.wpress文件→新站装WordPress+插件→导入这个文件。自动替换域名、自动处理数据库序列化数据。
限制:免费版上限512MB,超过需要付费版。大站不太适用。
Duplicator
生成两个文件:installer.php + 打包的zip文件。把这两个文件传到新服务器,浏览器访问installer.php,按向导填新数据库信息即可。
免费版没有大小限制,大站也能用。支持手动排除特定目录。
UpdraftPlus Migrator
如果你已经在用UpdraftPlus做备份,直接买Migrator扩展就能把备份一键恢复到新站。备份和迁移一套工具搞定。
Migrator是付费扩展,但省了在不同工具之间切换的麻烦。
宝塔面板——有面板就用这个,0命令行

如果新旧服务器都装了宝塔面板,迁移流程极其简单:旧服务器在"网站"页面点"备份",选择"全量备份"(包含网站文件+数据库),下载备份包。新服务器在"网站"页面点"添加站点"→域名填新服务器的IP或临时域名→创建后在"网站"页面点"恢复",上传刚才的备份包。宝塔会自动解压文件、导入数据库、创建对应的网站配置。
唯一需要注意的是PHP版本——新服务器的PHP版本要和旧服务器保持一致。如果旧站是PHP 7.4,新服务器装了PHP 8.2,迁移过去可能直接白屏。宝塔支持一键切换PHP版本,在"网站→设置→PHP版本"里改。
三、迁移之后立刻检查的五个地方
文件传完了、数据库导入了、域名解析也改了,这时候网站能打开就算完事了吗?至少还有五个地方需要逐一确认:
| 检查项 | 怎么检查 | 常见问题 |
|---|---|---|
| 首页能打开 | 浏览器访问 + curl -I 看HTTP状态码 | 数据库连接失败(wp-config.php配置不对) |
| 内页能打开 | 随便点几个文章页面 | 伪静态没生效(.htaccess或Nginx规则没配) |
| 图片正常显示 | 看文章里的图片、媒体库里的图片 | 上传目录权限不对(需要755或775) |
| 后台能登录 | 登录/wp-admin或/admin后台 | 登录后跳回旧域名(数据库里没替换域名) |
| 中文没乱码 | 查看文章标题、内容、分类名 | 数据库字符集不一致(导出/导入时编码问题) |
这里有一个特别容易漏的点:如果域名也同时换了(比如从old-domain.com换成new-domain.com),数据库里所有包含旧域名的链接都要替换。WordPress可以用 Better Search Replace 插件全局替换,其他CMS在导出SQL文件后用sed替换:
# 导入前在SQL文件中替换旧域名为新域名sed -i 's/old-domain.com/new-domain.com/g' site_backup.sql# 注意:如果用了HTTPS,http和https都要替换sed -i 's/http:\/\/old-domain.com/https:\/\/new-domain.com/g' site_backup.sqlsed -i 's/https:\/\/old-domain.com/https:\/\/new-domain.com/g' site_backup.sql域名替换后一定要清缓存
WordPress的WP Rocket、W3 Total Cache等插件会把页面缓存成HTML文件,里面嵌的还是旧域名。域名替换完后,进后台清掉所有缓存,否则首页和内页可能显示的还是旧域名链接。
四、非WordPress站点怎么迁移
帝国CMS、DedeCMS、Z-Blog、Typecho等非WP站点没有一键迁移插件,但流程和WP手动迁移基本一致。以帝国CMS为例:
· 文件迁移:用rsync把整站目录传过去(或打包下载再上传)
· 数据库迁移:在旧站后台"系统→备份与恢复→备份数据",下载备份文件。新站安装同版本帝国CMS后,在后台"系统→备份与恢复→恢复数据"上传恢复。或者直接用phpMyAdmin导出导入
· 配置文件:修改 /e/config/config.php 里的数据库连接信息(db_host、db_user、db_pass、db_name)
· 路径更新:帝国CMS后台"系统→系统参数设置"里如果有绝对路径配置,更新为新服务器的路径
纯静态HTML站的迁移最简单——rsync同步文件就行,没有数据库、没有配置文件的烦恼。但要注意 .htaccess 文件(Apache的URL重写规则)也要一并传过去,否则伪静态会失效。
五、多站点批量迁移怎么搞
如果你手里有几十个站需要从一台服务器迁移到另一台,一个一个操作会疯掉。批量迁移的思路是:
#!/bin/bash# 批量迁移所有站点到新服务器# 假设所有站点都在 /var/www/ 下,每个站点一个目录SITES_DIR="/var/www/"NEW_SERVER="root@新服务器IP"NEW_DIR="/var/www/"for site in $(ls $SITES_DIR); doecho "正在迁移: $site"# 1. 同步文件rsync -avzP ${SITES_DIR}${site}/ ${NEW_SERVER}:${NEW_DIR}${site}/# 2. 导出数据库(需要提前知道每个站的数据库名)DB_NAME=$(grep -r "DB_NAME" ${SITES_DIR}${site}/wp-config.php | head -1 | cut -d"'" -f4)mysqldump -u用户名 -p密码 $DB_NAME > /tmp/${site}.sqlrsync -avzP /tmp/${site}.sql ${NEW_SERVER}:/tmp/# 3. 在新服务器导入数据库ssh ${NEW_SERVER} "mysql -u用户名 -p密码 -e 'CREATE DATABASE IF NOT EXISTS ${DB_NAME}'"ssh ${NEW_SERVER} "mysql -u用户名 -p密码 ${DB_NAME} < /tmp/${site}.sql"echo "完成: $site"done当然,这是理想情况——所有站的数据库用户名密码都一样。实际场景中每个站的数据库配置可能不同,需要根据各自的配置文件分别读取。如果站点数量在10个以内,还是建议逐个迁移,每迁完一个验证一个,确保不出问题。
多站点统一管理下的迁移
如果你用的是UC建站系统这种统一管理多站点的平台,迁移的逻辑不一样——不是搬单个站的文件和数据库,而是在新服务器上重新部署系统环境,然后通过管理后台把站点配置和数据同步过去。系统会把每个站的独立部署信息(IP、域名、模板、内容库)统一管理,迁移时不需要逐个站手动操作。
网站迁移这事,选对工具就成功了一半。小站(500MB以内)直接用CMS迁移插件,点几下鼠标搞定。中等站(500MB-5GB)用宝塔面板或Duplicator,界面化操作不用记命令。大站(5GB以上)和多站批量迁移只有rsync一条路——增量同步和断点续传是FTP没法比的。不管你选哪种方式,迁移完一定要把那五个检查项逐一遍过去:首页、内页、图片、后台、中文。这五样没问题,站才算真正搬完了。
