MySQL主备延迟的原因

news2024/12/23 14:07:46

MySQL主备延迟的原因

在上篇文章中记录了一次由主备延迟导致的relay log打满磁盘的问题,结合林奇大佬的《MySQL是怎么保证高可用的?》,分析一下主备延迟的原因。

主备同步

主库和备库之间的同步流程如图所示:

  1. 在备库B 上通过change master命令,设置主库A的IP、端口、用户名、密码,以及要从哪个位置开始请求binlog,这个位置包含文件名和日志偏移量。
  2. 在备库B 上执行start slave命令,此时备库会启动两个线程,io_threadsql_thread。其中io_thread负责与主库建立连接。
  3. 主库A校验完用户名、密码后, 开始按照备库B 传过来的位置,从本地读取binlog,发给B。
  4. 备库B拿到binlog后,写到本地文件,称为中转日志relay log)。
  5. sql_thread 读取中转日志,解析出日志里的命令,回放执行。
    在这里插入图片描述

主备延迟

与数据同步相关的时间点主要包括以下三个:

  1. 主库A执行完成一个事务,写入binlog, 记为T1
  2. 传给备库B,B接收完这个binlog的时刻为T2
  3. 备库B 执行完这个事务,T3

主备延迟:同一个事务,在备库执行完成的时间和主库执行完成的时间之间的差值,T3-T1。
可以通过 执行:

SHOW SLAVE STATUS

查看seconds_behind_master,用于表示当前备库延迟了多少秒。
在这里插入图片描述
主备延迟的一个直观表现就是:备库中relay log被消费的速度远小于主库生成binlog的速度, 就会导致备库中relay log的积压,最后打满磁盘。

主备延迟的原因

  1. 早期,备库所在机器的性能和主库的性能不一致,导致备库处理relay log跟不上主库生成binlog的速度。现在基本主备的机器都一样,而且是对称部署。
  2. 备库压力过大, 主库负责写, 备库除了承担读的工作,还会执行一些后台运营的分析语句,但是实际工作中,大家对于主库的使用都很克制, 反而忽视了备库的压力控制,结果就是备库上的资源压力很大,影响了主备同步。
    • 应对措施: 采用一主多从的架构,就是有多个从库分担备库的压力,另外数据库需要定期全量备份数据,从库适合数据备份。
  3. 采取了一主多从的架构,还是会出现主备延迟,一般有两大原因:
    • 大事务, 根据同步的流程,主库执行完一个事务花费10分钟,然后再写入binlog,传给备库,备库在此期间只能等待10分钟。典型场景:一次性使用delete语句 删除大量数据。
      下图是产生问题的备库中relay log的大小,基本都是大事务。
      在这里插入图片描述

    • DDL,在DDL期间,在mysql 5.5版本之前会阻塞DML,使用Online DDL也会因为需要扫描原表数据和构建临时文件,都是非常耗时的操作。

总结

为了设计一个高可用的系统, MySQL引入了主备切换的机制,在主库出现问题时可以快速切换到备库提供服务。但是为了维持主备库之间数据的一致性的同步机制,又带来了新的问题,主备延迟。主备延迟带来的后果是多方面的,比如会反过来影响数据的一致性和可用性,relaylog的积压等等问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/683201.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

人脸考勤签到基础篇

目录 创建小程序底部Tab导航 开通腾讯云对象存储服务 一、静态资源要放在网上 二、为什么不选择阿里云或者华为云的对象存储服务? 二、开通腾讯云对象存储服务 三、存储静态资源 设计首页的英雄区和栏目导航 设计人脸签到页面 实现签到自拍功能 缓存系统常…

HTTP调用:你考虑到超时、重试、并发了吗?

今天,我们一起聊聊进行 HTTP 调用需要注意的超时、重试、并发等问题。 与执行本地方法不同,进行 HTTP 调用本质上是通过 HTTP 协议进行一次网络请求。网络请求必然有超时的可能性,因此我们必须考虑到这三点: 首先,框架…

单例模式(Singleton)

定义 单例是一种创建型设计模式,让你能够保证一个类只有一个实例,并提供一个访问该实例的全局节点。 前言 1. 问题 单例模式同时解决了两个问题,所以违反了单一职责原则: 保证一个类只有一个实例。为该实例提供一个全局访问节…

react签字功能 react-signature-canvas

react签字功能 react-signature-canvas . 前几天一个月薪35k的兄弟,给我推了一个人工智能学习网站,看了一段时间挺有意思的。包括语音识别、机器翻译等从基础到实战都有,很详细,分享给大家。大家及时保存,说不定啥时…

【MOOC 作业】第4章 网络层

不是标答也不是参考答案 仅从个人理解出发去做题 1、(20分) 考虑如图示的网络。 a. 假定网络是一个数据报网络。显示路由器 A 中的转发表,其中所有指向主机 H3 的流量通过接口 3 转发。 目的网络链路接口H33 b. 假定网络是一个数据报网络。你能写出路由器 A 中的…

K8S系列文章之 部署MySQL数据库

