1. 程式人生 > 其它 >MySQL InnoDB Cluster 恢復故障成員(資料庫為5.7版本)

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。