正如在《MediaWiki的升级》中所强调的,定期更新MediaWiki核心及其扩展对于维护wiki的稳定性、性能和安全性至关重要。但是MediaWiki除了软件升级之外还需要额外维护吗?
MediaWiki开箱即用地提供了大约200个专为各种维护任务而设计的脚本。此外,许多其他维护脚本可以通过扩展来交付。这些脚本可以手动调度或执行,以解决错误,解决差异、更新或备份数据、优化性能、清理垃圾邮件等。
与许多其他内容管理系统 (CMS) 不同,MediaWiki的维护方法鼓励使用命令行。目前,用于运行维护脚本的基于Web的界面要么已被放弃,要么不够成熟,无法在生产环境中使用。
MediaWiki存储其维护脚本的标准位置是MediaWiki根目录中的“maintenance”目录。鉴于MediaWiki是用PHP编写的,脚本应使用以下格式运行( MediaWiki 1.39以下版本):

php maintenance/脚本名.php

注意:能力越大,责任也越大。运行任何脚本时请务必小心,尤其是在生产环境中。请始终参考脚本文档。通常,使用“--help”标志运行脚本会提供可用的选项和信息,有助于更好地理解脚本的用途、功能和参数。

php maintenance/脚本名.php --help

用于扩展的维护脚本存储在该扩展根目录下的“maintenance”目录中:

php extensions/扩展名/maintenance/脚本名.php

现在我们已经基本了解了脚本的位置以及如何启动它们,接下来让我们更深入地研究一下。

作业队列(Job Queue)

MediaWiki后台作业是在后台异步执行的任务,用于执行可能需要大量时间的各种操作。这些任务不是根据用户请求立即处理,而是排队稍后处理,以避免影响用户体验。默认情况下,队列中的作业作为用户与wiki交互的函数来运行。在数据量大、流量慢或正在开发的wiki上,可能会有大量的工作需要清理。

# 获取队列中的作业数量
php maintenance/showJobs.php


# 按类型获取有关作业状态的扩展统计信息
php maintenance/showJobs.php --group

如果你在队列中看到很多作业,你可以通过运行脚本来处理它们。

# 以命令方式处理队列中的作业
php maintenance/runJobs.php

它支持以下参数:

  • --maxjobs:要运行的最大作业数
  • --maxtime:最大时间
  • --nothrottle:忽略作业限制配置
  • --procs:要使用的进程数
  • --result:设置为“json”以仅打印JSON响应
  • --type:要运行的作业类型
  • --wait:等待新的作业而不是退出

队列中的作业数量过多可能会导致内容更新延迟和其他不一致情况。因此,建议设置一个定时任务(cronjob)、shell脚本或者系统服务在后台批量处理队列。有关更多信息,请参阅官方文档

ManageJobs.php脚本作为维护工具,用于从作业队列中手动删除作业或将废弃的作业重新投入循环。需要注意的是,虽然脚本可以将废弃的作业返回循环,但它不会处理它们。要实际执行它们,你需要运行[runJobs.php][3]

数据库维护

在重大升级或安装某些扩展时,MediaWiki通常需要升级数据库架构,包括添加或重新设计表、字段、数据类型或键。在这种情况下,必须运行更新脚本:

php maintenance/update.php

安装扩展时,请注意扩展页面信息框的“数据库更改”部分。如果显示“是”,则需要运行更新脚本。
MediaWiki_Extension_Database_changes.jpg

数据备份

MediaWiki数据备份对于防止意外删除、硬件故障或网络安全威胁造成的数据丢失至关重要。需要备份的关键领域包括:

  • 数据库
  • 上传的文件
  • 配置/自定义

有效的备份策略与合适的工具相结合,可确保在意外中断期间的业务连续性。作为最佳实践,备份应定期自动运行,其频率根据wiki的应用场景和数据安全的重要性而定制。在外部存储备份数据对于降低发生火灾或硬件故障等本地灾难时数据丢失的风险至关重要。

可以从以下示例中获得灵感:

# 备份数据库
mysqldump -u {wikiuser} -p {wikidb} > ~/{wikidb}.$(date +"%m.%d.%Y").sql


# 备份上传的文件
tar czvf ~/images.$(date +"%m.%d.%Y").tar.gz {w}/images

请记住通过打开大括号并插入适当的值来针对你的特定环境自定义命令。

数据交换

MediaWiki维护脚本可将wiki页面转储为XML交换包装格式,以便导出或备份。

# 将所有模板的当前修订版本备份到文件中
php maintenance/dumpBackup.php --current --filter namespace:10 --output file:dumpfile.xml

导出的页面最终可以导入到当前或另一个MediaWiki实例。

php maintenance/importDump.php < dumpfile.xml

请注意,dumpBackup.php不会创建完整的数据库转储!如需完整备份,请参阅官方文档

