中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何分析基于GTID的一主兩從和主從切換

發布時間:2021-11-16 14:44:00 來源:億速云 閱讀:248 作者:柒染 欄目:MySQL數據庫

這期內容當中小編將會給大家帶來有關如何分析基于GTID的一主兩從和主從切換,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

故障描述:
一主兩從,從庫2個都連的主庫,主庫停機, 暫定為主庫為A,從庫一為B,從庫二為C,從庫B比從庫C更靠后,現在將從庫B設為主庫,從庫C去連從庫B,但是C從庫卻無法同步:


B從庫:
mysql> show master status\G
1. row 
             File: mysql-bin.000312
         Position: 656595484
     Binlog_Do_DB: 
 Binlog_Ignore_DB: 
Executed_Gtid_Set: 28aec2b2-815a-11e6-a848-6c3be5b34862:1-22169328,
2fc072e2-7f1a-11e6-b9ec-c81f66d60579:1-86654017
1 row in set (0.00 sec)


C從庫:
                ...
                Last_IO_Errno: 1236
                Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'The slave is connecting using CHANGE MASTER TO MASTER_AUTO_POSITION = 1, but the master has purged binary logs containing GTIDs that the slave requires.'
                ...
                Master_Server_Id: 1663306
                Master_UUID: 28aec2b2-815a-11e6-a848-6c3be5b34862
                Retrieved_Gtid_Set: 2fc072e2-7f1a-11e6-b9ec-c81f66d60579:26956787-86654006
                Executed_Gtid_Set: 2fc072e2-7f1a-11e6-b9ec-c81f66d60579:1-86654006
                Auto_Position: 1
                
A和B做為主庫的時候都是使用的vip,且A和B的binlog文件名字不一樣;(這兩個條件在本案例中無關緊要,只是交代一下背景,所以不細說);
現在可以看到原來主庫的86654007-86654017的事務沒辦法同步,在B從庫(現主庫)上面這個日志是存在的,沒有purge;
C從庫直接chang master 到B從庫就對了.但是指到B之后,C還是無法同步.


2fc072e2-7f1a-11e6-b9ec-c81f66d60579:1-86654017  這個 是停機主庫的gtid,就是A
28aec2b2-815a-11e6-a848-6c3be5b34862:1-22169328  這個是B從庫升級為主庫后的gtid.


先講解決方法的過程,最后在來分析問題.
解決方法:
   1.C指到B后,reset slave all了一下,在change master指到vip... 不行...還是報1236;
   2.重復第一次的前半部分操作,后面就直接指實體ip,也不行...
   3.把C上面缺少A主庫的事務,撈出來,灌進去,然后在重新指定到B,set global gtid_purged='28aec2b2-815a-11e6-a848-6c3be5b34862:1,
2fc072e2-7f1a-11e6-b9ec-c81f66d60579:1-86654017';  一樣報錯;
   4.通過B主庫上的binlog日志,把缺少A主庫部分的事務撈出來灌進去,然后重新指定B, SET @@GLOBAL.GTID_PURGED='28aec2b2-815a-11e6-a848-6c3be5b34862:1-75147,2fc072e2-7f1a-11e6-b9ec-c81f66d60579:1-86654017';
   ok!成功了!
   最后驗證數據,數據一致!
   

到這,大牛估計都能看出問題在哪了.我們還是一步一步來分析吧.
首先來分析A主庫停機后,B接管為主庫后,C報錯的信息采集:
B從庫:
mysql> show master status\G
*************************** 1. row ***************************
             File: mysql-bin.000312
         Position: 656595484
     Binlog_Do_DB: 
 Binlog_Ignore_DB: 
Executed_Gtid_Set: 28aec2b2-815a-11e6-a848-6c3be5b34862:1-22169328,
2fc072e2-7f1a-11e6-b9ec-c81f66d60579:1-86654017


