MySQL:双主server_id的过滤方法
作者简介:高鹏,笔名八怪。《深入理解MySQL主从原理》图书作者,同时运营个人公众号“MySQL学习”,持续分享遇到的有趣case以及代码解析!
最近遇到一个和这个相关的问题,简单记录了一下,有误请谅解。5.7.29版本代码。
一、问题抛出
不知道大家是否用过双主,双主有一个值得思考的地方就是在开启从库记录主库binlog的情况下(log_slave_updates=ON)这种情况下我们一个event是否会从主库传输到从库然后从库又传回来主库应用呢?这就循环了。
显然这是不会的,我们知道在event的header中存储了server_id,也就是根据这个server_id可以进行过滤,那么这里大概是怎么做的呢?下面来看看。
二、过程分析
首先呢,在IO线程中(queue_event),通过读取到event会通过header拿到server_id
(s_id == ::server_id && !mi->rli->replicate_same_server_id)