GTID作用
主从环境中主库的dump线程可以直接通过GTID定位到需要发送的binary log的位置,而不需要指定binary log的文件名和位置,因而切换极为方便。
gtid_executed 表
是GTID持久化的一个介质,实例重启后所有的内存信息都会丢失,GTID模块初始化需要读取GTID持久化介质。
gtid_executed变量
表示数据库中执行了哪些GTID,它是一个处于内存中的GTID SET。
gtid_purged变量
表示由于删除binary log,已经丢失的GTID event,它是一个处于内存中的GTID set。搭建从库时,通常需要使用set global gtid_purged命令设置本变量,用于表示这个备份已经执行了哪些gtid操作,手动删除binary log 不会更新这个变量。
gtid_executed变量和gtid_purged变量这两个变量分别表示,数据库执行了哪些GTID操作,又有哪些GTID操作由于删除binary log 已经丢失了。
更新时机
主库更新时机
(1)gtid_executed变量一定是实时更新的。在order commit的flush阶段生成GTID,在commit阶段才计入。
(2)mysql.executed表在binary log切换时更新
(3)gtid_purged变量在清理binary log时修改,比如purge binary logs 或者超过expire_logs_days的设置后
从库更新时机
log_slave_updates关闭
(1)从库mysql.executed 未开启log_slave_updates情况下,只能通过实时更新mysql.executed表来保存
(2)gtid_executed变量实时更新
(3)gtid_purged变量实时更新
log_slave_updates打开
从库mysql.executed 开启log_slave_updates情况下,更新和主库一模一样。
通用修改时机
gtid_executed 表
gtid_executed 表 在执行reset master ,set global gtid_purged命令时设置本表
gtid_executed变量
gtid_executed变量 reset aster清空本变量,set global gtid_executed命令时设置本变量
mysql启动时初始化设置
gtid_purged 变量
reset master清空本变量
set global gtid_purged 设置本变量
mysql启动初始化设置
GTID模块初始化流程
1、获取到server_uuid
2、读取mysql.gtid_executed表,但是该表不包含当前binlog的GTID
3、读取binlog,先反向扫描,获取最后一个binlog中包含的最新GITD,然后正向扫描,获取第一个binary log中的lost GTID。
4、将只在binlog的GTID加入mysql.gtid_executed表和gtid_executed变量。此时mysql.gtid_executed表和gtid_executed变量也正确了
5、初始化gtid_purged,扫描到的lost GTID。