【运维面试】面试官:mysql主从延迟是怎么处理的

前言

运维关于mysql的面试题,最常见的就是mysql主从同步,对于主从同步这一块稍微深入一点的就是mysql主从延迟怎么产生的,怎么解决的。

现阶段的互联网公司,一般都是读多写少,一个主库配几个从库来读取数据,减轻高并发读的压力。

关于mysql延迟

导致mysql主从延迟的原因有很多,其中一个最主要的就是高并发场景下的延迟。
从库需要从主库拷贝日志以及串行执行SQL,所以在高并发的场景下,从库的数据一定会比主库慢一些,经常会出现刚写入的数据,在从库上找不到,需要经过几十毫秒才能读取到,有时候甚至是几百毫秒。

mysql 的复制分为半同步复制和并行复制,这两种方式其实就是来解决数据丢失和主从同步延时的问题的。

半同步复制:

主库写入binlog日志后,就会强制立即将数据同步到从库,从库将日志写入自己本地的relay log之后,会发挥一个响应给主库,主库接收到至少一个从库的响应之后才会认为写入已经完成了。

并行复制:

从库开启多个线程,并行读取 relay log 中不同库的日志,然后并行重放不同库的日志,这是库级别的并行。

主从延迟产生的原因

  • 网络抖动导致的主从延迟
  • 主库上有大的事务,导致从库延时
  • 主库上有慢查询语句,锁等待等原因,从库个数较多
  • 从库上发生的大的事务,阻塞了后续的所有事务的运行
  • 从库并发量比较大,导致延迟
  • binlog格式没有设置row格式

主从延迟的解决方案

一般排查思路先排查是否是网络抖动及外在原因,如果不是外在原因在排查主库,主库没有问题在对从库进行排查。

介绍几个常见的解决主从延迟的方案:

  • 分库,将一个主库拆分成多个主库,每个主库的写并发减少了之后,延迟就小了
  • 打开mysql的并行复制,多个库并行复制。
  • 重写代码,写完代码之后不要立即查询,很可能会查询不到。
  • 提升从库的硬件配置(有很多公司从库的配置不高)
  • 设置从库为只读模式
  • 开启5.7 增强半同步避免数据丢失
  • 开启binlog raw格式

一个注意的点: 从库raid卡 ,设置成write back的写策略。

总结

对于面试来说,从这里面随便说几条就可以,因为运维对于数据库的熟练程度并没有运维自己想象的那么差,同时也没有公司想象的那么好。
所以面试的时候如果遇到数据库的问题,尽量往自己会的上引导把。

猜你喜欢

转载自blog.csdn.net/xinshuzhan/article/details/108533780
今日推荐