一、GTID的作用
GTID特性是5.6加入的一个强大的特性,全称是Global Transaction Identifier。MySQL会为每一个DML/DDL操作增加一个唯一标记叫做GTID,这个标记在整个复制环境中都是唯一的。主从环境中主库的DUMP线程可以直接通过GTID定位到需要发送的binary log位置,而不再需要指定binary log的文件名和位置,因此切换极为方便。关于DUMP线程是如何通过GTID定位到binary log位置的,我们将在第17节进行讨论。
二、GTID的基本表示
为了严谨,我会尽量使用源码的术语进行解释。后面我们也会沿用这些术语。
- GTID:单个GTID,比如‘24985463-a536-11e8-a30c-5254008138e4:5’。对应源码中的类结构Gtid。注意源码中用sid代表前面的server_uuid,gno则用来表示后面的序号。
- gno:单个GTID后面的序号,比如上面的GTID其gno就是5。这个gno实际上从全局计数器next_free_gno中获取的。
- GTID SET:一个GTID的集合,可以包含多个server_uuid,比如我们常见的execute_gtid、gtid_purged就是一个GTID SET。类似‘24985463-a536-11e8-a30c-5254008138e4:1-5:7-10’就是一个GTID SET。对应源码中的类结构Gtid_set,其中还包含一个sid_map用于表示多个server_uuid。
- GTID SET Interval:GTID SET中某个server_uuid可能包含多个区间比如‘1-5:7-10’,比如这里就有2个GTID SET Interval分别是‘1-5’和‘7-10’。当然通常只有一个GTID SET Interval如‘1-10’。对应源码中的结构体Gtid_set::Interval。