Mysql主从同步延迟问题及解决方案

主从复制是什么

将一个主库的数据复制到一个或多个作为从节点的库

为什么需要主从复制

  • 架构扩展。业务量增大的时候,单机IO称为瓶颈,会通过从节点分担读压力来降低单机磁盘的IO
  • 数据热备。作为后备数据库,发生问题可切换
  • 读写分离。支撑更大并发,有些统计操作可以放到Slave节点

原理是什么

在这里插入图片描述
日志文件binlog:binlog是主库保存更新日志的二进制文件
三个线程:

  • 主节点binary log dump线程
    当有从库连接主库的时候,主库会创建一个binary log dump线程发送binlog内容到从库。
  • 从节点I/O线程
    从节点执行 start slave命令之后,从节点创建一个I/O线程用来连接主节点,请求主库中更新的binlog。I/O 线程接收到主节点binlog dump 进程发过来的更新之后,保存到本地的relay log中。
  • 从节点SQL线程
    SQL线程负责解析relay log中的内容,解析成具体的操作并执行,最终保证数据一致性

常见延迟问题及解决方案

  • 主库的从库太多,导致复制延迟
    从库数量控制在3-5个
  • 从库硬件比主库差
  • 慢SQL语句过多
    比如一条SQL的执行时间是20s,那么在从库执行完毕到能查询到至少20s,那么主从延迟就20s了
  • 主从复制的设计问题
    主从复制单线程,如果主库并发写太大,来不及传到从库,就会导致延迟
  • 主从库之间的网络延迟 主从库的网卡、网线、交换机、跨公网的主从复制都会导致主从延迟