升级微知

昨晚升级“微知”,从mediawiki下载、解压、上传,却出现了500号运行错误。打开PHP 错误报告,说是某些类找不到。到它提示的缺失目录下去看,发现一些奇怪的文件名,例如.ph、.p、甚至像是从中间截断的(题图所示红叉部分)。拿这个信息一搜,说是“别用7-Zip解压tar(尤其从GitHub打包的),会丢东西”。换Windows自带的解压,果然正确文件出来了(题图所示绿勾部分)。
Mediawiki升级支持不了太大版本跨度,只能先升到 1. 35,再升到1.43。今天基本上把1.35搞定了,只是出了个意外:许多页面变成空白,试着重写,则报编辑冲突,不允许覆盖,有些图片也不显示了。
调查一番,发现是丢了99个版本的更新记录。手动运行SQL修复 :
INSERT INTO revision_actor_temp (revactor_rev, revactor_actor, revactor_timestamp, revactor_page)
SELECT rev_id, 1, rev_timestamp, rev_page FROM revision
WHERE rev_id > 1 AND rev_id < 101
给所有revactor_actor硬赋的1,等于是把所有丢失的版本更新揽到1号用户(也就是我自己)身上。在多用户的wiki上是未必正确的无奈之举,而在我这里则是唯一正解。
修好先跑两三天再升1.43,我自己也喘口气压压惊。
6月13日后记:升级1.43的时候(及之后)发现数据库经常报“数据库已锁定”(The primary database server is running in read-only mode)警告,怀疑是新版数据库的replica闹出的幺蛾子。不是自己的服务器,权限不够,查不了太多,只能通过打开$wgDebugToolbar和$wgDebugDumpSql,跟踪到这么一句:
SELECT @@GLOBAL.read_only AS Value 6.297ms
Wikimedia\Rdbms\DatabaseMySQL::serverIsReadOnly
用phpMyAdmin查看@@GLOBAL.read_only,果然一会儿是0,一会儿是1,十分飘忽。目前无法做更深入的研究,先去includes\libs\rdbms\database\DatabaseMySQL.php里面,强行让serverIsReadOnly返回false就是了。


