一篇文带你彻底解决mysql的主从复制延迟问题

前言

​ 在之前我们已经讲解了一主一从,双主双从的mysql集群搭建,在单机应用的时候看起来没有问题,但是在企业的生产环境中,在很多情况下都会有复制延迟的问题。所以我来了!!!

image.png

​ 主从复制的原理我们在此处就不再赘述了,之前已经讲过了,这是一个老生常谈的问题,原理性质的也几乎在面试中问烂了,这些原理性质的东西并不是很难,但是你需要注意了,主从复制的延迟问题会成为一个难点,能非常全面的考验同学们的技术实力。【获取资源】

1、如何查看同步延迟状态?

​ 在从服务器上通过 show slave status 查看具体的参数,有几个参数比较重要:

​ master_log_file: slave中的IO线程正在读取的主服务器二进制日志文件的名称

​ read_master_log_pos: 在当前的主服务器二进制日志中,slave中的IO线程已经读取的位置

​ relay_log_file: sql线程当前正在读取和执行的中继日志文件的名称

​ relay_log_pos: 在当前的中继日志中,sql线程已经读取和执行的位置

​ relay_master_log_file: 由sql线程执行的包含多数近期事件的主服务器二进制日志文件的名称

​ slave_io_running: IO线程是否被启动并成功地连接到主服务器上

​ slave_sql_running: sql线程是否被启动

​ seconds_behind_master: 从属服务器sql线程和从属服务器IO线程之间的事件差距,单位以秒计

​ 在观察同步延迟的时候,上述的几个参数都是比较重要的,其中有一个最最重要的参数需要同学们引起注意,那就是seconds_behind_master,这个参数就表示当前备库延迟了多长时间,那么这个值是如何计算的呢?【获取资源】

​ 在进行主从复制的时候,需要注意以下几个关键的时刻:

​ 1、主库A执行完成一个事务,写入binlog,我们把这个时刻记为T1;

​ 2、之后传给备库B,我们把备库B接受完这个binlog的时刻记为T2;

​ 3、备库B执行完成这个事务,我们把这个时刻记为T3;

​ 所谓的主备延迟就是同一个事务,在备库执行完成的时间和主库执行完成的时间之间的差值,也就是T3-T1。SBM在进行计算的时候也是按照这样的方式,每个事务的binlog中都有一个时间字段,用于记录主库写入的时间,备库取出当前正在执行的事务的时间字段的值,计算它与当前系统时间的差值,得到SBM。【获取资源】

​ 如果刚刚的流程听明白了,那么下面我们就要开始分析产生这个时间差值的原因有哪些了,以方便我们更好的解决生产环境中存在的问题。【获取资源】

2、主从复制延迟产生的原因有哪些?

​ 1、在某些部署环境中,备库所在的机器性能要比主库所在的机器性能差。此时如果机器的资源不足的话就会影响备库同步的效率;

​ 2、备库充当了读库,一般情况下主要写的压力在于主库,那么备库会提供一部分读的压力,而如果备库的查询压力过大的话,备库的查询消耗了大量的CPU资源,那么必不可少的就会影响同步的速度

​ 3、大事务执行,如果主库的一个事务执行了10分钟,而binlog的写入必须要等待事务完成之后,才会传入备库,那么此时在开始执行的时候就已经延迟了10分钟了

​ 4、主库的写操作是顺序写binlog,从库单线程去主库顺序读binlog,从库取到binlog之后在本地执行。mysql的主从复制都是单线程的操作,但是由于主库是顺序写,所以效率很高,而从库也是顺序读取主库的日志,此时的效率也是比较高的,但是当数据拉取回来之后变成了随机的操作,而不是顺序的,所以此时成本会提高。

​ 5、 从库在同步数据的同时,可能跟其他查询的线程发生锁抢占的情况,此时也会发生延时。

​ 6、 当主库的TPS并发非常高的时候,产生的DDL数量超过了一个线程所能承受的范围的时候,那么也可能带来延迟

​ 7、 在进行binlog日志传输的时候,如果网络带宽也不是很好,那么网络延迟也可能造成数据同步延迟

​ 这些就是可能会造成备库延迟的原因【获取资源】

3、如何解决复制延迟的问题

​ 先说一些虚的东西,什么叫虚的东西呢?就是一听上去感觉很有道理,但是在实施或者实际的业务场景中可能难度很大或者很难实现,下面我们从几个方面来进行描述:

1、架构方面

​ 1、业务的持久化层的实现采用分库架构,让不同的业

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值