10. 寻找同步起始点GTID

Introduction

想象一个问题, 如果现在从节点短暂的挂了一会儿, 那么等它恢复的第一件事就应该是去主节点那里, 拉来之前缺失的数据, 那么从哪儿开始拉呢? 它怎么知道自己是从哪儿开始缺失的呢?

  • 主机更新数据时会产生GTID,一起记录到binlog日志中

  • 从节点的I/O线程拉来binlog,写入到本地的relaylog中

  • SQL线程从relaylog中获取GTID, 然后对比备机自己的Binlog查看一下自己有没有执行过这个语句

  • 如果有记录,说明该GTID的事务已经执行, 忽略

  • 如果没有记录, 说明这个GTID还没有执行过, 执行一下并记录到备机自己的binlog里

因此我们可以发现所谓寻找binlog的问题, 现在已经变成了寻找GTID的问题了

你有可能因为什么导致主从不一致

  1. 主从复制过程中,主库异常宕机

  2. 异步复制本身就不保证从库能接受到这些日志, 即使半同步也可能导致一部分备机无法同步到日志

  3. 全同步在主机记录binlog+redolog,但是没及时同步到备机就挂掉, 重启后主备不一致

Last updated

Was this helpful?