【20200330】 MySQL 多源複製--重啓slave以後,channel多出一個

環境

系統: CentOS release 6.10 (Final)mysql

MySQL:一、5.7.26-log MySQL Community Server (GPL)
二、搭建多源複製,存在倆個不一樣channel,假設爲:zerolh_v一、zerolh_v2
三、存在複製過濾,change replication filter REPLICATE_WILD_IGNORE_TABLEsql

用途: BI數據分析使用ide

現象

由於BI數據分析的同事執行大事務產生了臨時表將磁盤空間即將打滿,DBA同事嘗試有過kill可是發現磁盤空間大小還未釋放,最後DBA同事經過重啓手段釋放磁盤空間,可是發現channel 從以前的2個變成了3個。而且當時讀取的relay-log信息已經沒法獲取獲得,致使主從複製監控告警。命令行

解決方案

一、由於master_info_repository是TABLE類型,故猜測能夠經過刪除mysql.master_info_repository的手段刪除多出來的一行channel,而後重啓從庫,可是實際重啓以後相關的channel信息還存在。code

mysql> show global variables like '%master%';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| master_info_repository | TABLE |
| master_verify_checksum | OFF   |
| sync_master_info       | 1     |
+------------------------+-------+
3 rows in set (0.00 sec)

二、經過查詢官網獲取能夠執行reset slave all for channel 'channel_name' 能夠直接清除掉相關的master信息。blog

mysql> reset slave all for channel 'zerolh_v4';
Query OK, 0 rows affected (0.00 sec)

mysql>

官網

經過查詢官網能夠很明顯得獲取獲得,master的在master_info_repository=TABLE的時候不單單是存放在表中,而且也會存放在內存當中,故當正常重啓MySQL的時候,刪除slave_master_info表中的信息是沒法清除master的信息的。
【20200330】 MySQL 多源複製--重啓slave以後,channel多出一個事務

實驗

一、經過insert語句在mysql.slave_master_info插入一條channel,而後執行show slave status(分重啓和非重啓)
二、在mysql.slave_master_info插入相同master_host和master_port的值是否生效
三、在mysql.slave_master_info刪除一條channel而後重啓內存

結論

一、人爲在mysql.slavemasterinfo添加一條記錄是能夠經過show slave status查看獲得的,可是必須得重啓
二、mysql.slave_master_info 表是innodb引擎表,而且只存在主鍵channel_name。
三、MySQL實例重啓以後是會讀取內存獲取獲得master的信息。數據分析

事故猜測

經過一系列實驗和資料,比較可能緣由是由於mysql.slave_master_info裏面的表多出來一條記錄,可是沒有生效,重啓以後生效獲取獲得多出的channel信息,可是仍是沒法理解爲何會多出來一條信息。
一、人爲操做(這個有可能,可是這邊實在是想不起有這個操做)
二、經過主從複製,由於change replication filter複製過濾是過濾掉mysql這個schema,可是隻是在mysql命令行操做,並無在配置文件中添加相關的參數信息,故重啓以後複製信息就會所有丟失。it

相關文章
相關標籤/搜索