![深入理解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=1739285482-lsWgOBF8LLDV3hE0oDPYC9m1MGZGAXpt-0-0521f6a9490e4b62f5a27bbbbcd7a537)
从库中的结果如图1-3所示。
![](https://epubservercos.yuewen.com/A01218/19823444008569806/epubprivate/OEBPS/Images/txt001_59.jpg?sign=1739285482-FiUlXr6eAHQV9OwKsbruZ7S9lVnbxIBr-0-23a14aeba0a844344e4d32d2a3f0d471)
图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=1739285482-ylrydU7XuaVWEIiBcLVkldoj0hvw0D6z-0-44f3e69a8e979abbce026f2f691238e0)
启动后发现testgpan表中的数据并没有被删除,但是主从状态是正常的,如图1-4所示。
![](https://epubservercos.yuewen.com/A01218/19823444008569806/epubprivate/OEBPS/Images/txt001_61.jpg?sign=1739285482-SkikaInbJ6GMLB1yk6hxKcM3WNZIS9cN-0-343371ed8b7224d6d599b2d5e8627bbf)
图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节介绍。