今天我们就来看看为什么会产生主从延迟以及主从延迟如何处理等相关问题。

坐好了,准备发车!

主从常见架构

随着日益增长的访问量,单台数据库的应接能力已经捉襟见肘。因此采用主库写数据,从库读数据这种将读写分离开的主从架构便随之衍生了出来。

在生产环境中,常见的主从架构有很多种,在这里给大家介绍几种比较常见的架构模式。

主从复制原理

了解了主从的基本架构及相关配置后,下面就要进入正题了。

对于主从来说,通常的操作是主库用来写入数据,从库用来读取数据。这样的好处是通过将读写压力分散开,避免了所有的请求都打在主库上。同时通过从库进行水平扩展使系统的伸缩性及负载能力也得到了很大的提升。

但是问题就来了,读从库时的数据要与主库保持一致,那就需要主库的数据在写入后同步到从库中。如何保持主库与从库的数据一致性,主库又是通过什么样的方式将数据实时同步到从库的?

基本原理

Mysql 中主从复制时有两个很重要的日志文件:

binlog(二进制日志文件)

relay log(中继日志文件)

在主从同步的过程中,主库会将所有的操作事件记录在 binlog 中,从库通过开启一个 I/O 线程保持与主库的通信,并在一定时间间隔内探测 binlog 日志文件是否发生改变。如果 binlog 日志发生了变化,主库生成一个 binlog dump 线程向从库 I/O 线程传送 binlog。从库上的 I/O 线程将 binlog 复制到自己的 relay log 中。最终由从库中的 SQL 线程读取 relay log 中的事件重放到从库上。

主从延迟原因

上面的流程我们已经知道了主从复制的相关过程了,但是主库有更新就会同步从库,那为什么会出现主从延迟的情况呢?

随机重放

Mysql 主库中写 binlog 的操作是顺序写的,之前我们提到过,磁盘的顺序读写速度是很快的。同样的,从库中的 I/O 线程操作日志的速度效率也是很高的。但是别忘了,还有一个 SQL 线程来进行数据重放,而重放的过程是随机写盘的。到这里你应该就明白了吧,某一时刻 relay log 里的数据来不及重放进从库,就会产生主从延迟的情况。

主库并发高

知道了从库中 SQL 线程的重放情况,对于主库并发高导致主从延迟肯定就不难理解了。某一时刻,大量写请求打到主库上,意味着要不断对 binlog 进行写入,此时从库中的 SQL 线程就会应接不暇,自然会产生主从延迟。

锁等待

对于 SQL 单线程来说,当遇到阻塞时就会一直等待,直到执行成功才会继续进行。如果某一时刻从库因为查询产生了锁等待的情况,此时只有当前的操作执行完成后才会进行下面的操作,同理也就产生了主从延迟的情况。

主从延迟处理

知道了主从延迟的原因,接下来我们看看如何来进行处理。

并行复制

既然 SQL 单线程进行重放时速度有限,那么能不能采用多线程的方式来进行重放呢?MySQL 5.6 版本后,提供了一种并行复制的方式,通过将 SQL 线程转换为多个 work 线程来进行重放,这样就解决了主从延迟的问题。

降低主库并发

你可能会说了,我现在用的低版本的数据库,也没法升版本啊,那我怎么整。对于主库并发高的情况,这种方式你只能通过控制并发来解决延迟了,多用用 Redis。

读主库

这种情况你肯定不陌生,对于一些实时性要求比较高的数据,你总不能读从库去拿吧,万一延迟个大半天,你不得贡献自己的年终奖啊。

总结

主从复制原理

主从复制中有两个很重要的日志文件,binlog和relay log,分别位于主库与从库中。其中 binlog 是主从复制的基础,通过将操作事件写入 binlog 通过 I/O 线程传送至从库进行同步。

主从延迟原因

从库中 SQL 线程重放的过程是随机写盘的,并且 SQL 线程是单线程的,因此数据来不及重放的话就会导致主从延迟。

主库并发高会导致写操作不断写入 binlog,对于 SQL 线程说可能会应接不暇,也会产生主从延迟。

重放过程中如果遇到锁等待也是产生延迟的原因之一。

主从延迟处理

MySQL 5.6版本以后通过并行复制的方式来解决 SQL 单线程产生的主从延迟问题。对于低版本来说,可以通过降低主库的并发来解决。如果对数据实时性要求比较严格的话,可以通过读主库来达到目的。

以上就是MySQL主从延迟问题解决的详细内容,更多关于MySQL主从延迟的资料请关注云海天教程其它相关文章!

