当deleteOldRevisions内存不足时,如何删除旧的MediaWiki修订版

时间:2013-10-23 19:31:52

标签: sql mediawiki

当维护skript deleteOldRevisions内存不足时(尝试在32位下分配超过2 GB),是否有可能删除修订。我甚至没有得到id的列表来逐步删除它。

也许直接使用SQL?

我已经尝试/阅读https://www.mediawiki.org/wiki/Manual:Reduce_size_of_the_database 还有Use SQL to delete old MediaWiki revisions without shell access?

1 个答案:

答案 0 :(得分:5)

嗯,是的......在看了that script之后,我并不惊讶它失败了。确实应该修复迭代页面而不是仅仅在内存中构建一个巨大的列表。我认为唯一的原因是,对于像维基百科这样的维基,删除修订并不是人们通常所做的事情。

无论如何,除了修复脚本之外,我还看到了一堆可能的解决方法:

  • deleteOldRevisions.php脚本可以获取页面ID列表。您可以尝试在维基上的每个页面上运行,一次一个。您甚至可以编写一个简单的shell脚本来循环运行它,从页面ID 1开始,并计算到维基上当前最大页面ID的任何内容。

  • 或者,你可以make a dump of your wiki只包含每个页面的最新版本,然后删除维基上的所有页面(即pagerevision和{{中的所有内容1}}表)并从转储中导回它们。

  • 原则上,如果您know what you're doing,您 也可以直接使用SQL删除旧版本。

    在弄乱数据库之前,您始终想要做的第一件事就是将您的wiki设置为read-only mode并制作full backup。如果您之前没有这样做,那么在对您的真实维基进行任何不可撤销的操作之前,最好先练习将备份恢复到本地测试维基上。

    然后,要删除每个页面的最新版本,请运行以下SQL命令:

    text

    请注意,上面的命令只会删除旧版本元数据,而不会删除这些修订的实际文本。摆脱旧文本记录的最简单方法是运行purgeOldText.php维护脚本,尽管 也可以使用SQL来执行此操作,例如:

    DELETE FROM revision WHERE NOT EXISTS
      ( SELECT * FROM page WHERE page_id = rev_page AND page_latest = rev_id )
    

    最后,如果一切顺利,我建议运行rebuildall.php维护脚本来修复最近的更改,否则将指向已删除的修订。然后确保一切看起来都应该如此,并再次关闭只读模式。

  • 最后,如果您这样做是为了尝试节省空间,请考虑compressing your old revisions而不是直接删除它们。这将节省大量空间,同时仍保留维基上的所有修订版。