记一次zimbra服务器故障导致mysql起不来问题

记一次zimbra服务器故障导致mysql起不来问题
服务器有一天突然访问不了,局域网连接不上,去机房查看,硬盘灯亮着,屏黑的,按电源键没法关机,没办法,只能强制关机了。强制关机后,启动起来,登陆进去看。
zmcontrol status过了好久才出现内容,提示如下:
Unable to determine enabled services from ldap.
Unable to determine enabled services. Cache is out of date or doesn‘t exist.
经网上查找解决方法:
zmcontrol stop
再zmcontrol start
启动的时候就报错了,好几个服务启动不起来
我就单独一个服务一个服务启动
看启动提示都是提示mysql.service这个服务启动不了
于是我去后台查看mysql报错日志
查看 /opt/zimbra/log/mysql_error.log
发现很多类似出错提示:
Failed to find tablespace for table ‘"mboxgroup99"."tag"‘ in the cache. Attempting to load the tablespace with space id 6420
网上查了一下应该是Mysql表空间遭到破坏(应该是强制关机引起的)
于是我就想是否可以通过还原mysql数据库来恢复表空间,因为系统每天有自动备份mysql数据库
但是还原的时候又提示我以下信息:
Table ‘xxx‘ is read only,表只读,网上查了修改目录底下文件夹和文件的权限,可是这些权限本来就没有改,就不需要更改了
网上又找方法,发现可以修改my.cnf配置文件让他强制启动
/opt/zimbra/conf/my.cnf
在[mysqld]添加:
#innodb_force_recovery = 6
#innodb_purge_threads = 1
然后重启mysql.service服务
这回zmcontrol查看各个服务都启动了,个别启动不了的再单独启动,等zmcontrol status查看各个服务都是running的时候再去登陆网页版发送邮件,发现只能发,不能收,还是有问题
又继续在网上查找方法,发现可以利用innochecksum这个工具修复,网上想安装这个工具麻烦,找下/opt/zimbra/common/bin底下居然有自带这个工具,于是用以下命令修复:
/opt/zimbra/common/bin/innochecksum -f /opt/zimbra/db/data/ibdata1
运行完,提示没有-f 这个选项,我就--help查看,没有查看代替-f的参数,后面干脆直接用不带参数的命令:
/opt/zimbra/common/bin/innochecksum /opt/zimbra/db/data/ibdata1
然后把前面my.cnf里面的强制恢复选项取消掉,再zmcontrol restart重启服务,居然启动起来了,发送和接收邮件也可以,不过有个遗憾就是imap服务不能用,后续再研究
PS:zmdbintegrityreport命令也可以在数据库故障的时候用来尝试修复数据库