久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

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

157次閱讀
沒有評論

共計 4061 個字符,預計需要花費 11 分鐘才能閱讀完成。

這期內容當中丸趣 TV 小編將會給大家帶來有關如何分析基于 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.

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

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-19發表,共計4061字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 阿鲁科尔沁旗| 重庆市| 青州市| 吴旗县| 石渠县| 水富县| 曲松县| 西安市| 浦县| 潞城市| 昭苏县| 保康县| 琼中| 安陆市| 喜德县| 邯郸市| 海盐县| 旺苍县| 牟定县| 越西县| 博白县| 田阳县| 璧山县| 柳江县| 青川县| 枣阳市| 林西县| 安泽县| 开化县| 如皋市| 乡宁县| 灌阳县| 肃宁县| 宽城| 枝江市| 尼勒克县| 浦北县| 娱乐| 临澧县| 东乡| 巨野县|