gtid 是在源上创建并与提交的每个事务相关联的唯一标识符 。
    gtid集 : 是包含一个或多个gtid范围的集合 。如变量 gtid_execute,gtid_purged存储的gtid值
    gtid 存储在数据库内 mysql.gtid_executed (当 gtid_mode= on / on_permissive)

    gtid 生命周期
    1 源服务器执行并提交事务,这个事务被分配了一个有源UUID 和尚未使用的最小非零事务序列号组成的GTId ,gtid 被写入binlog, 如果不记录binlog 则不会为其分配gtid.
    2 如果为事务分配了 gtid ,则gtid在事务开启时将其写入binlog 在提交时以原子的方式持久化。 当二进制文件轮换,或服务器关闭时,服务器都会将写入前一个日志文件的gtid写入 mysql.gtid_executed 表内
    3 如果为事务分配了gtid 则通过将gtid添加到 grtid_executed 系统变量内,该变量将在事务提交后 写入变量,该变量包含所有已提交的gtid事务集,在复制中用作表示服务器的转态令牌,gtid_executed 状态变量中gtid 是所有应用事务的完整记录,但mysql.gtid_executed表不是,因为最近的gtid然在binlog中 (只有binlog 切换才会将gtid信息记录到mysql.gtid_exectue表内)
    4 将binlog 传输到副本,并存储在副本中继日志后,副本读取gtid 并设置gtid_next系统的值 变量作为gtid,这告诉副本必须使用此gtid 记录下一个事务 。
    副本设置gtid 在会话的上下文。
    5 副本验证该gtid没有事先应用与副本,并且确保没有其他会话已读取该gtid。 因此 如果多个客户端尝试同时应用于一个事务,服务器只会让其中一个来执行解决这个问题 。 系统变量 gtid_owned 副本显示当前正在使用每个gtidy以及拥有他们的线程,如果gtid已被使用,则将自动跳过功能来忽略事务。
    6 如果尚未使用gtid ,则副本将使用存储在gtid_next内的事务gtid。
    7如果副本启用binlog 则gtid在事务提交时将其写入binlog ,以原子的方式持久化,当binlog切换或服务关闭时,会将前一个binlog内的所有gtid写入表 mysql.gtid_executed。
    8 如果在副本上禁用了binlog ,则gtid 会直接写入mysq.gtid_executed表以原子的方式持久化。这种情况下 mysql.grtid_executed表是包含副本的完整gtid事务。
    9 在副本提交事务后 gtid 通过将其添加到副本的 gtid_executed 系统变量中的一组 gtid,以非原子化方式 保存。

    在源库上设置过滤的事务,不会记录其gtid信息(源库是过滤binlog)
    在复制库上过滤的事务,其gtid会保留下来 ,如果复制库启动binlog 则将过滤掉的事务作为 gtid_log_event后面跟 begin and commit 语句的空事务来写入binlog, 如果禁用binlog 则将过滤掉的gtid写入mysql.gtid_executed 表内,以及变量 gtid_executed 。

    在多线程副本 (slave_parallel_workers>0) 上事务可以并行应用,因此复制的事务可以无序提交(salve_preserve_commit_order !=1) ,在这种情况下 gtid_executed 系统变量下的gtid集合包含多个范围,他们可能存在间隙。(单线程副本上,gtid单调递增,数字之间没有间隙)。


    系统变量 :
    gtid_next : 新事务依据其自动生成并分配下一个gtid值 。当事务应用于副本时,来自服务器的gtid将被保留,可通过设置gtid_next值来改变此行为。
    gtid_purged 包含已提交的事务gtid,但其binlog 已删除。(1 在副本上禁用binlog 日志记录情况下提交的复制事务gtid ; 2 写入已清楚binlog文件的事务 gtid , 3 由语句显示添加到集合中的 gtid set@@global.gtid_purged)
    可以该更该值 ,gtid_purge

    服务器启动时会初始化 变量 gtid_purged,gtid_executed.


    重置gtid执行历史 :
    reset master 清空binlog (请确保服务器binlog和binlog.inedx都有备份) 请使用mysqlbinlog 检查事务以确保他们没有价值 。
    gtid_purged 将置空,gtid_executed全局值 置空 ,mysql.gtid_executed表置空,。


    master_auto_position : 复制环境 gtid自动定位