MySQL是怎么保证高可用的?

主备延迟

主备数据一致的基本步骤是:

1.主库完成事务,写入binlog,T1

2.备库接收主库发过来的binlog,T2

3.备库执行完成该事务,T3

T3-T1即主备延迟,通过参数seconds_behind_master可以查看。

备库在取出binlog时,会计算其记录的写入时间与当前系统时间的差值,这是seconds_behind_master的计算方法。

备库在连接主库时会检查这个差值,如果备库和主库之间的时间有差别,计算seconds_behind_master时会扣掉这个差值。

主备数据一致中,第二步是较快的,所以产生延迟的原因是第三步比第一步慢,也就是备库消费中转日志比主库执行事务并生成binlog慢。

主备延迟的原因

1.备库的机器性能比主库可能要差

因为主库直接与业务相关,而备库没有请求,所以很多人在部署时就会选择让主库的性能好一点,备库差一点没关系

2.备库的压力大

主库提供了写能力,备库就可以用来提供读能力,或者一些分析语句选择在备库上跑。

处理方法就是一主多从提高从库处理能力。

3.大事务

当主库执行一个大事务,假设执行了10分钟才完成,这样主备延迟就至少有10分钟。

预防方法就是尽量不用执行大事务。

因为有主备延迟的存在,所以主备切换时可以选择不同的策略。

双M架构主备切换时的策略

A是主库,B是备库(readonly),请求都发在A上。

此时要进行主备切换,也就是让A变成readonly,让B变成不是readonly,然后请求都发在B上。

1.可靠性原则

如果是可靠性为首要的,也就是数据不能丢失,不能数据不一致,那么就会印象可用性。

首先要等到seconds_behind_master值小于一个值时(如5s)把A设置成readonly,再等到seconds_behind_master=0时也就是主备数据一致时再把B的readonly设置成false,然后让请求都发到B上面。

等到sbm小于一个值再把A设置成readonly是为了后面尽量少等一点。

可以看到从把A设置成readonly到把B设置为非readonly期间这两个库都是readonly的,请求就无法处理。

2.可用性原则

如果以可用性作为最重要的部分,那么就要容忍可能的数据不一致问题。

直接让A变成readonly,然后让B变成非eadonly,将请求发给B。后续B再慢慢执行中转日志

但是如果在binlog的格式是statement或者mixup时,在B执行中转日志前,客户端就发来请求,就会导致数据不一致。因为statement或者mixup记录的是sql语句,如果执行一条insert语句,通常是不会填写主键的,这样就会导致本来应该在主库和备库的同一条数据,变成了主键id不同的两条数据

但是binlog格式是row的话就能直接发现这个数据不一致,因为row格式会记录主库插入这条数据之后的完整数据。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Spring 配置绑定原理分析

Spring 配置绑定原理分析 前言 Spring 应用中存在诸多配置,有的是系统配置,有的命令行启动参数配置,有的是yaml配置,有的是分布式配置中心配置,但对使用者而言总是可以通过ConfigurationProperties将它关联到一个Java…

爬虫下载网页文夹

爬虫下载网页pdf文件 import os import requests from bs4 import BeautifulSoup from urllib.parse import urljoin from urllib.parse import urljoin, unquote from tqdm import tqdm # 设置网页的URL base_url "http://119/download/dzz/pdf/"# 创建保存文件的…

数据结构-归并排序笔记

【数据结构】八大排序(超详解附动图源码)_数据结构排序-CSDN博客 看这个学思路 一 归并排序介绍: 归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解&#xf…

编译器优化乌龙——记一次死循环不进入问题

记一次死循环不生效问题 看如下代码,本意是我们模拟一次死循环,然后会在中断处理函数中更改waiting的值,更改waiting的值后,跳出死循环。 int waiting 0; while(waiting0){}运行起来发现,程序根本就没有进入这个死循…

构建第一个ArkTs应用

1、新建第一个页面文件。在“Project”窗口,点击“entry > src > main > ets > pages”,打开“Index.ets”文件,进行页面的编写。 2、新建第二个页面文件。在“Project”窗口,打开“entry > src > main > e…

一文搞懂Linux kernel编译步骤

一、前言 什么是Linux的内核编译呢?简单来说,Linux内核编译是一个将内核源代码转换成可在特定的硬件架构上运行的二进制文件的过程。通过编译内核,我们可以根据自己的需求和兴趣对内核进行定制和优化,以满足特定的应用场景。下文…

IDEA构建JavaWeb项目,并通过Tomcat成功运行

目录 一、Tomcat简介 二、Tomcat安装步骤 1.选择分支下载 2.点击下载zip安装包 3.解压到没有中文、空格和特殊字符的目录下 4.双击bin目录下的startup.bat脚本启动Tomcat 5.浏览器访问Tomcat 6.关闭Tomcat服务器 三、Tomcat目录介绍 四、WEB项目的标准结构 五、WEB…

