目录

一 为什么需要将 mysql 进行读写分离?

二 mysql 主从同步原理?

三 为什么主从同步会有数据延迟问题

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


一 为什么需要将 mysql 进行读写分离?

       读写分离是基于数据库集群的主从同步来做的,所谓的读写分离是:写操作访问主库,读操作访问从库。现实生活中更多的应用场景是读多写少,读写分离可以将写的压力集中放在集群的主库,读的压力分散到集群的不同从库上。

二 mysql 主从同步原理?

如何解决MySQL主从读压力大的问题 mysql主从 读写分离_读写分离

  • 主库在进行数据变更的同时,将变更内容写入 binlog 文件中。
  • 从库通过一个 io 线程读取主库的 binlog 写到本机的 relay log 中。
  • 从库通过 SQL 线程读取 relay log 中的 binlog,并执行 binlog ,将数据变更反映它自己的数据。

三 为什么主从同步会有数据延迟问题

       从库同步主库数据的过程是串行化的,也就是说主库上并行的操作,在从库上会串行执行。由于从库从主库拷贝日志以及串行执行 SQL 的特点,在高并发场景下,从库的数据一定会比主库慢一些,是有延时的。所以经常出现,刚写入主库的数据,读从库没有数据。

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

1. 写主库,读主库

       比如,最近业务中对手机号码进行加密之后,马上进行解密,加密数据是写入主库,解密数据是读从库。由于延迟较大,就出现了写主库成功,读从库失败的问题。这种方式不推荐,一旦读写都走主库,就失去了读写分离的意义。

2. 读从库失败后读主库

       当读取从库失败后,再读一次主库,这种方式在于如果读从库失败次数较多时,将增加主库的读操作压力。

3. 核心业务读写主库,非核心业务读写分离

       核心业务就是说对用户比较敏感的操作的时候读写主库,其他的对用户感知不是特别明显的可以读写分离。