您好,登錄后才能下訂單哦!
1.事務提交時會獲取到一個GTID,該GTID將位于事務前面一同被記錄到二進制日志中。若事務不被記錄到二進制日志中,它也不會獲取到GTID。
2.事務的GTID會以Gtid_log_event的形式記錄到二進制日志,當二進制日志輪換或實例關閉時,MySQL會將所有已寫入二進制日志的事務的GTID刷新到系統表mysql.gtid_executed。
3.事務提交后,極短時間內其GTID會被加入到一個GTID集合中(注意該過程不具有原子性),即全局系統變量gtid_executed,它代表全部已提交了的事務的GTID。在復制關系中,它也表明了該從實例已執行過哪些事務,主節點會據此判斷還需發送哪些GTID。
4.當二進制日志傳送到從節點轉儲為中繼日志后,從節點會讀取GTID,在會話級別將該GTID賦值給會話系統變量gtid_next,這也就告訴了從節點接下來要執行的事務的GTID是什么。
5.從節點會確認會話系統變量gtid_next中的GTID沒被占用,然后為其分配一個線程,并使用全局系統變量gtid_owned(@@GLOBAL.gtid_owned)標識出該GTID和使用它的線程的ID。若該GTID已被使用,就忽略該事務。
6.若此GTID沒被使用,從節點會回放該事務。從節點會使用會話系統變量gtid_next中的GTID,作為該事務的GTID,而不會為其重新生成GTID。
7.若從節點開啟了二進制日志,該GTID會以Gtid_log_event的形式和事務一同記錄進二進制日志。當二進制日志輪換或實例關閉時,所有已提交事務的GTID又會被刷新到系統表mysql.gtid_executed(同2)。
8.若從節點沒開啟二進制日志,MySQL會將回放該事務和將其GTID直接寫入系統表mysql.gtid_executed作為一個事務進行,但在MySQL 5.7版本這還僅限于DML語句,在8.0版本,DDL也可以了。
9.當事務在從節點回放后,從節點上全局系統變量gtid_executed的變化同3。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。