今天在处理客户现场问题的时候,遇到一个pxc集群的mysql,所有节点都整体断电,然后集群重新开机后,无法自动恢复运行,只能手动启动pxc集群的所有节点
本次恢复的集群都是运行在docker里面的,所以整个演示过程以docker容器中的操作为演示,实际在docker外面和里面差距不大

查找集群最后断电的节点

一般重启后,由于docker是系统自启动服务,所以一般会自动把pxc数据库也拉起来,我们这会就需要把集群所有节点的pxc服务都停掉,进入pxc数据库的docker-compose.yml文件所在的目录,然后执行如下命令:

docker-compose down

在整个集群中,最后断电的那台服务器上有一个配置文件,一般在docker容器的data目录下,名称为grastate.dat,我们在每个节点上直接cat 这个文件,如下图所示

断电后mysql服务无法启动_mysql


如果三台服务器都是0,则可能三台服务器是同时断电的,我们就需要根据seqno来判断那一台服务器上的数据是最全的,seqno编号越大,则数据越全面,新的集群启动,就选择数据最全面的当做主节点

修改配置启动主节点

直接修改刚才那个文件grastate.dat,把bootstrap参数改成1

断电后mysql服务无法启动_数据库_02


然后修改docker-compose.yml文件,操作如下图所示:

断电后mysql服务无法启动_断电后mysql服务无法启动_03

启动主节点

最后修改完docker-compose.yml文件后,我们就可以启动主节点了

docker-compose up -d

主节点启动完成后,我们就可以通过常用的数据库连接工具,输入用户名和密码,连接数据库了(在此不再进行赘述了),连接完成后,直接查询pxc的状态,直接执行下面的sql进行查询

show   status where Variable_name IN   ('wsrep_local_state_uuid','wsrep_cluster_conf_id','wsrep_cluster_size',   'wsrep_cluster_status','wsrep_ready','wsrep_connected');

查询的结果如下图所示(我这里是集群三个节点都启动成功后的截图):

断电后mysql服务无法启动_mysql_04

启动从节点

主节点启动成功后,我们就可以去启动两个从节点服务器了,首先要进入从节点服务的docker-compos.yml文件夹的目录,然后修改docker-compos.yml文件

断电后mysql服务无法启动_mysql_05


修改完成后,保存退出,最后也是使用命令启动从节点docker-compose up -d 最后我们再之前连接的主节点的mysql数据库上,执行查询,查看从节点是否正常加入到集群,加入后数量会有变化,如下图所示:

断电后mysql服务无法启动_mysql_06


后续其他的从节点加入集群,也是依次类推!!