返回顶部
首页 > 资讯 > 数据库 >主从延迟的原因是什么
  • 266
分享到

主从延迟的原因是什么

2024-04-02 19:04:59 266人浏览 八月长安
摘要

本篇内容介绍了“主从延迟的原因是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 前言在实际的

本篇内容介绍了“主从延迟的原因是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

 主从延迟的原因是什么

前言

在实际的生产环境中,由单台Mysql作为独立的数据库是完全不能满足实际需求的,无论是在安全性,高可用性以及高并发等各个方面。

因此,一般来说都是通过集群主从复制(Master-Slave)的方式来同步数据,再通过读写分离(mysql-Proxy)来提升数据库并发负载能力进行部署与实施。

总结MySQL主从集群带来的作用是:

  • 提高数据库负载能力,主库执行读写任务(增删改),备库仅做查询。

  • 提高系统读写性能、可扩展性和高可用性。

  • 数据备份与容灾,备库在异地,主库不存在了,备库可以立即接管,无须恢复时间。

主从延迟的原因是什么

说到主从同步,离不开binlog这个东西,先介绍下binlog吧!

biglog

binlog是什么?有什么作用?

用于记录数据库执行的写入性操作(不包括查询)信息,以二进制的形式保存在磁盘中。可以简单理解为记录的就是sql语句

binlog 是 mysql 的逻辑日志,并且由 Server层进行记录,使用任何存储引擎的 mysql 数据库都会记录 binlog 日志

在实际应用中, binlog 的主要使用场景有两个:

  • 用于主从复制,在主从结构中,binlog 作为操作记录从 master 被发送到 slave,slave服务器从 master 接收到的日志保存到  relay log 中。

  • 用于数据备份,在数据库备份文件生成后,binlog保存了数据库备份后的详细信息,以便下一次备份能从备份点开始。

日志格式

binlog 日志有三种格式,分别为 STATMENT 、 ROW 和 MIXED

在 MySQL 5.7.7 之前,默认的格式是 STATEMENT , MySQL 5.7.7 之后,默认值是 ROW

日志格式通过 binlog-fORMat 指定。

  • STATMENT :基于 SQL 语句的复制,每一条会修改数据的sql语句会记录到 binlog 中

  • ROW :基于行的复制

  • MIXED :基于 STATMENT 和 ROW 两种模式的混合复制,比如一般的数据操作使用 row 格式保存,有些表结构的变更语句,使用  statement 来记录

我们还可以通过mysql提供的查看工具mysqlbinlog查看文件中的内容,例如:

mysqlbinlog mysql-bin.00001 | more

binlog文件大小和个数会不断的增加,后缀名会按序号递增,例如mysql-bin.00002等。

主从复制原理

主从延迟的原因是什么

可以看到mysql主从复制需要三个线程:master(binlog dump thread)、slave(I/O thread 、SQL  thread)

  • binlog dump线程: 主库中有数据更新时,根据设置的binlog格式,将更新的事件类型写入到主库的binlog文件中,并创建log  dump线程通知slave有数据更新。当I/O线程请求日志内容时,将此时的binlog名称和当前更新的位置同时传给slave的I/O线程。

  • I/O线程: 该线程会连接到master,向log dump线程请求一份指定binlog文件位置的副本,并将请求回来的binlog存到本地的relay  log中。

  • SQL线程: 该线程检测到relay log有更新后,会读取并在本地做redo操作,将发生在主库的事件在本地重新执行一遍,来保证主从数据同步。

基本过程总结

  1. 鸿蒙官方战略合作共建——HarmonyOS技术社区

  2. 主库写入数据并且生成binlog文件。该过程中MySQL将事务串行的写入二进制日志,即使事务中的语句都是交叉执行的。

  3. 在事件写入二进制日志完成后,master通知存储引擎提交事务。

  4. 从库服务器上的io线程连接Master服务器,请求从执行binlog日志文件中的指定位置开始读取binlog至从库。

  5. 主库接收到从库的IO线程请求后,其上复制的IO线程会根据Slave的请求信息分批读取binlog文件然后返回给从库的IO线程。

  6. Slave服务器的IO线程获取到Master服务器上IO线程发送的日志内容、日志文件及位置点后,会将binlog日志内容依次写到Slave端自身的Relay  Log(即中继日志)文件的最末端,并将新的binlog文件名和位置记录到master-info文件中,以便下一次读取master端新binlog日志时能告诉Master服务器从新binlog日志的指定文件及位置开始读取新的binlog日志内容。

  7. 从库服务器的SQL线程会实时监测到本地Relay  Log中新增了日志内容,然后把RelayLog中的日志翻译成SQL并且按照顺序执行SQL来更新从库的数据。

  8. 从库在relay-log.info中记录当前应用中继日志的文件名和位置点以便下一次数据复制。

