MySQL InnoDB Cluster 恢复故障成员(数据库为5.7版本)

问题:InnoDB Cluster 3个节点中,1个节点丢失,状态为:MISSING

问题分析:因为发现问题比较晚。数据库配置的日志是7天循环删除的。也就是说当MISSING时间大于7天的时候,就不能直接在mysqlsh中使用:cluster.rejoinInstance("root@hostname:3306")重新加入节点的方式恢复,因为主库的日志七天前的日志被清除了,所以无法直接恢复。

 解决步骤:

1.导出正常节点的数据库,并传到故障节点
mysqldump -uroot -p --all-databases --triggers --routines --events --quick --single-transaction --flush-logs --master-data=2 > dbs.dump
scp dbs.dump sql-1:~/

2.在集群中删除故障节点:

执行:mysqlsh
MySQL sql-2:3306 JS > var cluster=dba.getCluster(‘yspCluster‘)
MySQL sql-2:3306 JS > cluster.removeInstance('root@sql-1:3306')

3.删除故障节点的data目录,重新初始化数据库。创建用户(这一步其实就是重新初始化sql-1节点)

(1)先备份/etc/my.cnf,然后编辑配置文件

vim /etc/my.cnf

[mysqld]

basedir=/data/mysql

datadir=/data/mysql/data

    创建数据库目录

   mkdir -pv /data/mysql/data/

   chown -R mysql:mysql  /data/mysql/data/

(2) 初始化数据库

   mysqld --initialize --user=mysql --basedir=/data/mysql/ --datadir=/data/mysql/data                    (注意:此处会初始化出mysql的初始密码!!!)

(3)初始化mysql密码

mysqladmin -uroot -p'随机生成的密码' password '要设置的密码'

4.在sql-1节点上配置集群实例
dba.configureLocalInstance('root@localhost:3306');

 

重启数据库后再执行下面的语句,不然状态不会改变为Ok。

dba.checkInstanceConfiguration('root@localhost:3306') 检查集群实例的状态是否为:OK

5.故障节点导入数据库

登录到故障节点的数据库,执行下面的恢复命令:

mysql> set sql_log_bin=0;
mysql> source dbs.dump
mysql> set sql_log_bin=1;

重启故障节点 MySQL
6.集群中,将故障节点重新加入集群(在正常节点上)

mysqlsh

MySQLsql-2:3306 JS > var cluster=dba.getCluster()
MySQL sql-2:3306 JS > cluster.addInstance('root@sql-1:3306')


7.然后在之前的故障节点使用mysqlsh执行:

dba.configureLocalInstance('root@localhost:3306');    //  保存配置信息到文件,不然读节点重启后无法自动加入到集群中会一直MISSING。

 

posted @ 2022-12-08 12:14  粉色纽扣  阅读(463)  评论(0编辑  收藏  举报