- 深入理解MySQL主从原理
- 高鹏
- 286字
- 2021-04-16 16:29:19
1.2.2 主库修改时机
1.binary log关闭
在binary log关闭的状态下,不生成GTID,mysql.gtid_executed表、gtid_executed变量、gtid_purged变量均不更新。
2.binary log打开
主库通常都被设置成binary log打开的状态,需要重点关注一下。
mysql.gtid_executed表修改时机
在binary log切换时保存直到上一个binary log执行过的全部GTID,它不是实时更新的。这个过程主要会调用Gtid_state::save_gtids_of_last_binlog_into_table函数,下面是部分代码:
![](https://epubservercos.yuewen.com/A01218/19823444008569806/epubprivate/OEBPS/Images/txt001_9.jpg?sign=1739579601-LSNX3Rh1Xd59U2P47YbcSsKvfThQh46S-0-0488f2ed663a60268c96c4d4571edd38)
gtid_executed变量修改时机
在order commit的FLUSH阶段生成GTID,在COMMIT阶段才计入gtid_executed变量,它是实时更新的。这个过程是通过调用Gtid_state::update_gtids_impl函数完成的。代码如下。
![](https://epubservercos.yuewen.com/A01218/19823444008569806/epubprivate/OEBPS/Images/txt001_10.jpg?sign=1739579601-wg1QNGW2lw9F5UIpsjUdE1gdGSsatF3X-0-e0f17b30c58b7ed448aaab64926563d4)
gtid_purged变量修改时机
在清理binary log时修改,比如在执行命令purge binary logs或者超过参数expire_logs_days的设置后自动删除,需要将丢失的GTID SET计入这个变量,因此它不是实时更新的。这个过程主要集中在MYSQL_BIN_LOG::purge_logs函数中。代码片段如下。
![](https://epubservercos.yuewen.com/A01218/19823444008569806/epubprivate/OEBPS/Images/txt001_11.jpg?sign=1739579601-tGx0Li7vFRXGhUCSL6M3JbJCc4enjXOV-0-200b0fb2693a540fba70077aa8ac24f5)