mysql主从延时这么长_MySQL主从延迟问题解决相关推荐

  1. mysql主从复制延时性问题_MySQL主从同步延迟原因及解决办法

    MySQL主从延迟原因以及解决方案:谈到MySQL数据库主从同步延迟原理,得从mysql的数据库主从复制原理说起,mysql的主从复制都是单线程的操作(mysql5.6版本之前),主库对所有DDL和D ...

  2. mysql主从延迟时间是多少_MySQL主从延迟

    1. 主从同步的延迟的原因 我们知道, 一个服务器开放N个链接给客户端来连接的, 这样有会有大并发的更新操作, 但是从服务器的里面读取binlog 的线程仅有一个, 当某个SQL在从服务器上执行的时间 ...

  3. mysql主从延迟时间是多少_MySQL主从同步个般是多久的延迟?

    原标题:MySQL主从同步个般是多久的延迟? 这次单独调查一下主从延迟的时间.这里说的主从延迟,并不是指"从库更新性能跟不上主库", 而是"一个命令从主库更新完成到从库更 ...

  4. MySQL主从延时这么长,要怎么优化

    点击上方"java全栈技术"关注,每天学习一个java知识点 原创: 58沈剑 MySQL主从复制,读写分离是互联网常见的数据库架构,该架构最令人诟病的地方就是,在数据量较大并发量 ...

  5. MySQL主从延时这么长,要怎么优化?

    MySQL主从复制,读写分离是互联网常见的数据库架构,该架构最令人诟病的地方就是,在数据量较大并发量较大的场景下,主从延时会比较严重. 为什么主从延时这么大? 答:MySQL使用单线程重放RelayL ...

  6. MySQL主从延时这么长,怎么优化?

    点击▲关注 "数据和云"   给公众号标星置顶 更多精彩 第一时间直达 MySQL主从复制,读写分离是互联网常见的数据库架构,该架构最令人诟病的地方就是,在数据量较大并发量较大的场 ...

  7. mysql主从修改系统参数步骤_mysql主从配置的参数配置与步骤_MySQL

    mysql主从配置的参数配置与步骤_MySQL 主从配置的步骤: 在主库建立要同步的数据库,建立主库的帐号和修改主备库配置 create database web default character ...

  8. mysql主从配置 热备_MYSQL 主从热备方式配置

    MySQL数据库没有增量备份的机制,当数据量太大的时候备份是一个很大的问题.还好MySQL数据库提供了一种主从备份的机制,其实就是把主数据库的所有的数据同时写到备份数据库中.实现MySQL数据库的热备 ...

  9. android rtsp 延时,ijkplayer 单视频流直播延迟问题解决过程

    一开始我尝试是通过设置ijkplayer的参数去修改延迟,参数的修改能把ijkplayer的开播延迟拉到200ms左右,但是随着播放时间增加延迟也在增加,然后带着问题去网上寻找答案,找到暴走大牙和Go ...

最新文章

  1. linux抓源地址,【Linux】apt-get 源地址汇总
  2. 贷款不还会有什么后果?
  3. keras框架实现手写数字识别
  4. (原创)优酷androidclient 下载中 bug 解决
  5. (三)Appium-desktop 打包
  6. ajax响应不显示值,Ajax响应200正常,但显示未能加载响应数据
  7. php curl 客户端,PHP易用的http客户端:curlpp
  8. linux下面实时查看进程,内存以及cpu使用情况使用命令
  9. Java并发(基础知识)—— 创建、运行以及停止一个线程
  10. SIGKDD2021 | 淘宝搜索向量化召回实践
  11. 使用chrome console检查css selector/xpath的有效性|百度云盘如何获取文件库中的目录文字
  12. 白光led 计算机模拟,高显色指数LED白光的色度学模拟方法研究
  13. LeetCode刷题(158)~从尾到头打印链表【递归|辅助栈】
  14. Oracle中打印99乘法表的13种方法
  15. css 实现三维立体旋转效果
  16. MediaPlayer( 媒体播放器),TelephonyManager(电话管理类),MediaRecorder(媒体录音机)
  17. 血战上海滩实现无限血量外挂编写
  18. 树莓派4B入门及应用
  19. Startup通过3D打印制造更便宜、更轻的火箭 | 广东省智能创新协会
  20. 《工程电磁场导论》课后习题附答案

热门文章

  1. 使用Gradle将JAR工件发布到Artifactory
  2. 小程序二级页面tabbar_小程序页面推广踩坑记
  3. 单片机蜂鸣器编程音乐_基于单片机的智能鱼缸温控系统设计
  4. java获取文件夹 路径,Java获取文件的路径
  5. 统信uos系统考试题_离Windows更近一步!微信Linux原生版上线:国产统信UOS系统已适配...
  6. cup过高是什么意思_做青和焙火有什么关系?
  7. python哪个方向简单_现在学Python,哪个方向最简单?哪个方向最吃香 ?
  8. 建立能持续处理请求的Server端改造
  9. mysql多实例主从_window 下 mysql 单机多实例以及主从同步
  10. 依赖: ros-melodic-desktop 但是它将不会被安装_npm系列之依赖管理