說GTID GTID的生命週期

2021-09-27 05:47:26 字數 925 閱讀 3785

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。

React 生命週期 生命週期方法

生命週期 掛載 更新 解除安裝 元件被建立 執行初始化 並被掛載到dom中,完成元件的第一次渲染 constructor props getderivedstatefromprops props,state render componentdidmount 元件被建立時會首先呼叫元件的構造方法,接受...

actived生命週期 Vuejs 生命週期

每個 vue 例項在被建立時都要經過一系列的初始化過程。如需要設定資料監聽 編譯模板 將例項掛載到 dom 並在資料變化時更新 dom 等。同時在這個過程中也會執行一些叫做生命週期鉤子的函式,這給了使用者在不同階段新增自己的 的機會。乙個 vue 例項 我們建立乙個 vue 例項,並在每個階段驗證 ...

vue的生命週期,什麼是生命週期

簡而言之 建立前 後,載入前 後,更新前 後,銷毀前 後 beforecreate 建立前 在資料觀測和初始化事件還未開始 created 建立後 完成資料觀測,屬性和方法的運算,初始化事件 beforemount 載入前 在掛載開始之前被呼叫,相關的render函式首次被呼叫。mounted 載入...