并行复制

在MySQL 5.6版本之前,Slave服务器上有两个线程I/O线程和SQL线程。

I/O线程负责接收二进制日志,SQL线程进行回放二进制日志。如果在MySQL  5.6版本开启并行复制功能,那么SQL线程就变为了coordinator线程,coordinator线程主要负责以前两部分的内容

主从延迟的原因是什么

上图的红色框框部分就是实现并行复制的关键所在

这意味着coordinator线程并不是仅将日志发送给worker线程,自己也可以回放日志,但是所有可以并行的操作交付由worker线程完成。

coordinator线程与worker是典型的生产者与消费者模型。

主从延迟的原因是什么

不过到MySQL  5.7才可称为真正的并行复制,这其中最为主要的原因就是slave服务器的回放与主机是一致的即master服务器上是怎么并行执行的slave上就怎样进行并行回放。不再有库的并行复制限制,对于二进制日志格式也无特殊的要求。

为了兼容MySQL 5.6基于库的并行复制,5.7引入了新的变量slave-parallel-type,其可以配置的值有:

  • DATABASE:默认值,基于库的并行复制方式

  • LOGICAL_CLOCK:基于组提交的并行复制方式

下面分别介绍下两种并行复制方式

按库并行

每个 worker 线程对应一个 hash  表,用于保存当前正在这个worker的执行队列里的事务所涉及到的库。其中hash表里的key是数据库名,用于决定分发策略。该策略的优点是构建hash值快,只需要库名,同时对于binlog的格式没有要求。

但这个策略的效果,只有在主库上存在多个DB,且各个DB的压力均衡的情况下,这个策略效果好。因此,对于主库上的表都放在同一个DB或者不同DB的热点不同,则起不到多大效果。

主从延迟的原因是什么

组提交优化

该特性如下:

  1. 鸿蒙官方战略合作共建——HarmonyOS技术社区

  2. 能够同一组里提交的事务,定不会修改同一行;

  3. 主库上可以并行执行的事务,从库上也一定可以并行执行。

具体是如何实现的:

  1. 鸿蒙官方战略合作共建——HarmonyOS技术社区

  2. 在同一组里面一起提交的事务,会有一个相同的commit_id,下一组为commit_id+1,该commit_id会直接写到binlog中;

  3. 在从库使用时,相同commit_id的事务会被分发到多个worker并行执行,直到这一组相同的commit_id执行结束后,coordinator再取下一批。

更详细内容可以去官网看看:https://dev.mysql.com/doc/refman/5.7/en/replication-options-slave.html

下面开始介绍主从延时

主从延迟

主从延迟是怎么回事?

根据前面主从复制的原理可以看出,两者之间是存在一定时间的数据不一致,也就是所谓的主从延迟。

我们来看下导致主从延迟的时间点:

  • 主库 A 执行完成一个事务,写入 binlog,该时刻记为T1.

  • 传给从库B,从库接受完这个binlog的时刻记为T2.

  • 从库B执行完这个事务,该时刻记为T3.

那么所谓主从延迟,就是同一个事务,从库执行完成的时间和主库执行完成的时间之间的差值,即T3-T1。

我们也可以通过在从库执行show slave status,返回结果会显示seconds_behind_master,表示当前从库延迟了多少秒。

seconds_behind_master如何计算的?

  • 每一个事务的binlog都有一个时间字段,用于记录主库上写入的时间

  • 从库取出当前正在执行的事务的时间字段,跟当前系统的时间进行相减,得到的就是seconds_behind_master,也就是前面所描述的T3-T1。

主从延迟原因

为什么会主从延迟?

正常情况下,如果网络不延迟,那么日志从主库传给从库的时间是相当短,所以T2-T1可以基本忽略。

最直接的影响就是从库消费中转日志(relaylog)的时间段,而造成原因一般是以下几种:

1、从库的机器性能比主库要差

比如将20台主库放在4台机器,把从库放在一台机器。这个时候进行更新操作,由于更新时会触发大量读操作,导致从库机器上的多个从库争夺资源,导致主从延迟。

不过,目前大部分部署都是采取主从使用相同规格的机器部署。

2、从库的压力大

按照正常的策略,读写分离,主库提供写能力,从库提供读能力。将进行大量查询放在从库上,结果导致从库上耗费了大量的CPU资源,进而影响了同步速度,造成主从延迟。

