上个月底手机突然收到邮件, 服务器一个电源失效. 730XD是双电源冗余, 我把一个直接接市电, 另一个接在UPS上. 路由交换和NAS这些比较重要的设备也都接在UPS上.
我是用的UPS型号是APC的SMT1500RMI2U, 1.5度电理论能让机柜至少支撑20分钟. 另外我还加装了一张网络管理卡, 这样UPS就可以在局域网通过SNMP协议给其他设备广播状态, 通知其他设备自动关机.

然而去年8月GC我把UPS临时拆下来做项目去了, 安装回来时忘记插回管理卡的网线.
收到断电邮件时, 我没有太在意, 正常只需要等服务器自动关机就行了, 关机前我也应该会收到通知.
结果过去几个小时再开, 没有收到关机邮件, 反倒是收到NAS发来的异常关机通知. 这时我才想到UPS的网线没插, UPS电量耗尽后服务器被硬断电了.能收到NAS的通知, 说明电源已恢复, 但是我通过网页没发访问任何服务, 弹出的都是cloudflare错误页面, 基本断定是tunnel掉了.
还好Ubiquiti还有teleport, 连接回内网看了一下NAS数据正常, 心里踏实了一些. 然后还是无法访问ubuntu server, 去esxi看了一下, 果然启动失败.
我寻思晚上回来上电脑处理, 先就这么晾着. 不到晚上一个没注意又他妈断电了, 大概率是室友玩电太狠跳闸, 然后一通瞎操作, 以为是我房间的问题给我房间电闸拉了. 我也不在屋子里, 他们估计看没啥动静就没给我上电.
2月2号西班牙有项目, 计划拍完再多待几天, 这持续断电我是彻底束手无策了. 路由不开我就连不上家里的网, 一直等到8号回来, 回家处理.
刚好趁着断电, 把设备电源整理了一番, 插上ups的网线, 上电.
好消息是NAS依旧坚挺, ubuntu还是老样子进不去系统. 倒是没有特别严重, 只需要扫一遍分区, 修复错误就行.

修复完成功进入系统, 本以为一切恢复如初, 没想到噩梦才刚刚开始.
SQL启动报错. 遇到数据库的问题, 第一步就是要备份, 这是之前深刻的教训. 把数据库文件先全部做一个备份, 也把sql本体做一个备份.
首先尝试设置recovery mode, 从1开始看看能不能启动, 最高到6.
测试到recovery mode = 5的时候sql启动了, 能读到表, 但是不知为何dump不出来, 确实也是sql技能并不熟练. 反反复复弄了很多遍都没成功, 就想到一个土方法, 直接换文件. 之前有两次数据库炸掉就是通过这个方法恢复的, 直接装新的sql, 创建同名新表, discard tablespace, 替换idb和frm, 再import tablespace, 数据就能回来, 可能会丢掉一些主键设置, 需要后续慢慢修复.
但这次不太一样, mysql版本是8.0, 没有frm文件, 不再支持这样的恢复操作了. 我只替换idb后个别字段少的表可以恢复, 继续这样操作别的表突然sql就崩了. 目前只有两个办法, 一个是在原本的sql中recovery mode把数据导出, 另一个是找到sql备份文件直接导入新的mysql.
这台服务器里总共有6个表, 在服务器里找到了其中5个的备份, 很幸运, 论坛的数据库有备份. 剩下一个是公司网页wordpress的表, 最坏情况就是wordpress要重新搭, 最后灵机一动, 想到可能有之前电脑下载的sql备份被传到了nas里, 用群晖的全局搜索搜了10分钟, 成功找到.
这次运气比较好, 所有数据库都有备份, 省去了很多折腾的时间.
数据全部恢复后, 我开始设置异地备份, 数据库交叉在VPS和机柜间进行备份. 有备份才是折腾的底气.