![深入理解MySQL主从原理](https://wfqqreader-1252317822.image.myqcloud.com/cover/513/37423513/b_37423513.jpg)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
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=1739328324-RqhalpPhRLNmy2YWgyuhnjE640RJiB1g-0-68b716d9ee8c8e05f2fb3ae2e4a72bf9)
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=1739328324-oJb3jfbO5BvEqWuZk91dOGqpf46oY3g7-0-10e2efcd9d86e9d16520afecaacbc59f)
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=1739328324-K7P6DIcVaoPdGqbWXx72WUmHpv0mzsRb-0-30f90482014d174372772e82581d22ba)