mysql数据库集群的故障恢复

问题:服务器宕机之后数据库无法启动(数据库文件损坏,非正常重启导致的文件损坏)

描述:数据库是mycat+mysql的读写分离集群

解决方式

寻找问题的过程

服务器宕机了之后,重启全部的mysql,mycat,keepalived,haproxy。然后通过虚拟ip访问数据库,可用正常连接,但是查询数据的时候报错:

Lost connection to MySQL server during query

去到mycat的日志

mycat/log/mycat.log。

看见无法获取一些数据库的连接。

登陆到相应的服务器后,查看mysql的监听状态

netstat -antp | grep mysql

发现有几个端口没有监听,即相应的mysql服务没有启动

启动是使用mysqld_multi的方式启动的多实例,报错信息在mysql文件夹下的mysqld_multi.log

mysql的报错日志在这个日志里面有路径可以找

找到报错日志之后,翻到最后的err

Trying to access page number 2642345985 in space 0, space name innodb_system

百度了一下是数据库文件损坏,实际上大概意思是innodb的页损坏。

因为是读写分离的数据库,所以去相应的数据库上可以找数据,备份过来,然后直接重装数据库,进行数据恢复。下面是没有从库(或者主库)的恢复方式。

1、设置innodb_force_recovery=6(my.cnf,一般在/etc/my.cnf)
2、启动mysql
3、导出数据-> mysqldump -u root -p123456 --all-databases > all.sql
4、去除innodb_force_recovery设置
5、删除数据库(data等文件夹)
6、重新安装mysql
7、重新设置密码-- mysqladmin -u用户名 -p旧密码 password 新密码  

8、重新设置用户-- 登陆密码,登陆权限等
9、导入数据 mysql -u root -p123456 < "D:\MySQL 5.5\bin\all.sql"

如果是从库的备份数据恢复,需要新增相应的读写用户然后设置权限,一般读写用的是不同用户,从库只有读用户,主库只有写用户。

然后全部恢复之后再进行访问,就可以了。

 

注:除了数据库之外,服务器重启的时候,发现mycat和mysql都无法启动,mysql报错信息是无法打开mysqld_multi.log,实际上是因为文件系统被设置成只读的了。。这个时候查看权限还是一切正常的,但是已经无法写入了,即使是root,难道是把硬盘拔了吗。。。联系相应的人处理了之后,可以启动。

你可能感兴趣的:(linux,mysql)