Mysql主从延时图解方法

 更新时间:2022年01月20日 16:16:43   作者:人类幼崽养成记  
我们知道,一个服务器开放N个链接给客户端连接的,就会有大并发的更新操作,但是从服务器的里面读取binlog线程得仅有一个,当某个SQL在从服务器上执行的时间稍长 或由某个SQL要锁表就会导致主服务器的SQL大量积压,未被同步到从服务器,就导致了主从不一致,也就是主从延迟

1.忍受大法

第一种解决办法,很简单,无他,不管他,没有读到也没事。这时业务不需要任何改造,你好,我好,她也好~

如果业务对于数据一致性要求不高,我们就可以采用这种方案。

2.数据同步写方案

主从数据同步方案,一般都是采用的异步方式同步给备库。

我们可以将其修改为同步方案,主从同步完成,主库上的写才能返回。

  • 业务系统发起写操作,数据写主库
  • 写请求需要等待主从同步完成才能返回
  • 数据读从库,主从同步完成就能读到最新数据

这种方案,我们只需要修改数据库之间同步配置即可,业务层无需修改,相对简单。

「不过,由于主库写需要等待主从完成,写请求的时延将会增加,吞吐量将会降低。」

这一点对于现在在线业务,可能无法接受。

3.选择性强制读主

对于需要强一致的场景,我们可以将其的读请求都操作主库,这样「读写都在主库」,就没有不一致的情况。

这种方案业务层需要改造一下,将其强制性读主,相对改造难度较低。

不过这种方案相对于浪费了另一个数据库,增加主库的压力。

4.中间件选择路由法

这种方案需要使用一个中间件,所有数据库操作都先发到中间件,由中间件再分发到相应的数据库。

这时流程如下:

  • 写请求,中间件将会发到主库,同时记录一下此时写请求的 key(操作表加主键等)
  • 读请求,如果此时 key 存在,将会路由到主库
  • 一定时间后(经验值),中间件认为主从同步完成,删除这个 key,后续读将会读从库

这种方案,可以保持数据读写的一致。

但是系统架构增加了一个中间件,整体复杂度变高,业务开发也变得复杂,学习成本也比较高。

5.缓存路由大法

这种方案与中间件的方案流程比较类似,不过改造成本相对较低,不需要增加任何中间件。

这时流程如下:

  1. 写请求发往主库,同时缓存记录操作的 key,缓存的失效时间设置为主从的延时
  2. 读请求首先判断缓存是否存在
  • 若存在,代表刚发生过写操作,读请求操作主库
  • 若不存在,代表近期没发生写操作,读请求操作从库

这种方案相对中间件的方案成本较低,但是呢我们此时又引入一个缓存组件,所有读写之间就又多了一步缓存操作。

总结

我们引入主从架构,数据读写分离,目的是为了解决业务快速发展,请求量变大,并发量变大,从而引发的数据库的读瓶颈。

不过当引入新一个架构解决问题时,势必会带来另外一个问题,数据库读写分离之后,主从延迟从而导致数据不一致的情况。,

为了解决主从延迟,数据不一致的情况,我们可以采用以下这几种方案:

  • 忍受大法
  • 数据库同步写方案
  • 选择性强制读主
  • 中间件选择路由法
  • 缓存路由大法

到此这篇关于Mysql主从延时图解方法的文章就介绍到这了,更多相关Mysql主从延时 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 浅谈mysql导出表数据到excel关于datetime的格式问题

    浅谈mysql导出表数据到excel关于datetime的格式问题

    这篇文章主要介绍了浅谈mysql导出表数据到excel关于datetime的格式问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • MySQL 表分区步骤示例详解

    MySQL 表分区步骤示例详解

    MySQL表分区是一种数据库管理技术,用于将大型表拆分成更小、更可管理的分区(子表,这篇文章主要介绍了MySQL 表分区简介,需要的朋友可以参考下
    2023-09-09
  • mysql 8.0.27 安装配置方法图文教程(Windows64位)

    mysql 8.0.27 安装配置方法图文教程(Windows64位)

    这篇文章主要为大家详细介绍了mysql 8.0.27 下载、安装与配置图文教程,文中安装步骤介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • InnoDB 类型MySql恢复表结构与数据

    InnoDB 类型MySql恢复表结构与数据

    MySQL中.frm文件:保存了每个表的元数据,包括表结构的定义等,该文件与数据库引擎无关。MySQL中.ibd文件:InnoDB引擎开启了独立表空间(my.ini中配置innodb_file_per_table = 1)产生的存放该表的数据和索引的文件。
    2018-01-01
  • MySQL中的数据类型binary和varbinary详解

    MySQL中的数据类型binary和varbinary详解

    binary和varbinary与char和varchar类型有点类似,不同的是binary和varbinary存储的是二进制的字符串,而非字符型字符串。下面这篇文章主要给大家介绍了关于MySQL中数据类型binary和varbinary的相关资料,介绍的非常详细,需要的朋友可以参考学习。
    2017-07-07
  • 详解MySQL实现主从复制过程

    详解MySQL实现主从复制过程

    这篇文章主要为大家详细介绍了MySQL主从复制的实现过程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • CentOS6.4上使用yum安装mysql

    CentOS6.4上使用yum安装mysql

    这篇文章主要为大家详细介绍了CentOS6.4上使用yum安装mysql图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • 配置Mysql主从服务实现实例

    配置Mysql主从服务实现实例

    这篇文章主要介绍了配置Mysql主从服务实现实例的相关资料,需要的朋友可以参考下
    2017-05-05
  • mysql5.7.25使用全文检索功能的实例教程

    mysql5.7.25使用全文检索功能的实例教程

    其实全文检索在MySQL里面很早就支持了,下面这篇文章主要给大家介绍了关于mysql5.7.25使用全文检索功能的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-02-02
  • MySQL修改时间添加时间自动更新的两种方法

    MySQL修改时间添加时间自动更新的两种方法

    这篇文章主要介绍了MySQL修改时间添加时间自动更新的两种方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09

最新评论