对于这种情况,可以通过一主多从,分担读压力;也可以采取binlog输出到外部系统,比如hadoop,让外部系统提供查询能力。

3、大事务的执行

一旦执行大事务,那么主库必须要等到事务完成之后才会写入binlog。

比如主库执行了一条insert …  select非常大的插入操作,该操作产生了近几百G的binlog文件传输到只读节点,进而导致了只读节点出现应用binlog延迟。

因此,DBA经常会提醒开发,不要一次性地试用delete语句删除大量数据,尽可能控制数量,分批进行。

4、主库的DDL(alter、drop、create)

1、只读节点与主库的DDL同步是串行进行,如果DDL操作在主库执行时间很长,那么从库也会消耗同样的时间,比如在主库对一张500W的表添加一个字段耗费了10分钟,那么从节点上也会耗费10分钟。

2、从节点上有一个执行时间非常长的的查询正在执行,那么这个查询会堵塞来自主库的DDL,表被,直到查询结束为止,进而导致了从节点的数据延迟。

5、锁冲突

锁冲突问题也可能导致从节点的SQL线程执行慢,比如从机上有一些select .... for update的SQL,或者使用了MyISAM引擎等。

6、从库的复制能力

一般场景中,因偶然情况导致从库延迟了几分钟,都会在从库恢复之后追上主库。但若是从库执行速度低于主库,且主库持续具有压力,就会导致长时间主从延迟,很有可能就是从库复制能力的问题。

从库上的执行,即sql_thread更新逻辑,在5.6版本之前,是只支持单线程,那么在主库并发高、TPS高时,就会出现较大的主从延迟。

因此,MySQL自5.7版本后就已经支持并行复制了。可以在从服务上设置  slave_parallel_workers为一个大于0的数,然后把slave_parallel_type参数设置为LOGICAL_CLOCK,这就可以了

mysql> show variables like 'slave_parallel%'; +------------------------+----------+ | Variable_name          | Value    | +------------------------+----------+ | slave_parallel_type    | DATABASE | | slave_parallel_workers | 0        | +------------------------+----------+

怎么减少主从延迟

主从同步问题永远都是一致性和性能的权衡,得看实际的应用场景,若想要减少主从延迟的时间,可以采取下面的办法:

降低多线程大事务并发的概率,优化业务逻辑

优化SQL,避免慢SQL,减少批量操作,建议写脚本以update-sleep这样的形式完成。

提高从库机器的配置,减少主库写binlog和从库读binlog的效率差。

尽量采用短的链路,也就是主库和从库服务器的距离尽量要短,提升端口带宽,减少binlog传输的网络延时。

实时性要求的业务读强制走主库,从库只做灾备,备份。

“主从延迟的原因是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

您可能感兴趣的文档:

--结束END--

本文标题: 主从延迟的原因是什么

