1.2.1 定义
· mysql.gtid_executed表:GTID持久化的介质,GTID模块初始化的时候会读取这个表作为获取gtid_executed变量的基础。
· gtid_executed变量:表示数据库中执行了哪些GTID,它是一个处于内存中的GTID SET。show slave status 中的 Executed_Gtid_Set 和 show master status 中的Executed_Gtid_Set都来自它。
· gtid_purged变量:表示由于删除binary log(如执行purge binary logfiles命令或者超过参数expire_logs_days设置),已经丢失的GTID Event,它是一个处于内存中的GTID SET。我们在搭建从库时,通常需要使用set global gtid_purged命令设置本变量,用于表示这个备份已经执行了哪些GTID操作。需要注意的是,手动删除binary log不会更新这个变量。
其中,gtid_executed变量和gtid_purged变量都是通过show global variables命令来获取的。
这也是数据库管理员通常能够观察到的几种 GTID 信息,有了前文的描述,我们知道其中的mysql.gtid_executed表是一种GTID持久化的介质,gtid_executed变量和gtid_purged变量则对应了内部结构体Gtid_state中的executed_gtids和lost_gtids内存数据,它们分别表示数据库执行了哪些GTID操作,又有哪些GTID操作由于删除binary log已经丢失了。
这里需要达成一个共识:gtid_executed变量一定是实时更新的,不管是主库还是从库。下面将分为主库修改时机、从库修改时机、通用修改时机三部分讨论。
后面的介绍都约定在打开GTID的情况下。图1-1中的灰色部分为常见的配置,读者可以对它们的更改时机有一个整体的把握,为后面的深入学习打好基础。
图1-1