WordPress数据库跨版本直接合并大概率出错,因wp_options的siteurl、home、wp_db_version及wp_users密码哈希格式(5.0+用PHPass,旧版用md5)不兼容;应先升级旧站或仅迁移内容表(wp_posts等),并替换GUID和URL。
确认两个数据库的 WordPress 版本差异是否可兼容
直接合并不同版本的 wordpress 数据库,大概率会出错——不是数据丢失,就是后台崩溃。核心问题在于 wp_options 表里的 siteurl、home 和 wp_db_version 这几项,还有 wp_users 和 wp_usermeta 中的密码哈希格式(尤其是 5.0+ 默认用 php 7.4+ 的 password_hash(),老版本用的是 md5() 或 phpass)。
- 先分别登录两个 phpMyAdmin,在各自
wp_options表里查wp_db_version值(比如47758对应 WP 6.2,38590对应 WP 4.9) - 如果版本差跨大版本(如 4.x → 6.x),别硬合——先升级旧站到中间版本(比如升到 5.9),再导出;或者只迁移内容表(
wp_posts、wp_postmeta、wp_terms等),跳过系统表 - 注意:WordPress 升级脚本依赖
wp_options中的db_upgraded标志,手动合并后这个值可能缺失或错位,导致升级失败
只合并内容表,避开用户和配置冲突
绝大多数合并需求其实只是“把旧站点的文章、分类、图片附件搬过来”,而不是连管理员账号一起搬。强行合并 wp_users 和 wp_usermeta 容易触发密码失效、角色丢失、插件权限错乱。
- 导出时只勾选:
wp_posts、wp_postmeta、wp_terms、wp_term_taxonomy、wp_term_relationships、wp_comments、wp_commentmeta - 导入前,在目标库执行:
SET FOREIGN_KEY_CHECKS = 0;
避免外键约束报错(尤其wp_postmeta.post_id指向不存在的wp_posts.ID) - 导入后,立刻运行 SQL 修复文章关联:
UPDATE wp_posts SET post_status = 'publish' WHERE post_status = 'draft' AND post_type = 'post';
(旧库草稿太多,直接 publish 可能暴露未审核内容,按需调整)
处理 GUID、URL 和附件路径不一致
wp_posts.guid 字段在 WordPress 里是只读标识符,但很多主题/插件会把它当真实 URL 用。旧库的 guid 还带着旧域名(比如 http://old-site.com/?p=123),直接合并会导致 RSS、JSON API 返回错误链接。
- 导入前,在导出 SQL 文件里全局替换:
http://old-site.com→https://new-site.com(注意保留协议和斜杠) - 更稳妥的做法:导入后执行 SQL 更新
wp_posts和wp_postmeta中的 URL:UPDATE wp_posts SET guid = REPLACE(guid, 'http://old-site.com', 'https://new-site.com');<br>UPDATE wp_postmeta SET meta_value = REPLACE(meta_value, 'http://old-site.com', 'https://new-site.com') WHERE meta_key IN ('_thumbnail_id', '_wp_attached_file'); - 附件物理文件必须同步复制到新服务器的
wp-content/uploads/目录,否则guid改了也没用
phpMyAdmin 导入大 SQL 文件失败怎么办
超过 2MB 的 SQL 文件,phpMyAdmin 默认会卡在上传阶段,报错 No data was received to import 或 max_allowed_packet 超限,这不是操作错误,是配置限制。
- 临时改 phpMyAdmin 配置:编辑
config.inc.php,加一行:$cfg['ExecTimeLimit'] = 0;
并确保upload_max_filesize和post_max_size在php.ini里设为256M - 更可靠的方式:用命令行导入(需服务器 SSH 权限):
mysql -u username -p database_name < /path/to/file.sql
- 如果只有 phpMyAdmin 可用,就拆分 SQL 文件——用文本编辑器按
INSERT INTO `wp_posts`或INSERT INTO `wp_postmeta`分段,每次传一个表,避免单次超限
wp_options 里活跃插件列表和 wp_posts 的 post_status 分布,比盲目导入重要得多。



