消息通知——公众号、小程序、短信对比

消息通知——公众号、小程序、短信对比 引言 在数字化时代,高效、准确的消息通知对于提升用户体验、增强用户粘性至关重要。本报告将深入分析三种常见的消息通知方式:微信公众号推送、微信小程序推送以及手机短信推送,从实现方式、优缺点及细…

三维测量与建模笔记 - 3.2 直接线性变换法标定DLT

DLT - Direct Linear Transform 上图中,透视成像对应的公式是共线方程,可以参考以下链接: https://zhuanlan.zhihu.com/p/101549821https://zhuanlan.zhihu.com/p/101549821 对于标定来说,需要找到。已知量是。 (u,v)是…

消息队列面试——打破沙锅问到底

消息队列的面试连环炮 前言 你用过消息队列么?说说你们项目里是怎么用消息队列的? 我们有一个订单系统,订单系统会每次下一个新订单的时候,就会发送一条消息到ActiveMQ里面去,后台有一个库存系统,负责获取…

【论文复现】KAN卷积:医学图像分割新前沿

📝个人主页🌹:Eternity._ 🌹🌹期待您的关注 🌹🌹 ❀知识图谱推理 1. 概述2. 核心创新点3. 模块介绍KANUNext模块 4. 本文主要结构5. 主要代码6. 数据集7. 结果展示8. 参考文献 前言:…

Oracle与SQL Server的语法区别

1)日期和日期转换函数。 SQL: SELECT A.*, CASE WHEN NVL(PAA009,) OR PAA009 >Convert(Varchar(10), SYSDATE,120) THEN Y ELSE N END AS ActiveUser FROM POWPAA A WHERE PAA001admin or PAA002admin Oracle: SELECT A.*, CASE WHEN NVL(PAA009,) or PAA009&…

基于TRIZ理论的便携式光伏手机充电装置创新

随着智能手机功能的日益强大,电量消耗问题也日益凸显,尤其是在户外活动时,电量告急常常让人措手不及。面对这一挑战,基于TRIZ(发明问题解决理论)的创新思维,一款全新的便携式光伏手机充电装置应…

Vue3父传子

1. App.vue - 父组件 咱们先来看左边的 App.vue&#xff0c;它扮演的是“父亲”角色——你可以想象它是一位热心的老爸&#xff0c;手里拿着一条消息&#xff0c;正准备把这条消息送到“儿子”那里。 <script setup> // 这个 setup 就像一个神奇的开关&#xff0c;一开…

前端 算法 双指针

文章目录 三数之和移动零盛最多水的容器接雨水 三数之和 leetcode 三数之和 题目链接 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有…

EPSON机械手与第三方相机的校准功能设计By python

EPSON机械手与第三方相机的校准功能设计By python 使用Python来实现EPSON机械手与第三方相机的校准功能是一个复杂但可行的任务。这通常涉及以下几个步骤:硬件接口通信、图像处理、标定算法实现和控制逻辑编写。 1. 环境准备 首先,库 pip install numpy opencv-python pyse…

NPU 可不可以代替 GPU

结论 先说结论&#xff0c;GPU分为可以做图形处理的传统意义上的真GPU&#xff0c;做HPC计算的GPGPU和做AI加速计算的GPGPU&#xff0c;所以下面分别说&#xff1a; 对于做图形处理的GPU&#xff0c;这个就和NPU 一样&#xff0c;属于DSA&#xff0c;没有替代性。当然&#xf…

python画图|hist()函数画直方图进阶

【1】引言 前序已经学习了hist()函数画直方图的基础教程&#xff0c;相关文章见下述链接&#xff1a; python画图|hist()函数画直方图初探-CSDN博客 在这里我们初步认识了hist()函数&#xff0c;并使用该函数画出了8个直方图。 之后又用bar(&#xff09;函数进行对比&#…

推荐一款非常好用的C/C++在线编译器

C/C作为一门底层、高效的编程语言&#xff0c;广泛应用于系统开发、游戏引擎、嵌入式系统等领域。然而&#xff0c;C/C的开发环境配置会让开发者把部分时间消耗在这件事上&#xff0c;也经常会遇到各种各样的环境问题。 本地开发的痛点 环境配置复杂&#xff1a;C/C的开发环境…

kafka如何获取 topic 主题的列表?

大家好&#xff0c;我是锋哥。今天分享关于【kafka如何获取 topic 主题的列表&#xff1f;】面试题&#xff1f;希望对大家有帮助&#xff1b; kafka如何获取 topic 主题的列表&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在Kafka中&#xff0c;可以…