![深入理解MySQL主从原理](https://wfqqreader-1252317822.image.myqcloud.com/cover/513/37423513/b_37423513.jpg)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
1.4.11 离线开启GTID丢失数据的测试
这个测试很简单,实际上在线开启GTID丢失数据也是一样的道理,但是在线开启GTID丢失数据的情况不太好模拟,因此我们以离线开启GTID为例。
首先,我们需要在POSITION MODE的主库中执行如下大事务。
![](https://epubservercos.yuewen.com/A01218/19823444008569806/epubprivate/OEBPS/Images/txt001_58.jpg?sign=1739211311-0BTcD4MX38UDMhgGgBA5n3SZU395KlJQ-0-e703adbe5d42378b5557f5b47471532f)
从库中的结果如图1-3所示。
![](https://epubservercos.yuewen.com/A01218/19823444008569806/epubprivate/OEBPS/Images/txt001_59.jpg?sign=1739211311-6dSVW4JocS2gFuycJs6YPTREyo40huG1-0-7adb27cd9dc247b57a40ebb86ebead34)
图1-3
这个时候,我们执行“stop slave”命令关闭主库和从库实例,然后修改GTID相关参数开启GTID。实际上正常关闭从库将会进行大事务的回滚,这将会在4.7节介绍。
接着启动主库和从库实例,注意从库需要设置 skip-slave-start 不随实例启动,然后设置MASTER_AUTO_POSTION=1,如下。
![](https://epubservercos.yuewen.com/A01218/19823444008569806/epubprivate/OEBPS/Images/txt001_60.jpg?sign=1739211311-KuLDzjLIeqZIJYp5GlVIo6DkBJyde5zx-0-a16d274818162c83b70f131e0c26b605)
启动后发现testgpan表中的数据并没有被删除,但是主从状态是正常的,如图1-4所示。
![](https://epubservercos.yuewen.com/A01218/19823444008569806/epubprivate/OEBPS/Images/txt001_61.jpg?sign=1739211311-f2GUYcdzD4nCvUKLM4K7M0dOdEWleHN9-0-83734331e3a02b95cc88147e3a16686d)
图1-4
也就是说,数据已经不一致了,造成这种问题的原因有如下两个。
(1)设置MASTER_AUTO_POSITION = 1会清理原来的所有relay log,因此relay log中已经没有这个匿名事务的Event了。
(2)设置MASTER_AUTO_POSITION = 1,DUMP线程会使用从库的Executed_Gtid_Set和Retrieved_Gtid_Set的并集定位binary log,因此匿名事务的Event也不会发送了。这将在3.5节和4.4节介绍。