三种批量迁移场景,对号入座
| 迁移场景 | 典型问题 | 推荐方案 | 关键能力 |
|---|---|---|---|
| 整台服务器搬家 | 老服务器快到期了,上面跑了20个站,面板、环境、数据库、计划任务全要搬到新机器 | 宝塔整机迁移 | 面板级全量迁移,一个站不落 |
| 几十个WordPress站分散在不同服务器 | 30个WordPress站分布在3台服务器上,要统一搬到一台高配服务器 | ManageWP / MainWP | 多站点集中管理,批量克隆搬迁 |
| 批量换域名或批量替换数据库 | 站群全部换了新域名,每个站数据库里有几百处旧链接要改 | WP-CLI search-replace | 命令行批量操作,序列化数据安全替换 |
一、宝塔整机迁移:服务器级别的"全盘克隆"
如果整台服务器要换——老机器到期、升级配置、换机房——最省事的不是逐个站搬,而是用宝塔面板的"整机迁移"功能。它做的不是"复制网站",而是"把整台服务器上的面板环境、所有网站、所有数据库、FTP账号、计划任务、防火墙规则原封不动搬到新机器"。宝塔整机迁移搬了什么(一个不落)
| 迁移项 | 具体内容 | 注意事项 |
|---|---|---|
| 网站文件 | 所有站点目录(/www/wwwroot/下全部) | 文件量大的话传输时间长,建议在低峰期跑 |
| 数据库 | 所有MySQL/MariaDB数据库及用户权限 | 大数据库建议先手动导出导入,再增量同步 |
| 站点配置 | Nginx/Apache配置文件、伪静态规则、SSL证书 | 证书迁移后需验证是否生效 |
| 运行环境 | PHP版本及扩展、MySQL版本、Nginx/Apache | 新服务器环境版本最好和老服务器一致 |
| 计划任务 | 所有定时任务(备份、采集、清理等) | 迁移后逐条检查是否正常执行 |
| 面板设置 | 端口、安全入口、防火墙规则、FTP账号 | 新服务器的IP变了,FTP等地址需更新 |
# 1. 新服务器装好宝塔面板(版本和旧服务器一致或更高)
# 2. 新服务器面板 → 面板设置 → API接口 → 开启
# 3. 旧服务器面板 → 软件商店 → 安装"宝塔一键迁移"插件
# 4. 填入新服务器IP + API密钥 → 检测环境 → 一键迁移⚠ 整机迁移的三个前置条件,有一个不满足就可能失败
1. 新服务器IP必须加入旧服务器的API白名单——这是最容易漏的一步,漏了连接不上。
2. 两边的Pure-FTPd、PHP、MySQL、Nginx版本最好一致——版本差距大可能导致迁移后站点502或数据库连不上。
3. SSH端口要开放,密码认证或密钥认证至少配好一种——迁移过程依赖SSH传输文件。
二、ManageWP:WordPress站群的集中管理台
宝塔解决的是"一台服务器上所有站一起搬"的问题。但如果你的WordPress站点分布在多台服务器上——3台服务器各跑10个站——每台服务器之间没有统一的"面板"来管,怎么办?这时候需要的是WordPress多站点管理工具。ManageWP和MainWP是目前最主流的两款。ManageWP vs MainWP:到底哪个更适合批量迁移
| 对比维度 | ManageWP | MainWP |
|---|---|---|
| 部署方式 | 云端SaaS,注册账号即用 | 自托管,装在你自己的WordPress上 |
| 免费版能力 | 每月5次免费迁移、无限站点管理、批量更新 | 完全免费开源,功能靠扩展插件 |
| 批量克隆/迁移 | 内置克隆功能,A站完整克隆到B服务器 | 需装扩展,克隆能力不如ManageWP直观 |
| 批量换域名 | 付费功能 | 通过WP-CLI或插件自行处理 |
| 备份与恢复 | 云端备份(付费),一键恢复到任意服务器 | 依赖第三方备份扩展 |
| 适合谁 | 不想自己维护管理面板,愿意为便利付费 | 技术能力强,想要完全控制,追求零成本 |
ManageWP免费版每月只有5次迁移
如果你要搬30个站,免费版一个月搬不完。付费版按次收费或者订阅套餐。对于大规模一次性迁移,更经济的做法是:用ManageWP做管理(不花钱),用宝塔一键迁移做搬家(也不花钱),WP-CLI做批量数据库替换(更不花钱)。
三、WP-CLI search-replace:批量替换数据库的正确姿势
批量迁移之后最头疼的事,不是文件没搬过去,而是数据库里的旧域名没换干净。一个WordPress站的数据库里,旧域名可能出现在几十张表、几百个字段里——wp_posts的post_content、wp_options的siteurl和home、wp_postmeta的序列化数据、甚至主题设置和插件配置。直接跑SQL的UPDATE语句替换域名,会踩一个大坑:序列化数据。⚠ 为什么SQL直接替换会炸
WordPress用PHP的serialize()存储数组和对象。比如一个存储了"旧域名长度是20个字符"的序列化数据,你用SQL把旧域名直接换成新域名(假设新域名18个字符),序列化数据里的长度标记还是20,PHP反序列化的时候就炸了——整个配置项读不出来,网站白屏。WP-CLI的search-replace命令专门处理了序列化数据的边界问题,替换域名时自动修正长度标记。
# 进入网站目录
cd /www/wwwroot/oldsite.com
# 先干跑看看会替换什么(不实际执行)
wp search-replace 'oldsite.com' 'newsite.com' --dry-run
# 确认无误后正式执行
wp search-replace 'oldsite.com' 'newsite.com' --all-tables
# 如果有https/http协议差异,再跑一遍
wp search-replace 'http://newsite.com' 'https://newsite.com' --all-tables# 批量替换所有站点域名
for site in /www/wwwroot/*/; do
cd "$site"
echo "处理: $site"
wp search-replace 'olddomain.com' 'newdomain.com' --all-tables
done⚠ WP-CLI的三个前提

1. 服务器上要先装WP-CLI(宝塔面板默认自带,SSH里输入wp回车就知道装没装)。
2. 每次替换前必须备份数据库——这命令没有撤销,跑错了只能从备份恢复。
3. 先用--dry-run看输出,确认替换范围和数量符合预期再正式执行。不要跳过这一步。
四、迁移后必做的检查清单
批量搬完不是结束。迁移后有一批隐性问题是"网站看起来正常,但某个角落已经坏了",不逐项检查过几天才发现——那时候老服务器可能已经销毁了,想找原始数据都找不回来。还有一个容易被忽视的:迁移后DNS还没切到新IP之前,怎么验证网站在新服务器上是否正常?方法是修改本地hosts文件,把域名指向新服务器IP,这样你本地访问看到的就是新服务器上的网站,不影响线上用户。# Windows: C:\Windows\System32\drivers\etc\hosts
# Mac/Linux: /etc/hosts
# 加一行:
123.45.67.89 yoursite.com www.yoursite.com
# 验证完记得删掉这行!五、三种迁移场景怎么选
场景A:整台服务器所有网站一起搬

→ 宝塔整机迁移。一站不落,面板环境全带走。唯一的代价是迁移期间所有网站不可用(文件传输需要时间),建议凌晨操作。
场景B:WordPress站群分散在多台服务器
→ ManageWP做集中管理+批量克隆,配合宝塔一键迁移插件(只选部分站点)。ManageWP管调度和验证,宝塔做实际传输。
场景C:迁移已经完成,只是批量换域名
→ WP-CLI search-replace。不需要重新传文件,SSH进去每个站跑一条命令就完事。关键是处理了序列化数据,不会像SQL直接替换那样悄悄埋雷。
批量迁移最怕的不是技术难度——宝塔整机迁移点几下鼠标的事,WP-CLI一条命令的事。真正怕的是"搬完了但不知道有没有遗漏"——某个站的伪静态没生效、某个SSL证书过期了、某个计划任务静默停了。所以迁移方案的设计逻辑不是"选哪个工具最快",而是"用哪个工具组合能保证迁移前有备份、迁移中有验证、迁移后有检查"。先备份再动手、先在hosts里验证再切DNS、先只切一个低流量站做试点再批量铺开——这三条原则比任何工具都管用。
