<div data-theme-toc="true"> </div>
在我将 phpBB 3.x 论坛迁移到 Discourse 之前,我采取了几个步骤来清理和准备数据。这概述了我正在做的,以帮助其他人为迁移做准备。许多建议都会删除数据,因此在进行以下任何建议之前,请务必备份数据库。
清理旧主题和帖子。
查看您的分类,确定是否需要迁移所有主题。您是否需要所有数据,还是只需要最近几年的主题?phpBB 会根据年龄自动清理主题。您可以在 phpBB ACP 中为您的论坛设置/调整清理日期。转到“论坛”,然后选择您要修改的论坛的齿轮图标。
清理旧用户名。
Discourse 导入器不会迁移未发帖的用户。了解这一点后,您可以删除从未发帖的旧用户。转到 phpBB ACP,然后选择“用户和组”。有一个“清理用户”选项。您可以将帖子数设置为 0 并设置上次活动日期。这将允许您删除所有从未发帖且在您的论坛上已有一段时间未活跃的用户。
确定匿名用户帖子的数量。
Discourse 迁移会将匿名用户迁移为被暂停的用户或全部迁移到一个系统用户。查看有多少主题/帖子归属于匿名用户。
MySQL 将确定匿名用户的 user_id。对于大多数安装,这是 user_id = 1。
SELECT `user_id`, `username` FROM `phpbb_users` where `username_clean` = "anonymous"
检查主题和帖子。使用您的系统匿名用户 ID 更新查询
SELECT * FROM `phpbb_posts` where `poster_id` = "1"
SELECT * FROM `phpbb_topics` where `topic_poster` = "1"
根据这些结果,您需要确定如何配置系统来处理匿名用户帖子和主题。我只有几个,所以我删除了它们。
查看隐藏或软删除的帖子。
这是 phpBB 3.1 中实现的一个功能。验证您是否有任何隐藏或软删除的帖子。Discourse 会忽略此字段并导入帖子。帖子被用户/版主删除是有原因的。
SELECT * FROM `phpbb_posts` where `poster_visibility` = "2"
删除列出的任何帖子。
验证干净的电子邮件。
请运行以下 MySQL 脚本来验证您的电子邮件,确保它们没有尾随空格,并删除任何已识别的电子邮件问题。
SELECT `user_email` FROM `phpbb_users` where CHAR_LENGTH(`user_email`) != CHAR_LENGTH(TRIM(`user_email`)) ORDER BY `user_id` ASC
验证重复标题。
Discourse 设置有一个允许重复标题的标志。以下查询将帮助您了解您是否有许多重复的标题。我的论坛有超过 1000 个标题重复的主题,所以我更新了允许重复主题标题的标志。
SELECT `topic_title`, COUNT(*) as count FROM `phpbb_topics` GROUP BY `topic_title` HAVING COUNT(*) > 1 ORDER BY `count` DESC
查找孤立的主题。
每个主题都应该有一个帖子,但有时会出错。这将列出所有没有帖子的主题。
SELECT * FROM `phpbb_topics` WHERE `topic_id` NOT IN (Select topic_id from phpbb_posts) ORDER BY `topic_approved` DESC
清理任何孤立的主题。
查找孤立的帖子。
每个帖子都应该属于一个主题。这将列出没有有效 topic_id 的帖子。
SELECT * FROM `phpbb_posts` WHERE `topic_id` NOT IN (Select topic_id from phpbb_topics) ORDER BY `post_id` DESC
清理任何孤立的帖子。
验证第一个主题帖子是否有效
主题的第一个帖子可能会被删除,导致主题的 first_post_id 不正确。这会验证 topic_first_post_id 是否有效。
SELECT * FROM `phpbb_topics` WHERE `topic_first_post_id` NOT IN (Select post_id from phpbb_posts) ORDER BY `topic_approved` DESC
清理第一个主题的 post_id
在准备即将进行的迁移时,我会添加更多项目。如果您有任何建议的检查,请在下方添加。