暂无图片
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
打赏 0
czxin788

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

暂无图片 评论
暂无图片 有用 1
打赏 0
伟鹏

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

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

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

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

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

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

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

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

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

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

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

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

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

暂无图片 评论
暂无图片 有用 0
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
无法修改root密码,怎么处理?5.7版本
回答 3
1,my.cnf中增加了skipgranttables参数2,重启mysql3.mysqlurootp4,updatemysql.usersetauthenticationstring''whereu
是否有MySQL命令来定位my.cnf配置文件,类似于PHP的phpinfo() 定位方式php.ini?
回答 1
已采纳
locatemy.cnfpsaux|grepmysql|grep‘my.cnf’mysqlhelp|grep‘my.cnf’如果mysql在启动状态,切且指定了配置文件psaux|grepmysql|
怎么把MySQL的空值和null全都查出来?
回答 2
测试用例:createtablet(aint,bvarchar(2));insertt(a)values(1);insertt(a,b)values(2,'');insertt(a,b)values(
mysql rr下,未提交的插入数据,data_locks表中,LOCK_DATA: NULL的问题
回答 1
这是插入意向锁,是表锁,设计如此,为了提高插入的并发性;你重新开一个会话,再插入相同的记录,这时会被阻塞,然后再查看datalocks视图,就明白了
mysqldump是物理备份吗
回答 2
已采纳
不是哦
MySQL的状态变量Max_used_connections的作用是什么?
回答 1
已采纳
系统状态变量Maxusedconnections是指从这次MySQL服务启动到现在,同一时刻并行连接数的最大值。它不是指当前的连接情况,而是一个比较值。如果在过去某一个时刻,MySQL服务同时有100
如何解散mysql InnoDB ClusterSet
回答 2
已采纳
InnoDBCluster(之前称为MySQLGroupReplication)是一种高可用性解决方案,用于MySQL数据库。解散或清除InnoDBClusterSet信息通常涉及以下步骤:1.停止所
mysql5.7可以给某个用户建库的权限么?
回答 1
已采纳
create的权限。应该可以
ogg21c mysql 同步至 mysql 抽取进程报错
回答 2
已采纳
问题找到了,是MySQL版本的原因,MySQL8.3会有此现象,目前测试了8.0.xxx和MySQL8.4都是正常的
MySQL使用索引的原因
回答 1
根本原因:索引的出现,就是为了提高数据查询的效率,就像书的目录一样。对于数据库的表而言,索引其实就是它的“目录”。扩展:创建唯一性索引,可以保证数据库表中每一行数据的唯一性。帮助引擎层避免排序和临时表