暂无图片
mysql从库复制中断,gtid出现gap是怎么回事
我来答
分享
czxin788
2024-09-19
mysql从库复制中断,gtid出现gap是怎么回事

我有一个mysql多源库,重启这个多源库后,发现有一个channel 停止复制了,最终定位为是这个从库的gtid出现gap,请问这个gap是怎么产生的。



我来答
添加附件
收藏
分享
问题补充
9条回答
默认
最新
吾亦可往

在 MySQL 多源复制中,GTID(Global Transaction Identifier)出现 gap 的原因可能有以下几种:


一、主库事务未完整同步到从库


  1. 网络问题

    • 在主从复制过程中,如果网络出现不稳定或者中断,可能导致正在传输的事务部分丢失。当网络恢复后,从库可能无法接收到完整的事务集,从而出现 GTID gap。
    • 例如,主库在网络中断期间提交了多个事务,而从库只接收到其中一部分,那么未接收到的事务对应的 GTID 就会在从库中形成 gap。
  2. 主库压力过大

    • 当主库负载过高时,事务的提交速度可能会超过从库的复制速度。如果主库在短时间内产生大量事务,而从库无法及时处理和同步这些事务,就有可能导致部分事务未被复制到从库,进而产生 GTID gap。
    • 比如,主库上有一个繁忙的 OLTP 应用,大量的并发事务使得主库的性能达到瓶颈,从库无法跟上主库的节奏,就容易出现这种情况。


二、从库故障或异常


  1. 从库重启

    • 当从库意外重启时,可能会丢失正在进行中的事务或者部分已接收但未应用的事务。如果这些丢失的事务对应的 GTID 在主库上已经提交,那么从库在重新启动后就会出现 GTID gap。
    • 例如,从库在应用事务的过程中突然断电,重新启动后,可能会发现某些 GTID 对应的事务丢失了。
  2. 从库磁盘空间不足

    • 如果从库的磁盘空间耗尽,可能会导致复制中断。在这种情况下,从库无法接收和存储新的事务,当主库继续产生事务时,从库就会出现 GTID gap。
    • 比如,从库的日志文件不断增长,最终耗尽了磁盘空间,使得复制进程无法继续进行。


三、复制配置问题


  1. 复制参数设置不当

    • 一些复制相关的参数设置不合理可能会导致 GTID gap 的出现。例如,如果从库的 slave_parallel_workers 参数设置过高,而从库的硬件资源无法支持这么多并行线程,可能会导致复制出现混乱,进而产生 GTID gap。
    • 或者 slave_pending_jobs_size_max 参数设置过小,限制了从库可以处理的未应用事务的数量,当主库产生大量事务时,从库可能无法及时处理,从而出现 gap。
  2. 多源复制复杂性

    • 在多源复制环境中,多个主库同时向从库发送事务,这增加了复制的复杂性。如果不同主库上的事务之间存在依赖关系,或者从库在处理来自不同主库的事务时出现混乱,都有可能导致 GTID gap 的出现。
    • 例如,一个主库上的事务依赖于另一个主库上的事务先完成,但从库在处理时顺序出现错误,就可能导致部分事务无法正确应用,产生 gap。
暂无图片 评论
暂无图片 有用 0
czxin788

应该不是,我这有好几个多源库,都出现了这个gap,但是这个主库自己的从库却没有出现gap。

暂无图片 评论
暂无图片 有用 1
伟鹏

源库里面包含的日志被清除了吧?

暂无图片 评论
暂无图片 有用 0
czxin788
题主
2024-09-19
是被清除了,但是这个从库gtid出现gap,不理解
伟鹏

从库要从主库的binlog读取到需要的那个gtids,这样才能从那个点开始。

暂无图片 评论
暂无图片 有用 0
czxin788

但还是没明白,从库同步主库的gtid出现了gap

暂无图片 评论
暂无图片 有用 0
伟鹏

这么说吧,从库需要的日志没有从主库传过来, 并且被主库purge了,那可不就是gap了

暂无图片 评论
暂无图片 有用 0
czxin788

为什么没有传过来,主从同步也没有延时

暂无图片 评论
暂无图片 有用 0
伟鹏

不是在源端purge掉了么,可能是purge之前就没传过来吧?

暂无图片 评论
暂无图片 有用 0
czxin788

对,关键问题是,为什么purge前没有传过来。数据库是一直实时同步 。

暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