Replication

在 MySQL 組複製中添加第 4 個節點卡在 RECOVERING

  • August 27, 2018

環境:

作業系統:Debian 9

MySQL:5.7.23(在組複製集群中執行)

問題:

集群執行良好,組複製中有 3 個 mysql 節點,並且一切正常。在組複製集群中添加第 4 個節點時,第 4 個節點能夠連接到主節點並開始複製,但是,第 4 個節點始終顯示為“RECOVERING”。我檢查了日誌,但日誌中沒有錯誤。

由於第 4 個 mysql 節點能夠連接到其他成員並能夠複製數據,我確信 mysql 配置中沒有問題。

懷疑之一是它與二進制日誌事件有關。如果我檢查“SHOW BINGLOG EVENTS”的計數,它顯示幾乎 141957 行,但是,其他節點幾乎沒有 3-4 行。

mysql> 顯示 BINLOG 事件;
141957 行(10.74 秒)

請讓我知道如何在 mysql 組複製集群中添加第 4 個節點。

最後,我發現了問題並修復了它。詳情如下:

  1. 由於在目前組複製節點集和 binlog 配置中執行的 GTID,問題發生了。預設情況下,目前 MySQL 配置中的 binlog 過期天數設置為 0,這意味著它可以儲存大量 binlog 文件,這些文件基本上用於行事務和組複製。我清除了舊的 binlog 文件並將 binlog 過期天數設置為“3”。用於該目的的命令。
mysql> PURGE BINARY LOGS TO 'binlog.000105';
mysql> SET GLOBAL expire_logs_days = 3;
  1. 在 MASTER 伺服器上執行上述命令後,我刪除了所有舊的 binlog 文件,現在複製需要很長時間。但是,在清除舊的 binlog 文件後,MASTER 無法設置其他節點,因為正在清除舊 binlog 文件中與 MASTER 事件的節點連接。因此,我們需要做一些手動任務。

  2. 從目前 MASTER 中取出所有數據庫的 mysqldump 並在要添加的第 4 個 mysql 節點上恢復。

# mysqldump --all-databases --single-transaction --triggers --routines --host=127.0.0.1 --port=mysql_port --user=username --password=password > dump.sql
# mysql -u root -ppassword < dump.sql

4)一旦恢復完成,確保複製配置已經在所有節點的mysql配置中完成,然後重新啟動節點。

  1. 在第 4 個節點上重新啟動複製,然後複製應該在幾分鐘或幾小時內完成(取決於數據庫大小)
mysql> START GROUP_REPLICATION
  1. 一旦第 4 個節點顯示 ONLINE,該節點即為組複製集群的一部分,可用於其他用途。

引用自:https://dba.stackexchange.com/questions/214416