数据库Galera集群中数据库无法启动

一、背景

本环境使用的是openstack docker 容器平台,所有服务都是运行在docker 容器中,数据库使用的mariadb(1主2从),由于断电导致数据库无法启动。

二、原因分析

查看数据库日志,发现大量如下报错:

InnoDB: is in the future! Current system log sequence number 8716.
InnoDB: Your database may be corrupt or you may have copied the InnoDB
InnoDB: tablespace but not the InnoDB log files. See
InnoDB: http://dev.mysql.com/doc/refman/5.6/en/forcing-innodb-recovery.html
InnoDB: for more information.
2020-01-06 10:56:46 139986236172480 [Note] InnoDB: 128 rollback segment(s) are active.
2020-01-06 10:56:46 7f5115e168c0 InnoDB: Error: page 0 log sequence number 29661217162
InnoDB: is in the future! Current system log sequence number 8716.
InnoDB: Your database may be corrupt or you may have copied the InnoDB
InnoDB: tablespace but not the InnoDB log files. See
InnoDB: http://dev.mysql.com/doc/refman/5.6/en/forcing-innodb-recovery.html
InnoDB: for more information.

***初步判断由于异常断电,可能导致数据库文件出现了丢失。

三、解决思路

根据日志找到这个http://dev.mysql.com/doc/refman/5.6/en/forcing-innodb-recovery.html,里面是官网给出的强制数据库innodb 恢复的操作。按照这个进行尝试(详细可以看链接)

四、解决过程

1、首先查看哪个节点的数据库文件是最新的,也就是主节点

//在数据库节点上执行如下,找到seqno最大的节点,我的是control3
cat  grastate.dat |grep seqno

2、修改数据库文件

[root@control3] vim galera.conf
...
innodb_force_recovery = 1
warep_on=OFF
...

3、删除control3节点ib_logfile文件

rm   ib_logfile*  -f

4、重启数据库

docker restart mariadb

****如果数据库还是无法启动 ,那么将innodb_force_recovery 的修改成2,然后再依次执行步骤3和步骤4.

****按照官网的建议, innodb_force_recovery 这个值,按照官方文档,要求从1-6依次尝试,直到数据库能起来为止,1-3 数据不会丢失,4-6数据会永久性丢失。

5、当数据库能起来之后,我们可以将整个数据导出,然后重启安装数据库,再建整个数据库回填即可。

这里省略数据库导入导出操作

注意:可能由于文件丢失,导致innoDB 出现问题,也就是现有数据库没法正常使用。只能重新部署,不管什么方法,都是尽量导出数据,保证数据不丢失,然后导入新的集群。我这里只是其中一种,也可以使用数据库文件进行恢复数据,这里可以看下另外的文章 https://medium.com/magebit/recover-innodb-database-from-frm-and-ibd-files-99fdb0deccad .

posted @ 2020-01-07 11:17  yanling0813  阅读(666)  评论(0编辑  收藏  举报