0
点赞
收藏
分享

微信扫一扫

主从第一课:GTID初步认识

一世独秀 2022-05-15 阅读 64

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。


举报

相关推荐

0 条评论