1 编写 mysql.yaml文件 apiVersion: v1 kind: Namespace metadata:name: devops # Namespace 的名称 --- apiVersion: apps/v1 kind: Deployment metadata:name: devops-mysql # deployment控制器名称namespace: devops spec:replicas: 1revisionHistoryLimit: 5strategy:…

Maven及IDEA配置

1.Maven的安装及环境变量配置 1. 下载压缩包,解压到指定位置; 2. 在系统环境变量中配置 maven 的 bin 路径; 3. 配置一下 maven 的本地仓库位置和阿里云镜像(推荐大家下载 notepad 进行修改配置); 在 …

Mysql高阶语句与MySQL存储过程

Mysql高阶语句 准备环境(1) 一、MySQL高阶进阶SQL语句1、select2、distinct3、where4、and or5、in6、between7、通配符8、order by9、函数数学函数字符串函数 10、group by11、having12、别名13、子查询13、EXISTS 二、MySQL高阶进阶SQL语句2环境准备&a…

DINDIEN

DIEN模型 DIN存在的问题: DIN引入了attention机制来通过用户历史行为数据对用户兴趣进行建模,而缺乏对具体行为背后的序列信息或者说依赖关系进行专门的建模,也就是没法捕捉到用户的兴趣变化过程。 DIEN的改动: 这个模型既然是…

为什么黑客不黑/攻击赌博网站?

攻击了,只是你不知道而已! 同样,对方也不会通知你,告诉你他黑了赌博网站。 攻击赌博网站的不一定是正义的黑客,也可能是因赌博输钱而误入歧途的法外狂徒。之前看过一个警方破获的真实案件:28岁小伙因赌博…

Vue3 组合式 API

前言 传统的组件随着业务复杂度越来越高,代码量会不断的加大,整个代码逻辑都不易阅读和理解。Vue3 使用组合式 API 的地方为 setup。在 setup 中,我们可以按逻辑关注点对部分代码进行分组,然后提取逻辑片段并与其他组件共享代码。…

【FFmpeg实战】编解码 AVCodec

转载自:https://www.cnblogs.com/wangyaoguo/p/8192273.html FFmpeg编解码 FFmpeg支持绝大多数视频编解码格式,如何遍历FFmpeg编解码器? 编解码器以链表形式存储,使用av_codec_next() 函数可以获取编解码器指针,当参数…

【YOLO】yolov5训练自己的数据集

文章目录 0 前期教程1 前言2 准备数据集2.1 数据集来源2.2 数据集结构介绍2.3 标签格式的转换 3 训练以及训练结果3.1 训练3.2 测试 4 数据标注5 后续教程 0 前期教程 【Python】朴实无华的yolov5环境配置 1 前言 上面前期教程中,大致介绍了yolov5开发环境的配置方…

Windows 10 安装 Redis

安装 Redis 1:下载 下载 Windows 版本的 Redis,点击这里 下载redis 2:解压 解压下载的 zip 包到任意目录,如我的目录: 3:启动 命令行进入刚才解压文件的根目录下,然后执行如下命令即可&a…

跌倒检测 关节点角度数学计算

参考: https://github.com/GitGudwl/MediapipePoseEstimationForFallDetection/tree/main https://blog.csdn.net/weixin_45824067/article/details/130646962 1、mediapipe 根据关节点角度计算 1、11与12取中间点,记为center_up; 23 与24取中间点记为c…

为什么自学Python会从入门到放弃?

前言 Python现在非常火,语法简单而且功能强大,很多同学都想学Python!所以蛋糕给各位看官们准备了高价值Python学习视频教程及相关电子版书籍,欢迎前来领取! 下面小编与大家分享一下自学Python的人,放弃的…

【unity造轮子】Unity ShaderGraph使用教程与各种特效案例(持续更新)

文章目录 一、前言二、ShaderGraph1.什么是ShaderGraph2.在使用ShaderGraph时需要注意以下几点:3.优势4.项目 三、实例效果外发光进阶:带方向的菲涅尔边缘光效果裁剪进阶 带边缘色的裁剪溶解进阶 带边缘色溶解卡通阴影水波纹积雪效果不锈钢效果UV抖动水波…

使用编码工具

本文主要介绍了对句子编码的过程,以及如何使用PyTorch中自带的编码工具,包括基本编码encode()、增强编码encode_plus()和批量编码batch_encode_plus()。 一.对一个句子编码例子 假设想在要对句子’the quick brown fox jumps over a lazy dog’进行编码…

【K8S系列】深入解析K8S存储

序言 做一件事并不难,难的是在于坚持。坚持一下也不难,难的是坚持到底。 文章标记颜色说明: 黄色:重要标题红色:用来标记结论绿色:用来标记一级论点蓝色:用来标记二级论点 Kubernetes (k8s) 是一…

ppp协议,一文带你了解

一、PPP协议简介 PPP(Point-to-Point Protocol)是一种数据链路层协议,用于在两个节点之间建立点对点的数据通信连接。PPP协议是TCP/IP协议族中的一员,它可以在串行通信线路上传输IP数据包,支持多种网络层协议&#xff…