前面一节我们看到了主库DUMP线程有几步需要比较GTID SET和GTID,如下:
- 检查从库的GTID SET是否大于主库的GTID SET
- 根据主库的gtid_purged变量检查从库需要的Event是否已经被清理
- 实际扫描主库的binary log检查从库需要的Even是否已经被清理
- 进行GTID的过滤,决定发送哪些事务给从库
虽然上面一节我们解释了他们的功能,但是没有具体说明它的算法。这部分计算方法是我比较好奇的。因此我单独列出来讲一下,这一节不是那么重要,因为这些算法还是有些晦涩难懂,一般只要知道其功能即可。
只是我们需要明确一点比如从库出现b:1-95:97-100这种GTID SET的时候,如果要在主库查找是否有需要的Event,是以b:1-95为准,也就是只要主库b:96这个事务的Event已经丢失则不能同步,详细参考后面第三段。
一、环境假设
这里为了方便描述将server_uuid进行简化,假设为a,b,c。