为了将加入组的服务器与捐赠者同步到特定时间点,加入组的服务器和捐赠者使用 MySQL 全局事务标识符 (GTID) 机制。请参阅第 16.1.3 节,“使用全局事务标识符进行复制”. 然而,GTIDS只是提供了一种手段来了解加入组的服务器丢失了哪些事务,它们没有帮助标记加入组的服务器必须赶上的特定时间点,也没有帮助传递认证信息。这是二进制日志视图标记的工作,它标记二进制日志流中的视图更改,还包含其他元数据信息,为加入组的服务器提供缺少的认证相关数据。
要解释视图更改标记的概念,了解视图和视图更改是什么很重要。
一个视图对应于一组积极参与当前配置的成员,换句话说,在特定时间点。它们是正确的并且在系统中在线。
当对组配置进行修改时,例如成员加入或离开,就会发生视图更改。任何组成员资格更改都会导致在同一逻辑时间点向所有成员传达独立的视图更改。
视图标识符唯一标识 一个视图。每当发生视图更改时都会生成
在组通信层,视图更改及其关联的视图 ID 是成员加入前后交换的数据之间的边界。这个概念是通过一个新的二进制日志事件实现的:“查看更改日志事件”。因此,视图 ID 也成为组成员身份发生变化前后传输的事务的标记。
视图标识符本身由两部分构成: (i)随机生成的部分和 (ii)单调递增的整数。第一部分在创建群组时生成,并且在群组中至少有一个成员时保持不变。每次发生视图更改时,第二部分都会递增。
组成视图 id 的这种异构对的原因是需要明确标记组更改,无论何时成员加入或离开,以及每当所有成员离开组并且没有信息保留该组所在的视图时。事实上,单独使用单调递增标识符可能会导致在整个组关闭后重复使用相同的 ID,从而破坏恢复所依赖的二进制日志数据标记的唯一性。总而言之,第一部分标识组何时从头开始,增量部分标识组从那一刻起发生变化。