- 深入理解MySQL主從原理
- 高鵬
- 409字
- 2021-04-16 16:29:18
1.1.6 gtid_executed表的作用
官方文檔這樣描述gtid_executed表:

也就是說,gtid_executed表是GTID持久化的一個介質。實例重啟后所有的內存信息都會丟失,GTID模塊初始化需要讀取GTID持久化介質。
可以發現,gtid_executed表是InnoDB表,建表語句如下,并且可以手動更改它,但是除非是測試,否則千萬不要修改它。

除了gtid_executed表,還有一個GTID持久化的介質,那就是binary log中的GTID_EVENT。
既然有了 binary log 中的GTID_EVENT 進行 GTID 的持久化,為什么還需要gtid_executed表呢?筆者認為,這是MySQL 5.7.5之后的一個優化,可以反過來思考,在MySQL 5.6 中,如果使用 GTID 做從庫,那么從庫必須開啟 binary log,并且設置參數 log_slave_updates=ture,因為從庫執行過的GTID操作都需要保留在binary log中,所以當GTID模塊初始化的時候會讀取它獲取正確的GTID SET。接下來,看一段MySQL 5.6官方文檔對于搭建GTID從庫的說明。


然而,開啟binary log的同時設置參數log_slave_updates=ture必然會造成一個問題。很多時候,從庫是不需要做級聯的,設置參數log_slave_updates=ture會造成額外的空間和性能開銷。因此需要另外一種 GTID 持久化介質,而并不是 binary log 中的 GTID_EVENT,gtid_executed表正是這樣一種GTID持久化的介質。在1.3節會看到它的讀取過程。