暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

GTID出现的背景

原创 中天 2023-04-16
589

GTID(global transaction identifier)全局事务ID是MySQL5.6引入的新特性,它会为每个事务分配一个唯一的事务ID。事务ID的格式如下:

source_id:transaction_id

它由两部分组成,其中:

  source_id表示事务是在哪个实例上产生的,通常用实例的server_uuid来表示。

  transaction是事务的序列号,按照事务提交的顺序从1开始顺序分配。

这样,可保证GTID在整个复制拓扑中都是全局唯一的。


传统的复制是基于binlog位置点的。在搭建的时候,需指定master_log_file和master_log_pos。这个位置的准确性十分关键,如果弄错了,很容易导致主从数据不一致,甚至主从复制中断。

在一主多从的架构中,在主库出现故障,将一个从库提升为主库后,剩下的从库并不知道要基于哪个位置点与新主库建立复制关系。毕竟,主库上的同一个操作,在不同从库上对应的binlog位置点基本上都不相同。这也是MHA(MySQL高可用管理工具)出现的背景,它能自动计算出搭建复制时要指定的位置点。但在更加复杂的复制拓扑(如级联复制)中,即使MHA也无能为力。

引入GTID的初衷其实就是为了简化复制的日常管理。有了GTID,无论是搭建复制、拓扑变更,还是高可用切换都无须再关心具体的binlog位置点信息。

另外一个流行的MySQL高可用管理工具Orchestrator支持复杂的、基于binlog位置点的复制拓扑的管理。在实现上,它会定期(默认每5秒)向主库注入一个Pseudo-GTID事务,该事务只有一个简单的删除视图(DROP VIEW)操作。比如:

  drop view if exists '_pseudo_gtid_'.'_asc:5dcfce93:00000001:96b185b1e799c12e'

视图名其实就是一个很好的GTID。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论