MySql主从同步、延迟及解决的学习总结

MySQL主从同步通过binLog实现,确保高可用和并发能力。主库变更写入binlog,发送到从库的relaylog,再由从库重放并执行SQL。主从延迟可能因网络、从库性能、大事务等因素导致。解决延迟问题可优化事务、提升从库性能、优化网络等。
摘要由CSDN通过智能技术生成

1 什么是MySql主从同步

MySql是当今广泛使用的一种关系数据库。在日常生产环境中,为了保证高可用及高并发,通常采用主从结构。即通过主从复制方式同步数据,再通过读写分离实现提高并发访问能力。

主从复制通过binLog(binarylog)实现,这时一种日志文件。记录了MySql数据库增删改操作的日志信息。

主结点发生操作变更后,binlog被发送到从结点,并记录在relay log中。从结点重放relay log,并转换为数据操作sql语句,实现从结点数据的入库。最终完成主结点数据复制。

一次主从复制过程如下图所示:

在这里插入图片描述

  • 主库写入数据并且生成binlog文件。该过程中MySQL将事务串行的写入二进制日志,即使事务中的语句都是交叉执行的。
  • 在事件写入二进制日志完成后,master通知存储引擎提交事务。
  • 从库服务器上的IO线程连接Master服务器,请求从执行binlog日志文件中的指定位置开始读取binlog至从库。
  • 主库接收到从库的IO线程请求后,其上复制的IO线程会根据Slave的请求信息分批读取binlog文件然后返回给从库的IO线程。
  • Slave服务器的IO线程获取到Master服务器上IO线程发送的日志内容、日志文件及位置点后,会将binlog日志内容依次写到Slave端自身的Relay Log(即中继日志)文件的最末端,并将新的binlog文件名和位置记录到master-info文件中,以便下一次读取master端新binlog日志时能告诉Master服务器从新binlog日志的指定文件及位置开始读取新的binlog日志内容。
  • 从库服务器的SQL线程会实时监测到本地Relay Log中新增了日志内容,然后把RelayLog中的日志翻译成SQL并且按照顺序执行SQL来更新从库的数据。
  • 从库在relay-log.info中记录当前应用中继日志的文件名和位置点以便下一次数据复制。

2 主从延迟

从第一节的概念可知,复制过程由于网络传输和从库执行SQL的耗时,主从数据状态存在一段时间内不一致的情况。这称为主从延迟。 从时间上看即主库发生变更后,从库和主库不一致的这段时间。 根据主从同步的过程可知有如下情况可能导致主从延迟。

  • 网络原因:网络延迟
  • 从库机器性能差:主从配置不一样,从库处理能力弱。通常主从配置要一致。
  • 从库数据处理压力大:从的读取量过大,写入资源不足。这时采用多从结构,分散从的压力,保证写入的资源。
  • 大事务执行:长耗时操作产生过大的日志,导致从库重放耗时过长。这种情况拆分事务,分批执行。
  • 主库表结构变更(alter、drop等):表结构较大,产生较大的变更,耗时过久,最终导致从库执行时间较长。
  • 锁冲突
  • 从库复制能力:从库的复制形式这个要参考mysql版本。高版提供更优的机制保证快速复制。而较早的版本采用单线程复制,因而速度较慢。

3 主从延迟导致的问题与解决

如果发生延迟,则会出现查不到最新数据,最终导致逻辑发生异常。根据前文分析延迟的原因,可通过如下方式解决。

  • 优化业务逻辑,缩小事务
  • 优化慢SQL,拆分批量任务,同步时分阶段执行
  • 提高从库机器配置
  • 提高网络配置,降低网络带来的问题
  • 高实时要求的业务,查询强制走主库,从只做备份。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值