另一个脚本可以将文件和/或图像批量导入wiki。它将把它们放在上传目录中并创建wiki页面,就像它们是通过Special:Upload手动上传的一样。

# 如果尚未上传,则导入“My Pictures”及其子文件夹中的所有png图片
php maintenance/importImages.php --skip-dupes --extensions png,jpg --search-recursively "My Pictures"

其他类型的数据交换功能由扩展提供:

数据更新

有几个脚本专为数据重建和清理目的而设计:

rebuildrecentchanges.php - 重建最近的更改和相关表。

php maintenance/rebuildrecentchanges.php

rebuildall.php - 重建各种缓存和索引,以确保在更新某些配置或扩展后变更数据的一致性。

php maintenance/rebuildall.php

rebuildtextindex.php - 从头开始​​重建搜索索引表

php maintenance/rebuildtextindex.php

freshLinks.php - 在wiki内容更改后更新链接表。

php maintenance/refreshLinks.php

initSiteStats.php - 初始化或更新站点统计信息,包括页面计数和用户计数。

php maintenance/initSiteStats.php --active --update

deleteOrphanedRevisions.php – 报告或删除引用不存在页面的修订

php maintenance/deleteOrphanedRevisions.php --report

deleteArchivedRevisions.php - 永久删除已从最近更改中删除的存档修订。

php maintenance/deleteArchivedRevisions.php --delete

cleanupTitles.php -清除数据库中内容表中不存在的标题。

php maintenance/cleanupTitles.php --dry-run

去除“--dry-run”参数以真正删除孤立的标题。

关于该部分内容,也可以参考本站另一篇文章《MediaWiki 日常维护——彻底删除旧文件(页面)或已删除文件(页面)》。

打击垃圾邮件

cleanupSpam.php - 删除所有指向给定主机名的垃圾邮件链接。如果页面包含指向该主机的链接,则脚本会在页面的历史记录中向后移动,直到该主机不再位于该页面上。然后,脚本会将页面恢复到该版本。

php maintenance/cleanupSpam.php example.com --all --delete

blockUsers.php - 阻止或取消阻止一批用户。它可以使用 STDIN 或文件参数。在处理垃圾邮件发送者时,这可能是最有用的,其中包含使用 SQL 查询或类似查询生成的列表。默认情况下,所有用户都被硬阻止、自动阻止任何当前和后续 IP 地址、禁用电子邮件、无法写入其用户页面并且无法创建更多帐户,且此阻止不会过期。你可以通过选项更改这些配置。

php maintenance/blockUsers.php userlist.txt --performer "Spam Warrior" --reason "Vandalism"

purgeExpiredBlocks.php - 从数据库中删除过期的 IP 块。

php maintenance/purgeExpiredBlocks.php

网站地图

站点地图是使搜索引擎机器人更有效地抓取网站的文件。

generateSitemap.php - 为 MediaWiki 安装生成站点地图。

默认情况下,该脚本会为每个包含内容的命名空间生成一个站点地图索引文件和一个gzip压缩站点地图。

# 查看可以传递给脚本的选项。
php maintenance/generateSitemap.php --help

你可能需要设置一个定时任务来自动更新站点地图(参见本站文章《为MediaWiki站点创建网站地图(sitemap)》)。

不要忘记通过将站点地图索引的链接添加到站点根目录来使站点地图可以被任何爬虫找到,例如:

ln -s /sitemap/sitemap-index-example.com.org.xml sitemap.xml

MediaWiki维护的最佳实践

在为你的MediaWiki设计最合适的维护计划时,请确保遵守以下准则:

  • 安排定期数据库备份以防止数据丢失。备份的频率将取决于你的维基站点的应用场景和重要性。
  • 定期审查用户帐户和用户贡献。根据需要删除不活动或垃圾邮件帐户。监控和审查维基站点上的内容,解决垃圾邮件、不准确的信息或不当内容。
  • 配置和优化缓存机制以缩短页面加载时间。MediaWiki支持各种缓存系统,包括操作码缓存和对象缓存。
  • 使用Matomo等工具或其他分析解决方案来监控用户行为和流量模式。此信息对于就内容和性能改进做出明智的决策非常有价值。
  • 监视错误日志中是否存在任何问题并及时解决。定期检查错误日志中是否有可能表明潜在问题的警告或错误。
  • 定期审核你的MediaWiki配置,确保设置符合最佳实践和安全建议。监控 MediaWiki安全邮件列表并及时应用安全补丁。
  • 在对生产环境应用更新或重大更改之前,请在临时或测试环境中对其进行测试,以识别并解决潜在问题。

本文翻译自https://wikiteq.com/post/mediawiki-maintenance-administration,并根据实际情况进行了适当修改。

最后修改:2024 年 01 月 23 日
如果觉得我的文章对你有用,请随意赞赏