从库都是通过读取日志的形式来进行“追”主库的备份。在逻辑备份中,日志的记录方式有两种,一种是点位,另一种是gtid。
(1)点位
点位记录方式是由两部分组成,第一部分是日志的编号,因为假如一个日志的容量是1.1G,当这个日志满了后就会分裂成多个日志,此时从库要从主库的哪一个日志开始读取追赶主库,就要用到第一部分的“位“来定位是哪个日志;第二部分是用来定位日志的事务,也就是从库要执行第几个日志的第几个事务。就是通过这个点位的方式,来实现从库定位到主库读取哪个日志的哪个事务。
但是这里就会出现一个问题,例如:
其中A是主库,B是A的从,C是B的从。在A表中的点位假设要同步的事务点位是0010:107,但是在从库B中,该事务的点位可能就变成其他了,例如变成0010:110(后面讲为什么,主要因为从库的binlog记录是通过relay log来的,记录的是数据页的物理修改,而不是某一行或某几行修改成怎样怎样,它用来恢复提交后的物理数据页(恢复数据页,且只能恢复到最后一次提交的位置))。
此时,B库的relay log去读取A库的binlog的日志内容,然后写到B库的binlog中记录点位,C库也是读取B库的relay log在commit后写到binlog中。因此,如果A库是已经存储的一段时间后的数据库,此时B库去同步A库时&#