C從庫: show slave status\G
                ...
                Last_IO_Errno: 1236
                Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'The slave is connecting using CHANGE MASTER TO MASTER_AUTO_POSITION = 1, but the master has purged binary logs containing GTIDs that the slave requires.'
                ...
                Master_Server_Id: 1663306
                Master_UUID: 28aec2b2-815a-11e6-a848-6c3be5b34862
                Retrieved_Gtid_Set: 2fc072e2-7f1a-11e6-b9ec-c81f66d60579:26956787-86654006
                Executed_Gtid_Set: 2fc072e2-7f1a-11e6-b9ec-c81f66d60579:1-86654006
                Auto_Position: 1

從以上信息可以獲取到相關信息:
    1.B主庫當前的GTID信息,28aec2b2-815a-11e6-a848-6c3be5b34862:1-22169328,2fc072e2-7f1a-11e6-b9ec-c81f66d60579:1-86654017
      28aec2b2-815a-11e6-a848-6c3be5b34862:1-22169328   這個是B主庫的GTID,表示在B上執行并完成到22169328這個事務來了;
      2fc072e2-7f1a-11e6-b9ec-c81f66d60579:1-86654017   這個是A主庫的GTID,表示在A上已經執行并完成到了86654017;
    2.C報錯信息提示:C請求的binlog在主庫已經不存在了.
    3.看看C執行的GTID信息:
        Master_UUID: 28aec2b2-815a-11e6-a848-6c3be5b34862      從這個信息看到,C做為從庫已經將指定的主庫為B;
        Retrieved_Gtid_Set: 2fc072e2-7f1a-11e6-b9ec-c81f66d60579:26956787-86654006   這里的信息是表示,C是從A主庫的26956787位置開始進行同步的,且同步到86654006位置;
        Executed_Gtid_Set: 2fc072e2-7f1a-11e6-b9ec-c81f66d60579:1-86654006  這表示,從庫C執行A庫日志的位置,表示已經執行到86654006;
    
    原因就是B機本身有生成gtid.(Executed_Gtid_Set: 28aec2b2-815a-11e6-a848-6c3be5b34862:1-22169328,
2fc072e2-7f1a-11e6-b9ec-c81f66d60579:1-86654017).28aec2b2-815a-11e6-a848-6c3be5b34862:1-22169328這個就是B本機執行的gtid.A宕機后,C從庫去連接B,就要讀取所B機上C未執行過的所有binlog.有點繞.意思就是,B機自己執行的gtid,C也是需要拉取并執行的.在本例中就是28aec2b2-815a-11e6-a848-6c3be5b34862:1-22169328 這些也是要執行的.
    B在成為主庫之前已經產生了本機的gtid,分析可能是在安裝好數據庫之后,就開啟了gtid,然后導入數據就生成了相應的gtid.因為時間又有點久.這部分binlog在B本機上已經被刪除了.C去主庫拉取binlog的時候,因為是第一次從B主機拉取,會從第一個gtid開始拉取,因為在B機上已經不存在這部分binlog了.所以才會報上面的錯誤.


問題找到了也就好解決了.解決方法上面已經說過了,不累述.

gtid是全局唯一的,所以理論上,B升級為主庫后,C是可以立即同步的.這個實例,也是自己操作失誤,在B沒有成為slave就開啟了binlog,并導致這部分binlog被移除.所以,C就沒辦法去拉取之前生成的binlog日志.
參考這個實例,個人建議,在建立從庫時,先不要開啟binlog,如果從庫一直沒有異于主庫的操作,就一直不要開啟,待需要成為主庫之前,在開啟binlog.

上述就是小編為大家分享的如何分析基于GTID的一主兩從和主從切換了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

会昌县| 宜城市| 河曲县| 彭水| 左权县| 津市市| 昭通市| 金秀| 通渭县| 宝兴县| 舞钢市| 政和县| 林甸县| 泊头市| 同心县| 黄冈市| 巴林左旗| 商洛市| 都昌县| 双峰县| 收藏| 清丰县| 太原市| 彰化县| 沙洋县| 澄城县| 广元市| 阿坝| 望奎县| 峡江县| 柳河县| 武隆县| 西充县| 南澳县| 日土县| 永胜县| 台山市| 通化县| 刚察县| 高安市| 珠海市|