博客从 WordPress 迁移至 Halo
WordPress 是一个免费的开源项目,使用 PHP 语言开发的博客平台,并逐步演化成一款内容管理系统软件,数据开发基于 MySQL,有许多第三方开发的免费模板,安装方式简单易用。其它详细信息请参考官方网站,有特别详细的说明,地址如下。
官方英文网站:https://wordpress.org/
官方中文网站:https://cn.wordpress.org/
Halo 也是一个免费的开源项目,使用 Java 语言开发的博客平台,官网解释是一款现代化的开源博客/CMS 系统,值得一试。数据库开发可基于 H2、MySQL,默认是 H2,可自定义,安装方式简单易用,还可基于 docker 安装,方便快捷。其它详细信息也请参考官方网站,有特别详细的说明,地址如下。
两个博客的安装,配置,调试,访问等,这里就不再介绍了,请参考上面的官方文档。
这篇主要说说,当且仅当你当前的博客是 WordPress,如何迁移到 Halo。其实应用部分,相当于基于 Halo 新搭建部署一个博客,但数据部分,如何从 WordPress 对应的表,迁移到 Halo 对应的表,是最复杂的部分,因为两个博客 MySQL 表类似却又不同,没法直接迁移,需要做字段对应关系才行。
WordPress 和 Halo 博客后台对应的表清单分别如下:
当然,每个人 WordPress 对应的表也许不一样,因为自己安装了部分插件等,都会新生成各种表,但 WordPress 刚部署搭建的几张通用表都是一样的,如文章、评论、链接、用户等表。
接下来,干货来了,如何把数据迁移过去呢?
提前注意:以下 SQL 脚本中,部分死值都是博主自己根据自有情况写的,请执行脚本前,对部分 SQL 脚本进行编辑再执行,切记!!!
脚本一:迁移分类目录。
INSERT INTO categories
SELECT
t.term_id id,
now() create_time,
now() update_time,
t.description description,
t1.`name` NAME,
t.parent parent_id,
NULL PASSWORD,
t1.slug slug,
NULL slug_name,
'' thumbnail
FROM
wp.wp_term_taxonomy t
LEFT JOIN wp.wp_terms t1 ON t.term_id = t1.term_id
WHERE
t.taxonomy = 'category'
ORDER BY
t.term_id
脚本二:迁移标签。
insert into tags
SELECT
t.term_id id,
now() create_time,
now() update_time,
t1.`name` NAME,
t1.slug slug,
t1.slug slug_name,
'' thumbnail
FROM
wp.wp_term_taxonomy t
LEFT JOIN wp.wp_terms t1 ON t.term_id = t1.term_id
WHERE
t.taxonomy = 'post_tag'
ORDER BY
t.term_id
脚本三:迁移文章。
注意:如果你在 WordPress 中写的文章够多,这个 SQL 执行很慢,请耐心等待。。。
insert into posts
SELECT
0 type,
t1.id id,
t1.post_date create_time,
t1.post_modified update_time,
0 disallow_comment,
t1.post_modified edit_time,
0 editor_type,
t1.post_content format_content,
0 likes,
NULL meta_description,
NULL meta_keywords,
t1.post_content original_content,
'' PASSWORD,
t1.id slug,
0 STATUS,
'' summary,
'' template,
'' thumbnail,
t1.post_title title,
0 top_priority,
NULL url,
t2.meta_value visits,
0 word_count
FROM
wp.wp_posts t1
LEFT JOIN wp.wp_postmeta t2 ON t1.id = t2.post_id
AND t2.meta_key = 'post_views_count'
WHERE
t1.post_type = 'post'
ORDER BY
t1.id
脚本四:迁移页面。
insert into posts
SELECT
1 type,
t1.id id,
t1.post_date create_time,
t1.post_modified update_time,
0 disallow_comment,
t1.post_modified edit_time,
0 editor_type,
t1.post_content format_content,
0 likes,
NULL meta_description,
NULL meta_keywords,
t1.post_content original_content,
'' PASSWORD,
t1.id slug,
0 STATUS,
'' summary,
'' template,
'' thumbnail,
t1.post_title title,
0 top_priority,
NULL url,
t2.meta_value visits,
0 word_count
FROM
wp.wp_posts t1
LEFT JOIN wp.wp_postmeta t2 ON t1.id = t2.post_id
AND t2.meta_key = 'post_views_count'
WHERE
t1.post_type = 'page'
ORDER BY
t1.id
脚本五:迁移用户。
注意:如果你在 WordPress 中用户很多,这个 SQL 执行也很慢,请耐心等待。。。
insert into users
SELECT
t1.id id,
t1.user_registered create_time,
t1.user_registered update_time,
NULL avatar,
t1.user_url description,
t1.user_email email,
t1.user_registered expire_time,
NULL mfa_key,
0 mfa_type,
t1.display_name nickname,
t1.user_pass PASSWORD,
t1.user_login username
FROM
wp.wp_users t1
WHERE
t1.id <> 1
ORDER BY
t1.id
脚本六:迁移评论。
insert into comments
SELECT
0 type,
t1.comment_ID id,
t1.comment_date create_time,
t1.comment_date update_time,
t1.comment_mail_notify allow_notification,
t1.comment_author author,
t1.comment_author_url author_url,
t1.comment_content content,
t1.comment_author_email email,
'055c801bbbea60177266fe798f1e7164' gravatar_md5,
t1.comment_author_IP ip_address,
0 is_admin,
t1.comment_parent parent_id,
t1.comment_post_ID post_id,
0 STATUS,
NULL top_priority,
t1.comment_agent user_agent
FROM
wp.wp_comments t1
ORDER BY
t1.comment_ID
注意,这个脚本迁移的评论是所有评论,需要结合前面刷过的 post 表,把页面的评论单独刷一下,否则页面评论关联不上。脚本如下:
UPDATE comments t1,
posts t2
SET t1.type = 1
WHERE
t1.post_id = t2.id
AND t2.type = 1
脚本七:迁移链接。
insert into links
SELECT
t1.link_id id,
t1.link_updated create_time,
now() update_time,
t1.link_description description,
t1.link_image logo,
t1.link_name NAME,
t1.link_rating priority,
t1.link_rel team,
t1.link_url url,
t1.link_notes notes
FROM
wp.wp_links t1
ORDER BY
t1.link_id
脚本八:迁移文章和分类目录的关系。
insert into post_categories
SELECT NULL
id,
t3.post_date create_time,
t3.post_modified update_time,
t.term_id category_id,
t3.id post_id
FROM
( SELECT * FROM wp.wp_posts WHERE post_type = 'post' ) t3
JOIN wp.wp_term_relationships t2 ON t3.id = t2.object_id
JOIN wp.wp_term_taxonomy t ON t2.term_taxonomy_id = t.term_taxonomy_id
AND t.taxonomy = 'category'
脚本九:迁移文章和标签的关系。
insert into post_tags
SELECT NULL
id,
t3.post_date create_time,
t3.post_modified update_time,
t3.id post_id,
t.term_id tag_id
FROM
( SELECT * FROM wp.wp_posts WHERE post_type = 'post' ) t3
JOIN wp.wp_term_relationships t2 ON t3.id = t2.object_id
JOIN wp.wp_term_taxonomy t ON t2.term_taxonomy_id = t.term_taxonomy_id
AND t.taxonomy = 'post_tag'
通过以上九步走,你的 WordPress 中的大部分基本数据均迁移完成,可以上 Halo 后台查看各个页面是否都展示了数据。如果部分页面以上,可以查看对应脚本,以及刷入的数据关系,是否有对不上的地方,烦请自行补充脚本再次刷数。
以下贴一些后台数据展现的截图,供参考:
仪表盘:
文章列表:
分类目录:
标签列表:
页面列表:
评论列表:
Good Luck!