vlambda博客
学习文章列表

MySQL主备同步延迟有多可怕?

又有 持续爆 发的趋势, 很多企业 已开 启远程 模式, 歪哥也不例外 在家 憋着属实难 受,不过 在工作之余有更多时间 与家人相处也是一件 好事, 而且 有更充裕的时间 学习技能 充实自己
进入正题,今天讲讲MySQL的主从同步。说到主从同步,就要先看看何为主从。

HA(高可用)
高可用这个词都耳熟能详,核心思想是提高系统的容错能力。一般都会通过集群部署、主备节点来实现。备用节点就是用来当主节点挂掉时顶上去,保证系统可用。
MySQL也不例外,下面以一个最简单的主备模式为例。

可以看到,主备之间要进行数据同步,不然备库的数据从哪来呢?如果等到主备切换时候才全量同步明显是来不及的,因此这个数据同步是近实时的。

主从同步
主从同步的核心是通过binlog,binlog大家都知道,就相当于一个日志记录功能,存储了MySQL操作历史,这样可以从binlog进行数据回放,主从同步也是基于此。

MySQL主备同步延迟有多可怕?

简单来说,备节点会copy主节点的binlog,然后再从中回放数据,一般主备节点部署在不同机器,那么主从延迟实际上主要就是两个binlog数据同步的网络时延。

主从延迟
那么问题就来了,同步延迟过高会怎样?
总结起来就一句话:破坏高可用。
延迟过高就意味着备库数据大幅落后主库,一旦发生主从切换,就意味着一段时间内,读到的是过时的数据,设想一个银行系统,突然有一天你发现你的账户少了一百万,然后客服告诉你不用惊慌,系统有延迟,等一会儿能恢复,然而你心里默念一百遍羊驼也平复不了飙到200的心率......

MySQL主备同步延迟有多可怕?


如何避免
解决问题似乎是运维大佬的事,但与普通开发人员也是息息相关的,我们说说几点能避免或减少延迟的思路
  • 升级备库的机器配置

硬件不行,再牛逼的程序也白搭,永远不变的真理,机器配置也是影响同步的主要因素之一。
  • 备库干私活

一般来说,部署的时候会尽量避免这样的情况,如果备库的机器上还有像运营数据统计这类应用在跑,是会影响机器整体性能,当然资源实在紧张的话也没办法。
  • 大事务

用惯了@Transaction注解的程序员似乎对事物变的越来越不敏感,导致业务中出现大量的冗长大事务,数据库执行完事务提交后才对外可见,备库也是同样,那么即使网络状况良好,一个十分钟的大事务也意味着表现出至少十分钟的延迟。

因此,即使是数据库部署相关的技能,也不仅仅是运维同学需要掌握的,知其所以然,才能在平时开发过程中避免挖坑。