MySQL 8.0.11 innodb cluster 運維管理手冊之三 增加節點
作者 方連超
假設
innodb cluster集羣跑了1年,突然某個節點掛掉了,這個時候,日誌也已經沒有binlog.000001了,如果在線增加一個從庫呢,官方給出基於mysqlbackup
的恢復方式,在剩餘從庫上做備份,在新從庫上恢復,這裏有些技術點,我忽略了,苦惱很久。
創建實驗環境:
-
頻繁操作數據寫入庫,切換四個binlog。flush logs , show binary logs
- 觀察從庫日誌時間信息
從庫1的binlog 和 relay-log
從庫2的binlog 和relay-log
可以看到,主庫切換日誌,從庫並不進行切換
-
清理掉第1,2個binglog,再寫入一些數據,
PURGE MASTER LOGS TO 'binlog.000003';
- 此時一個從庫掛掉了,重啓主機
- 主庫繼續人工寫入數據,發現從庫掛掉了,需要添加
步驟1 全量備份:
mysqlbackup --host=127.0.0.1 --port=3310 --user=backup --password=$$$$$$$$ --no-history-logging --backup-dir=/data/backup/fullbak --with-timestamp backup-and-apply-log
--no-history-logging 因爲 在從庫操作,不能寫備份信息到數據庫中
步驟2:拷貝到新從機恢復從庫
備份壓縮拷貝到從機,並解壓
scp [email protected]:/data/backup/fullbak/2018-07-25_14-32-32.tar.gz .
tar -xzvf 2018-07-25_14-32-32.tar.gz
拷貝活着的從庫的配置文件,修改組複製部分的信息
步驟3:繼續往主庫插入數據
步驟4:恢復新增實例
恢復從庫數據庫
mysqlbackup --defaults-file=/data/mysql_3310_test/conf/my.cnf --backup-dir=/data/backup/fullbak/2018-07-26_20-59-35 copy-back-and-apply-log
步驟5:清理舊信息
關閉日誌記錄:
set sql_log_bin=off;
use mysql
delete from slave_relay_log_info ;
delete from slave_master_info ;
set sql_log_bin=on;
注意這裏不能執行
Reset master 和reset slave
和
Drop database mysql_innodb_cluster_metadata
重啓一次數據庫,應該沒有報錯了
步驟6 shell刪除和增加實例
強制刪除掛掉的實例cluster.removeInstance('root@mysql4:3310',{force:1})
增加實例cluster.addInstance('root@mysql4:3310')
踩坑記錄
組複製的增加成員方式和innodb cluster集羣增加成員方式不同,
-
. 組複製 有reset master 和reset slave 操作,還包括了設置gtid的操作
set @@GLOBAL.GTID_PURGED='80d2433f-8f24-11e8-a8df-000c29f1584d:123'; - . Innodb cluster, 不能做 reset master ,因爲記錄了備份庫執行到的gtid 值,
應該使用 mysql shell 刪除和增加 實例