本文链接: https://lsjlt.com/news/61551.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 主从延迟的原因是什么
    本篇内容介绍了“主从延迟的原因是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 前言在实际的...
    99+
    2024-04-02
  • MySQL主从复制延迟原因是什么
    本篇内容主要讲解“MySQL主从复制延迟原因是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL主从复制延迟原因是什么”吧! ...
    99+
    2024-04-02
  • MySQL主从同步延迟的原因是什么
    这期内容当中小编将会给大家带来有关MySQL主从同步延迟的原因是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。MySQL主从延迟原因以及解决方案:谈到MySQL数据库...
    99+
    2024-04-02
  • mysql主从复制延迟原因
    造成 mysql 主从复制延迟的原因包括:网络问题、硬件限制、重复事件、慢查询、并发冲突、特定数据库引擎限制、日志文件大小、临时表、lock_timeout 变量和并行复制滞后。 My...
    99+
    2024-08-01
    mysql 网络问题
  • 主从复制延迟原因剖析!
    写在前面:之前在维护线上主从复制架构的时候,遇到了一些主从延迟问题,笔者呢,也是比较好学的,哈哈!所以,查阅了诸多资料,然后去其糟粕,根据自己的理解和查阅的资料整理成了本文,在此申明,本文内容是笔者自己的理...
    99+
    2024-04-02
  • mysql主从延迟的概念是什么
    这篇文章主要介绍了mysql主从延迟的概念是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇mysql主从延迟的概念是什么文章都会有所收获,下面我们一起来看看吧。MySQL内建的复制功能是构建大型、高性能应用...
    99+
    2023-06-27
  • MySQL主从延迟原因以及解决方案
    1.MySQL数据库主从同步延迟原理。    谈到MySQL数据库主从同步延迟原理,得从mysql的数据库主从复制原理说起,mysql的主从复制都是单线程的操作(mysql5....
    99+
    2024-04-02
  • MySQL从库复制延迟的原因
    本篇内容介绍了“MySQL从库复制延迟的原因”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、从库复制延迟问题可能的原因如下(1)主从服务器...
    99+
    2023-06-06
  • ip代理高延迟的原因是什么
    这篇文章主要为大家展示了“ip代理高延迟的原因是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“ip代理高延迟的原因是什么”这篇文章吧。1、自身网环境问题,当自己的局域网环境发生波动时,那么局...
    99+
    2023-06-15
  • MySQL主从同步延迟的原因及解决办法
    由于历史原因,MySQL复制基于逻辑的二进制日志,而非重做日志。多次被问到何时MySQL能支持基于物理的复制,其实这就看MySQL各位大佬的想法。上次和赖老师脑暴,倏地说道:MySQL会不会来个基于Paxo...
    99+
    2024-04-02
  • 主从同步的延迟问题、原因及解决方案
    主从同步的延迟问题、原因及解决方案 MySQL的主从同步在实际使用过程中会有从库延迟的问题,那么为什么会有这种问题呢 如何避免这种问题呢 情况一: 从服务器配置过低导致延迟 这类延迟场景的出现往往是主节点拥有较大规格的配置,而只...
    99+
    2023-08-31
    数据库 服务器 mysql Powered by 金山文档
  • MySQL主从复制延迟原因以及解决方案
    来源:公众号「神谕的暗影长廊」 在异步或半同步的复制结构中,从库出现延迟是一件十分正常的事。 虽出现延迟正常,但是否需要关注,则一般是由业务来评估。 如:从库上有需要较高一致性的读业务,并且要求延迟小于某个值,那么...
    99+
    2022-05-16
    MySQL 主从复制 MySQL 主从复制延迟 MySQL 主从复制延迟解决
  • 【MySQL】MySQL主从同步延迟原因与解决方案
    文章目录 一、MySQL数据库主从同步延迟产生的原因二、关于DDL和DML三、主从延时排查方法四、解决方案3.1 解决从库复制延迟的问题:3.2 MySql数据库从库同步其他问题及解决方案 一、MySQL数据库主从同步延迟产...
    99+
    2023-08-19
    mysql 数据库 sql
  • 影响MySQL主从延迟的因素有哪些
    这篇文章主要介绍了影响MySQL主从延迟的因素有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 1.主库写...
    99+
    2024-04-02
  • 免费ip代理延迟那么高的原因是什么
    这篇文章将为大家详细讲解有关免费ip代理延迟那么高的原因是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。许多用户在购买代理IP后,在使用过程中发现延迟高这一问题,延迟高也就是说,网络会变得非常卡,尤其...
    99+
    2023-06-20
  • 美国服务器网速延迟高的原因是什么
    美国服务器网速延迟高的原因可能包括以下几点: 网络拥堵:美国是全球网络使用量最大的国家之一,网络拥堵可能导致服务器响应速度变慢。 ...
    99+
    2024-04-09
    美国服务器 服务器
  • redis主从延迟怎么解决
    redis主从复制延迟的解决方法:排查网络问题,确保主从节点间网络连接稳定。适当增加主节点的“repl_backlog_size”参数,扩大复制积压缓冲区。优化主从节点配置,分配充足资源...
    99+
    2024-05-21
    redis 网络问题
  • 美国服务器网络延迟高是什么原因
    美国服务器网络延迟高的原因是:1、服务器链路中路由转发进程过多导致;2、美国服务器带宽不足导致;3、美国服务器配置问题导致服务器性能不够,从而影响网络速度;4、美国服务器管理不善,导致出现大量垃圾文件影响服务器速度;5、美国服务器正在遭受大...
    99+
    2024-04-02
  • 更新使用HTTP代理出现延迟的原因是什么
    这篇文章主要讲解了“更新使用HTTP代理出现延迟的原因是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“更新使用HTTP代理出现延迟的原因是什么”吧!为何代理IP会有延迟?在使用http之...
    99+
    2023-06-20
  • 亚马逊服务器延迟高的原因是什么引起的
    如果您在使用亚马逊云平台时遇到了服务器延迟高的问题,可以尝试以下几种解决方案: 1.检查服务器硬件是否出现故障,如是否有可用备件、是否需要维修等。 2.检查服务器负载均衡器和网络设置,确保它们可以有效地分发流量并避免负载不均衡的情况。 3....
    99+
    2023-10-27
    亚马逊 原因 服务器
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作