问题
假设数据库采用了等GTID的方案,现在要对主库的一张大表做DDL,可能会出现什么情况?如果出现这种情况,应该怎么做?
结果
表做DDL的时候可能会出现主从延迟,导致等 GTID 的方案可能会导致这部分流量全打到主库,或者全部超时
建议
- 这种预期内的操作,应该在业务低峰期的时候,确保主库能够支持所有业务查询,然后把读请求都切到主库,再在主库上做DDL。等备库延迟追上以后,再把读请求切回备库。
- 或者
-
在各个从库先SET sql_log_bin=
OFF,然后做DDL,所有从库及备主全做完之后,做主从切换,最后在原来的主库用同样的方式做DDL。 -
从库上执行DDL;将从库上执行DDL产生的GTID在主库上利用生成一个空事务GTID的方式将这个GTID在主库上生成出来。各个从库做完之后再主从切换,然后再在原来的主库上同样做一次。
需要注意的是如果有MM架构的情况下,承担写职责的主库上的slave需要先停掉.