WordPress多站点迁移需导出全部表(含wp_blogs、wp_site、wp_sitemeta及所有wp_N_*子站表),导入后须逐个更新各wp_N_options表中的siteurl、home、upload_path和fileupload_url字段,并同步修正wp-config.php中DOMAIN_CURRENT_SITE、PATH_CURRENT_SITE和SITE_ID_CURRENT_SITE常量。
直接迁移 wordpress 多站点不能照搬单站点流程,wp_blogs、wp_site、wp_sitemeta 和所有带数字前缀的子站点表(如 wp_2_posts)必须一并导出,漏掉任意一张都会导致子站点无法加载或权限失效。
导出时必须包含全部前缀表
多站点数据库不是单个 wp_posts 表,而是由主站表 + 若干 wp_N_* 表组成。phpMyAdmin 默认只选中当前显示的表,极易遗漏。
- 在 phpMyAdmin 左侧数据库列表中点击你的数据库名,不要进某张表再点“导出”
- 顶部切换到“导出”页 → 选择“自定义” → 拉到底部“表”区域,勾选“全选”(不是“反选”,注意按钮文字)
- 务必勾选“添加 DROP TABLE 语句”,否则导入时可能因表已存在而报错
- 格式选 SQL,兼容模式设为
MYSQL40或留空(避免高版本特性被误转义)
导入后域名替换不能只改 wp_options
多站点的每个子站点都有独立的 wp_N_options 表,其中 siteurl 和 home 字段必须逐个更新,只改主站 wp_options 会导致子站点后台 404 或前端跳转回旧域名。
- 执行两条 SQL(把
旧域名和新域名替换为实际值):UPDATE wp_options SET option_value = REPLACE(option_value, '旧域名', '新域名') WHERE option_name IN ('siteurl', 'home'); UPDATE wp_2_options SET option_value = REPLACE(option_value, '旧域名', '新域名') WHERE option_name IN ('siteurl', 'home');(依此类推,对wp_3_options、wp_4_options… 都执行) - 更稳妥的做法是用命令行批量生成:先查出所有子站点 ID:
SELECT blog_id FROM wp_blogs;
再按结果逐条执行对应wp_{id}_options的 UPDATE - 别用插件“Better Search Replace”直接全库替换——它默认不处理
wp_N_options表,除非手动勾选全部表名
wp-config.php 里的多站点常量必须同步更新
除了常规的 DB_NAME、DB_USER,多站点还依赖 DOMAIN_CURRENT_SITE、PATH_CURRENT_SITE 和 SITE_ID_CURRENT_SITE,这些值写死在配置里,迁移后不改就会重定向失败或子站点路由错乱。
- 检查并修正以下几行(示例):
define('DOMAIN_CURRENT_SITE', 'newdomain.com'); define('PATH_CURRENT_SITE', '/'); define('SITE_ID_CURRENT_SITE', 1); - 如果新环境路径变了(比如从根目录迁移到子目录
/blog/),PATH_CURRENT_SITE必须同步改为/blog/,且结尾带斜杠 -
SITE_ID_CURRENT_SITE通常保持为1,但若主站点 ID 在原环境不是 1(极少见),需从原wp_blogs表中查blog_id = 1对应的记录确认
最易被忽略的是子站点的 wp_N_options 表中 upload_path 和 fileupload_url 字段——它们仍指向旧服务器路径,会导致媒体上传失败或图片 404,必须和 siteurl 一起批量替换。
立即学习“PHP免费学习笔记(深入)”;



















