![深入理解MySQL主从原理](https://wfqqreader-1252317822.image.myqcloud.com/cover/513/37423513/b_37423513.jpg)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
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=1739336236-9PIiVxbCgOLM6k42DzsYIW8n94ZZhskj-0-c2780edae91994c632c00ef506edae56)
(2)原主库(新从库)执行如下操作。
![](https://epubservercos.yuewen.com/A01218/19823444008569806/epubprivate/OEBPS/Images/txt001_40.jpg?sign=1739336236-yuuxDvg44mZuo7q5ETqqY3E96itcirP5-0-6854674ffdb5ac0d05feff49b86acf33)
实际就是这么简单,新主库(原从库)会生成自己的GTID事务,新从库(原主库)接受后执行即可。切换后主库的gtid_executed变量会出现两个server_uuid,如下。
![](https://epubservercos.yuewen.com/A01218/19823444008569806/epubprivate/OEBPS/Images/txt001_41.jpg?sign=1739336236-E8uUJx511Shmn2FuzHJ9jMBwHUra7Fnf-0-c29def23b3919caae812f4113d0d9780)
总的说来,切换的从库不能在从库本地做任何生成GTID的操作。如果确实要做,比如加索引等不影响数据一致性的操作,则可以使用如下方法。
![](https://epubservercos.yuewen.com/A01218/19823444008569806/epubprivate/OEBPS/Images/txt001_42.jpg?sign=1739336236-wGv3VqdriOiZJOHtvwTlw2yleGAKdVLy-0-f29d73d0da976a6a31adab1f0867443b)
这样也不会增加从库本地的GTID。