记一次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命令也可以在数据库故障的时候用来尝试修复数据库