前言
最近把博客从旧服务器迁移到新环境,没有选择直接 mysqldump 整库迁移(旧库里有大量垃圾数据和乱码),而是选择了”干净导入 + 手动补数据”的方式。这篇文章是上篇,记录迁移策略的选择,以及浏览量、菜单、主题设置等数据的恢复过程。

一、为什么不直接导整个数据库
直接 mysqldump 整库迁移是最省事的方式,但有几个问题:
- 旧库里积累了大量插件残留数据、垃圾 option 记录,迁移过去一并带入
- 部分表存在乱码,整库导入会把问题一起复制过来
- 想借这次机会做一次”清洁迁移”,只保留真正需要的数据

最终选择的策略:
| 步骤 | 操作 |
|---|---|
| 1 | 用 WordPress 官方工具(WXR)导出文章、页面、评论、媒体 |
| 2 | 新站安装好主题和插件后导入 WXR |
| 3 | 用 SQL 手动补回 WXR 不包含的数据 |
二、哪些数据 WXR 不会导出
WordPress 的 WXR 导出工具覆盖了文章、页面、评论、分类、标签,但以下数据不在 WXR 范围内:
| 数据 | 存储位置 | 是否需要手动迁移 |
|---|---|---|
| 文章浏览量 | wp_postmeta(meta_key=’views’) |
是 |
| 主题设置 | wp_options(puock_options) |
是 |
| 友情链接 | wp_links |
是 |
| 导航菜单 | wp_terms + wp_term_relationships |
单独导出 WXR 可包含 |
三、浏览量迁移
存储机制
Puock 主题把每篇文章的浏览量存在 wp_postmeta 表里:
-- 查看某篇文章的浏览量
SELECT meta_value FROM wp_postmeta
WHERE post_id = 123 AND meta_key = 'views';
-- 网站总浏览量 = 所有文章 views 的加总
SELECT SUM(meta_value) FROM wp_postmeta WHERE meta_key = 'views';

跨库迁移(两个数据库在同一台服务器)
用 root 账号登录 phpMyAdmin,执行跨库查询:
-- 预览:旧站浏览量数据
SELECT old_p.post_name, old_pm.meta_value AS views
FROM `旧`.wp_postmeta old_pm
JOIN `旧`.wp_posts old_p ON old_p.ID = old_pm.post_id
WHERE old_pm.meta_key = 'views'
AND old_p.post_status = 'publish';
-- 写入新站(按 slug 匹配)
INSERT INTO lifetruth.wp_postmeta (post_id, meta_key, meta_value)
SELECT new_p.ID, 'views', old_pm.meta_value
FROM `旧`.wp_postmeta old_pm
JOIN `旧`.wp_posts old_p ON old_p.ID = old_pm.post_id
JOIN lifetruth.wp_posts new_p ON new_p.post_name = old_p.post_name
WHERE old_pm.meta_key = 'views'
AND old_p.post_status = 'publish';
注意: 旧数据库名是中文时,必须用反引号包裹(
`旧`)。跨库查询需要 MySQL root 权限,普通数据库用户没有权限访问其他数据库。
四、导航菜单迁移
WordPress 菜单存储在 wp_terms、wp_term_taxonomy、wp_term_relationships 表中,菜单项本身是 post_type = 'nav_menu_item' 的文章。
最简单的方式:在旧站 工具 → 导出,内容类型选”导航菜单”,单独导出一个 WXR 文件,在新站导入即可。
五、主题设置迁移
Puock 主题的所有设置(外观配置、Gravatar 源、缩略图白名单等)存储在 wp_options 表的 puock_options 字段里:
-- 旧站导出主题设置
SELECT option_value FROM wp_options WHERE option_name = 'puock_options';
-- 新站写入
UPDATE wp_options
SET option_value = '(粘贴旧站导出的 JSON 内容)'
WHERE option_name = 'puock_options';
六、phpMyAdmin 操作要点
- 跨库查询必须用 root 登录:宝塔面板 → 数据库 → root 密码,用 root 账号登录 phpMyAdmin
- 选中目标数据库:登录后在左侧点击目标数据库,或在 SQL 前加
USE lifetruth; - 中文数据库名用反引号:
`旧`而不是旧
总结
WXR 适合迁移内容,不适合迁移配置和统计数据。浏览量、主题设置、友情链接都需要额外的 SQL 操作来补全。下篇将记录缩略图迁移与 COS 存储桶配置的完整过程。
正文完