一 簡介
1 在主從首次同步時(master_auto_position=1),slave會通過gtid協議將自己已經執行的gtid set(@@global.gtid_executed)發給master,master比較後從首個未被執行的GTID事務開始主從同步
2 在每個binlog開頭會記錄已經執行過的gtid集合,這樣的好處是解析binlog就能得到對應已執行過的最大集合
3 全局的執行gtid_executed是唯一的,適用於整個集羣
4 一個集羣存在多個主機gtid集合的最有可能情況有兩個
1 是執行過類似MHA的切換 2 從庫有數據寫入
二 具體參數
gtid_mode=on
enforce-gtid-consistency=on #gtid的強約束
log-slave-updates=1 #5.6需要開啓參數,因爲gtid_executed是記錄在文件中
三 相關表
1 gtid_purged 被刪除的binlog事務集合
2 gtid_executed 已經執行過的事務集合
四 備份恢復
1 gtid_executed包含gtid_purged集合,如果想設置gtid_purged,gtid_executed必須設置爲空.所以執行備份恢復時必須先清空gtid_executed
2 清空gtid_executed的辦法就是reset master.當執行完reset masterm,set gtid_purged=''之後,gtid_executed的值也會同步,和手動設置gtid_purged的值一樣
五 DUMP
1 dump導出GTID模式下的數據默認會設置語句set global gtid_pured=''; 所以記得dump的時候加上 --set-gtid-purged=off
六 在線轉換
1 mysql 5.7版本支持由傳統模式轉換成GTID的在線切換,反之也能正常切換
七 跳過異常
stop slave; # 關閉 slave 複製
SET GTID_NEXT='$GTID_NO'; # 設置 GTID_NEXT 爲複製出錯的 GTID_NO
begin; commit; # 向 $GTID_NO 寫入空事務
SET GTID_NEXT="AUTOMATIC"; # 重新設置 GTID_NEXT 爲自動獲取
start slave; # 啓動 slave 複製