深入理解MySQL主从原理
上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函数,下面是部分代码:

gtid_executed变量修改时机

在order commit的FLUSH阶段生成GTID,在COMMIT阶段才计入gtid_executed变量,它是实时更新的。这个过程是通过调用Gtid_state::update_gtids_impl函数完成的。代码如下。

gtid_purged变量修改时机

在清理binary log时修改,比如在执行命令purge binary logs或者超过参数expire_logs_days的设置后自动删除,需要将丢失的GTID SET计入这个变量,因此它不是实时更新的。这个过程主要集中在MYSQL_BIN_LOG::purge_logs函数中。代码片段如下。