当维护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?
答案 0 :(得分:5)
无论如何,除了修复脚本之外,我还看到了一堆可能的解决方法:
deleteOldRevisions.php脚本可以获取页面ID列表。您可以尝试在维基上的每个页面上运行,一次一个。您甚至可以编写一个简单的shell脚本来循环运行它,从页面ID 1开始,并计算到维基上当前最大页面ID的任何内容。
或者,你可以make a dump of your wiki只包含每个页面的最新版本,然后删除维基上的所有页面(即page
,revision
和{{中的所有内容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而不是直接删除它们。这将节省大量空间,同时仍保留维基上的所有修订版。