10. 寻找同步起始点GTID
Introduction
想象一个问题, 如果现在从节点短暂的挂了一会儿, 那么等它恢复的第一件事就应该是去主节点那里, 拉来之前缺失的数据, 那么从哪儿开始拉呢? 它怎么知道自己是从哪儿开始缺失的呢?
主机更新数据时会产生GTID,一起记录到binlog日志中
从节点的I/O线程拉来binlog,写入到本地的relaylog中
SQL线程从relaylog中获取GTID, 然后对比备机自己的Binlog查看一下自己有没有执行过这个语句
如果有记录,说明该GTID的事务已经执行, 忽略
如果没有记录, 说明这个GTID还没有执行过, 执行一下并记录到备机自己的binlog里
因此我们可以发现所谓寻找binlog的问题, 现在已经变成了寻找GTID的问题了
你有可能因为什么导致主从不一致
主从复制过程中,主库异常宕机
异步复制本身就不保证从库能接受到这些日志, 即使半同步也可能导致一部分备机无法同步到日志
全同步在主机记录binlog+redolog,但是没及时同步到备机就挂掉, 重启后主备不一致
Last updated
Was this helpful?