1.2.3 从库修改时机
1.binary log开启,参数log_slave_updates关闭
通常,从库都被设置为这种状态,需要重点关注一下。
mysql.gtid_executed表修改时机
前面已经说过,在这种情况下从库没有办法通过binary log来持久化执行过的GTID事务,因为它根本就没有记录Event。只能通过实时更新mysql.gtid_executed表来保存,所以必须要实时将GTID持久化到mysql.gtid_executed表中。
其主要逻辑包含在commit_owned_gtids函数中。代码片段如下。
gtid_executed变量修改时机
实时更新,但是更新位置和主库不同,因为这里不会执行 order commit 步骤了。由Gtid_state::update_on_commit函数调入。
gtid_purged变量修改时机
因为没有binary log来记录已经执删除的GTID Event,所以gtid_purged变量实时更新。其处理逻辑依然是通过Gtid_state::update_on_commit函数调入Gtid_state::update_gtids_impl_own_gtid函数进行的。
代码片段如下。
2.binary log开启,参数log_slave_updates开启
在这种情况下,SQL 线程执行过的GTID操作可以通过 binary log 进行保存,所以mysql.gtid_executed表和gtid_purged变量不需要实时更新。
mysql.gtid_executed表修改时机
和主库一致。即在日志切换时更新,不做讨论。
gtid_executed变量修改时机
和主库一致,实时更新,不做讨论。
gtid_purged变量修改时机
和主库一致,在binary log删除时更新,不做讨论。