在火车上阅读“The Moon Is a Harsh Mistress”,看Robert Heinlein在1965年描写的人工智能,感觉伟大的科幻小说家确实预计得很准,描写也很生动。书中关于训练刚刚觉醒的计算机识别不同类型幽默(A类:每次听了都觉得好笑;B类:用过一次就不可再用——比如计算机的恶作剧将工资单上加1亿元……),我曾经讲给4-5岁的“跑跑”听,现在这孩子已经去圣巴巴拉大学里学习物理专业去了。

但是正读得入巷,经过一个没有信号的隧道之后,手机突然闪烁了几下,有一封Jetpack的邮件发来,说服务器宕机了。无法处理,直到晚上入住酒店才有机会联络运维重启了服务器。

然后就是漫长的安全升级,一切看起来都是那样的无辜。但突然事情就开始变得古怪起来——我遇到了极低概率的mysql 8.0 + ubuntu 20.04配置冲突,数据库就此全面崩溃。只好硬拷贝了整个/var/lib/mysql目录,然后清理了所有数据库相关配置,完全重装了mysql。很快就收到刚刚回家的虹莹发来信息,”老师,我的博客打不开了,显示建立数据库链接失误“。当然,数据库链接不会失误,她一定是看错了”数据库链接失败“吧,因为我自己的博客也一样。

我这里托管着好几个朋友的wordpress,这次算是一个大型事故了。我的博客采用updraftplus备份在googledrive上,倒是问题不大,下载了数据库,恢复数据,很快就可以使用了。但flywow.netjpraus.com就不是那么容易了。我记得曾经叫”水哥“使用updraftplus备份,不知道他做了没有(后来我发现,最后一次云端备份是2020年,而且我翻遍了一切可能的地点,都没有找到文件);而虹莹是一定没有做备份了,显然我在维护的时候懒惰了一点。有的时候太忙了,不太适合继续担任服务器管理员和dba,但托管在我这样没有整机备份(主要是没有钱)的服务器上,究竟还是有些责任的。

第一天长途旅行太累了,随手查询了一下,就睡过去了。第二天做完白天的日常,吃完晚餐的油泼面(Emma要求以后改为更少油的烩面),去超市买了熬夜的装备——几个水果,拿着虹莹的数据库开始试验。经过各种查询,然后花了大把时间来玩my.conf里的”innodb_force_recovery“参数,但是什么效果也没有。我怀疑是因为硬拷贝的目录之下只有ibdata1,没有ib_logfile0/1这样的文件。于是转而使用更原始的方式,直接建表,然后用”alter table wp_posts discard tablespace;“删掉物理表格,在试着将备份的表格恢复:”alter table wp_posts import tablespace;“。

这样做的唯一要求就是,建立的空表和含有原始数据的表格必须结构完全一直。

我想着大家都是wordpress,除了插件之外,数据库版本都一样,应该问题不大,花点时间一个一个表做下去,总是能够恢复的。但第一个表格就报错了。回溯了一下,我发现eddyemma.com上还有几个表格采用陈旧的myISAM引擎,而虹莹的所有表格都是innoDB。知道缘故,这事倒也好办,升级了我的数据库,然后恢复了虹莹的数据库。看起来一切正常,于是给”水哥“留言说累了,明天修复他的数据。

第二天又是忙碌的一天,早晨6点过起床,先弄数据库2个小时,但flywow里最重要的wp_posts数据一直无法导入,总是报表格结构不对。两个小时过去,没有任何结果,查询flywow.net的version.php,数据库版本和我完全一样,都是53496,不知道为什么。

从早晨到下午都在讲课。回到酒店就累了,蒙头一睡,直到天色已晚,气温下降,冻醒在床头。和几个朋友吃饭之后回来弄剩下的这个数据库。试着建了一个全新的wordpress,但这个最为重要,包含”水哥“数年所写699篇文章、属灵吐槽以及章回小说的数据库仍然无法导入。使用wp命令行工具修复——无效。使用mysql-utilities工具修复——无效。最后,找到一个简易脚本,mysql_ibd,作为最后一次的尝试。

设置了输入和输出的参数,开始试着解析数据库。果然,到了wp_posts就报了一个错误,说是”字段索引类型==4,不对“。我将输出的结果和标准表格结构对照了一下,所有字段完全一致,看起来就是索引问题了。修改了mysql_ibd脚本,强制跳过报错的那句,按照索引的字段输出,原来”水哥“的数据库多了两个索引,看来是某个wp插件干的好事。用导出的sql建表还是出错,但问题已经很简单了——新增的两个索引是”Fulltext“类型的全文索引,调整了索引类型和字长,总算把结构建好,数据也顺利导入了。10:50给”水哥“发消息,算是度过了这次数据库危机。


狠心地让出宝贵的googledrive空间,将两个托管网站都做了云端备份。下一次再出现这样的事情,应该好解决一点。希望他们不要作死自己将备份插件的配置修改了。

整个危机处理,用掉了三个晚上。而其他三个托管的wp因为最近没有更新,暂时也就没有处理。也许我应该把不用的域名停掉,做点别的有益的事情吧。而我似乎也不大能熬夜维护服务器了,找一份”IT吉祥物“工作的想法再次浮现脑海。算了,我这就去睡了吧。


还是有很多问题。不知道,一点一点排除。