迁移vBulletin 5数据库 - 导入脚本错误

那么,对你 Jammy 来说是“坏消息”。

我们决定脚本仍处于未完成状态,因此我们将从头开始编写脚本,直接将我们的 vb3 安装迁移到 discourse。同时使用 C#,这使其速度提高了几个数量级。

如果我们设法使脚本“通用”到足以公开我们的 github,但即使有兴趣迁移仍停留在 vb3 的旧社区,我也对此表示怀疑。

2 个赞

只是一个快速更新。感谢一个非常敬业的小团队的辛勤工作,我们几乎完成了。

从下周一开始,我们将在暂存服务器上进行几次测试运行,但结果很有希望。

这是我们拥有的总数:

大小方面,vbulletin3格式的数据库大约为8GB。

从本地机器远程连接到源数据库的测试运行大约需要6小时才能完成。

该脚本迁移所有论坛/子论坛,并将它们翻译成类别和子类别。需要三级子类别,因为我们有一个非常老式的论坛,并且那里托管的一些“氏族”论坛嵌套得非常非常深。

三级以上的任何内容都会自动转换为标签,保持其在父/子子论坛关系方面的层次结构(使用标签组)。

任何设置了自定义权限(例如只读)、仅限版主/管理员访问或仅通过密码隐藏访问的子论坛,都将被迁移为“仅限员工访问”。最终将有大约十几个这样的子论坛,我们可以让员工手动为正确的用户组重新启用它们。

用户、用户组和私人消息也会被迁移。私人消息的迁移方式是“discourse方式”,这意味着它将采用discourse使用的线程组织方式,而不是像简单的1:1数据库迁移那样(数据库结构真的很蠢)看到一个包含1条消息的N个主题。

该脚本还已经完成了所有帖子的“烹饪”,以加快处理速度。

主题和帖子迁移是通过多个并行连接完成的,并且将始终尝试使用源数据库允许的最大连接数。

我们将看看在小型2vcore/4gb RAM机器上的平均耗时,但它已经比当前(未完成的)可用的批量迁移脚本快了好几个数量级。

几个部分可以进行更好的优化,而且很多都是为我们的论坛量身定制的(我们甚至有json映射来重新组织很多论坛结构,使其不那么混乱),所以我怀疑在不进行一些调整的情况下,其他人可以将其提取并使用,但我们将在迁移完成后内部讨论是否要将源代码库公开。

1 个赞

最后的更新,我想。

我们终于成功地协调好了一切(基础设施、代码、用户、版主等)并完成了迁移。这发生在昨天。我不会链接社区,因为我不记得是否允许这样做,而且无论如何,它在意大利是一个相当知名的社区。

这是我们平均 30 天的数字,已过滤机器人。

当然,负责此事的志愿者团队承受了相当大的压力,而且现在还没有完成,因为我们仍在完善自定义主题和一些 discourse 后台设置(我似乎需要打开很多话题来寻求帮助/澄清/指导)。

我们的脚本成功迁移了我们想要的一切:

  • 用户
  • 用户组
  • 版主/封禁/管理员状态
  • 私信
  • 分类
  • 主题
  • 回复

等等。我们还将烹饪过程整合到迁移过程中,因为我们在 vbulletin 中进行了一些自定义,允许嵌入推文、YouTube 视频和其他一些默认情况下 discourse 无法很好地处理的内容。

我们在 4 核/8GB 的机器上进行了测试,整个迁移过程大约需要 7-8 小时。
为了生产环境,我们通过 Patreon 筹集了足够的资金来负担一台 8 核/30GB 的机器,整个过程花了 4 个小时。

我们对迁移进行了直播,包括几次虚假开始(当然 :stuck_out_tongue:)和一些背景音乐。我们玩得很开心。

您可以在截图中查看主题/帖子数量和时间的详细信息。
三个时间是:读取时间、烹饪时间、写入时间。

这是一次令人筋疲力尽但又令人兴奋的冒险,@pfaffman,相信我,当你决定不雇用我时,你躲过了一劫。

截至今天,仅我在此项目上花费的时间粗略估计为 25,000 英镑 :rofl:
我没有计算过去两个月左右另外三个人投入的时间,他们经常在深夜工作。

我们仍在运行一些迁移后脚本,其中一个脚本导入所有头像,另一个脚本创建所有永久链接重定向,以便指向旧 URL 格式的回复中的链接能够正确重定向。我预计这些将在未来 24 小时内完成。

大约两周后,我们将讨论是否可以清理我们的脚本存储库并将其开源。我一个人无法做出这个决定。

编辑:刚刚添加了所有用户头像的完整迁移 + 主题/分类内部引用的永久链接。

image

在主要数据迁移之后运行。

祝好

3 个赞

听起来确实如此。你的代码听起来很棒,但即使让脚本运行一个月,可能也会得到相同的结果。最终的导入可能只需要几个小时,甚至更短。

很高兴你完成了!恭喜你出色地完成了工作。

1 个赞

我的意思是,重点是不要让网站停运一个月来等待迁移 :slight_smile:

另外,当官方脚本缺少部分时,这有点难 :thinking:

你本不需要这样做。你可以运行脚本,让网站保持运行。当脚本完成后,你可以再次运行它;它会跳过已经导入的数据,因此运行速度会快得多。你可能需要这样做几次,但最终它会在几分钟或几小时内完成,因为没有多少新数据需要处理。然后,你可以冻结旧网站并最后运行一次。默认情况下,脚本会检查每个用户和帖子,但你也可以设置 IMPORT_AFTER 来提供一个日期,这样它就会完全忽略旧数据,因此所需时间会非常少。

您好!我是参与此项目的一员。
个人而言,这是一次非常充实的学习经历,我们还有一些收尾工作要做,但整个社区的反应都很积极:新的论坛反应帖达到了……

嗯,大约24小时内就有这么多帖子 :smile:

我不知道还有多少像这样的案例,在实际应用中,需要迁移 vB3 安装,但——希望这个帖子将来能帮到某人——这是可以做到的,不要太绝望。这需要大量的工作,但这是可以做到的 :smile:

3 个赞