- 深入理解MySQL主从原理
- 高鹏
- 339字
- 2021-04-16 16:29:23
1.4.4 主从切换
切换必须保证主从没有延迟,可以通过对照主从库的gtid_executed变量进行确认。同时,切换时必须要确认原从库(新主库)没有做过本地GTID操作。如果原从库(新主库)做过本地GTID操作,那么切换后新从库(原主库)需要拉取这一部分的GTID Event,如果部分Event已经不存在了,那么会报错,即著名的1236错误。具体的判断过程我们将在3.5节和3.6节进行介绍。
正常的切换步骤如下。
(1)原从库(新主库)执行如下操作。
![](https://epubservercos.yuewen.com/A01218/19823444008569806/epubprivate/OEBPS/Images/txt001_39.jpg?sign=1738870763-CZAe4Ow21be7MEexLvjiGyFJaPRp156v-0-b661e0ca17e31cb1ef969a01c07d49cb)
(2)原主库(新从库)执行如下操作。
![](https://epubservercos.yuewen.com/A01218/19823444008569806/epubprivate/OEBPS/Images/txt001_40.jpg?sign=1738870763-S2hEfclNy6PejQbSXPIQbcXXjI4ROfKU-0-20371856edda72ee4e6f532c29662456)
实际就是这么简单,新主库(原从库)会生成自己的GTID事务,新从库(原主库)接受后执行即可。切换后主库的gtid_executed变量会出现两个server_uuid,如下。
![](https://epubservercos.yuewen.com/A01218/19823444008569806/epubprivate/OEBPS/Images/txt001_41.jpg?sign=1738870763-2uOg0EmMKYTvD3YUvUVnhchPB4L7arfu-0-644a4946c8653b647afda813ba9ee9eb)
总的说来,切换的从库不能在从库本地做任何生成GTID的操作。如果确实要做,比如加索引等不影响数据一致性的操作,则可以使用如下方法。
![](https://epubservercos.yuewen.com/A01218/19823444008569806/epubprivate/OEBPS/Images/txt001_42.jpg?sign=1738870763-GwsIjb9JVoz5po9fwC91lB05QCnSAb6e-0-0b75ba4c9b16b3c289925e4c8d7fd842)
这样也不会增加从库本地的GTID。