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格式会记录主库插入这条数据之后的完整数据。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

单测篇 - 如何mock静态常量

本文对应源码地址: https://github.com/nieandsun/NRSC-STUDY/tree/master/nrsc-unit-test-study 1 如何mock静态常量 先看如下代码,这里如何对方法中的静态常量DEMO_CONSTANT进行mock呢? public class Demo1StaticConstant {/**** 这里的类…

学习方法该升级了,‌AI时代的弯道超车:【心流学习法】行动与意识合一的巅峰进化

你是否曾感到内心如荒漠般干涸,面对浩瀚的知识海洋,热情逐渐消磨殆尽? 你是否渴望忘却时间的流逝,心无旁骛,与知识展开一场纯粹而深邃的对话? ​在AI时代,智能体处理数据、知识迭代的速率让人…

Set

1.概念 Set与Map一样是一个接口&#xff0c;是一颗搜索树&#xff0c;所以在创建Set对象时&#xff0c;必须实现其类&#xff08;HashSet或TreeSet&#xff09; Set<String> setnew HashSet<>(); 2.常用方法 注意 Set中只存储key&#xff0c;并且要求key唯一Set…

蓝桥杯真题——三角回文数(C语言)

问题描述 对于正整数 n, 如果存在正整数 k 使得 n123⋯kk(k1)2n123⋯kk(k1)/2​, 则 n 称为三角数。例如, 66066 是一个三角数, 因为 66066123⋯36366066123⋯363 。 如果一个整数从左到右读出所有数位上的数字, 与从右到左读出所有数位 上的数字是一样的, 则称这个数为回文数…

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-01

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-01 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-01目录1. A Perspective for Adapting Generalist AI to Specialized Medical AI Applications and Their Challenges2. Synergi…

C++练习题(2)

//C计算自然数的和 #include <iostream> using namespace std; int main() { int n,sum0; scanf("%d",&n); for(int i0;i<n;i) { sumi; } printf("%d",sum); return 0; } #include <iostream> …

心觉:如果做不到“道生一”,能做到“一生道”也不得了

Hi&#xff0c;我是心觉&#xff0c;带你用潜意识化解各种焦虑、内耗&#xff0c;建立无敌自信&#xff1b;教你财富精准显化的实操方法&#xff1b;关注我,伴你一路成长&#xff01; 每日一省写作222/1000天 想学的东西太多&#xff0c;想练的能力太多&#xff0c;想重塑的负…

Centos开机自启动脚本示例

本文建议创建一个sh文件管理自启动的各项内容&#xff0c;再将sh文件设置开机启动 在/root/autoshell下创建一个autostart.sh&#xff0c;内容如下 #!/bin/bash # description:开机自启脚本# 启动mongodb sh /root/software/mongodb-linux-x86_64-rhel70-4.0.6/bin/mongod --c…

查看网路信息-ifconfig命令

1.ifconfig缺点: 可以查看接口的网络类型;部分IP和掩码以及状态是否插线,看不到接口下的网关,DNS, 要想看到接口下多个IP,使用 ip addr show 命令 要想看网关,使用 ip route show 命令、route -n 命令 显示路由表内容,route -n 命令 route -n命令主要用于手动配置静态…

buu PWN5

在做这道题目之前&#xff0c;我们先来了解一下什么是字符串格式化漏洞&#xff0c;格式化字符串函数就是将计算机 内存中表示的数据转化为我们人类可读的字符串格式&#xff0c;下面记几个有用的 %d十进制 输出十进制整数 %s 从内存中读取字符串 %p 指针地址 %n 到目前…

[Android]从FLAG_SECURE禁止截屏看surface

在应用中&#xff0c;设置activity的flag为FLAG_SECURE就可以禁止截屏&#xff0c;截屏出来是黑色的&#xff0c; 试验一下&#xff0c; 注意事项 影响&#xff1a; 设置 FLAG_SECURE 标志后&#xff0c;用户将无法对该Activity进行截屏或录制屏幕。这个标志会影响所有屏幕录…

【FL0013】基于SpringBoot和微信小程序的机电公司管理信息系统

&#x1f9d1;‍&#x1f4bb;博主介绍&#x1f9d1;‍&#x1f4bb; 全网粉丝10W,CSDN全栈领域优质创作者&#xff0c;博客之星、掘金/知乎/b站/华为云/阿里云等平台优质作者、专注于Java、小程序/APP、python、大数据等技术领域和毕业项目实战&#xff0c;以及程序定制化开发…

[渲染层网络层错误] net::ERR_CONTENT_LENGTH_MISMATCH 问题解决

问题描述 问题背景 微信小程序访问后端img资源的时候&#xff0c;偶尔出现这个感叹号&#xff0c;图片加载不出来&#xff0c;但是对应的url贴出来在浏览器中访问&#xff0c;或者重新加载是可以访问的。 错误描述 经查询前端报错 [渲染层网络层错误] net::ERR_CONTENT_LE…

【C++】踏上C++学习之旅(五):auto、范围for以及nullptr的精彩时刻(C++11)

文章目录 前言1. auto关键字&#xff08;C11&#xff09;1.1 为什么要有auto关键字1.2 auto关键字的使用方式1.3 auto的使用细则1.4 auto不能推导的场景 2. 基于范围的for循环&#xff08;C11&#xff09;2.1 范围for的语法2.2 范围for的使用条件 3. 指针空值nullptr&#xff0…

springboot2.x使用SSE方式代理或者转发其他流式接口

文章目录 1.需求描述2.代码2.1.示例controller2.2.示例service2.3.示例impl 3.测试 1.需求描述 使用SSE的方式主要还是要跟前端建立一个EventSource的链接&#xff0c;有了这个连接&#xff0c;然后往通道里写入数据流&#xff0c;前端自然会拿到流式数据&#xff0c;写啥拿啥…

“高效开发之路:用Spring MVC构建健壮的企业级应用”

一、SpringMVC框架概念&#xff1a; &#xff08;一&#xff09;概述 SpringMVC是Spring框架的一个模块&#xff0c;Spring和SpringMVC无需中间整合层整合。该模块是一个基于MVC的web框架。 作用&#xff1a;只要需要前后端通信&#xff0c;就需要springMVC帮我完成&#xff…

论文阅读笔记:Activating More Pixels in Image Super-Resolution Transformer

论文阅读笔记&#xff1a;Activating More Pixels in Image Super-Resolution Transformer 1 背景1.1 问题1.2 提出的方法 2 创新点3 方法4 模块4.1 混合注意力模块&#xff08;HAB&#xff09;4.2 重叠交叉注意力模块&#xff08;OCAB&#xff09;4.3 同任务预训练 5 效果5.1 …

制作gif动图并穿插到CSDN文章中

一、下载LICEcap软件 安装包放在文章末尾 二、双击运行 会出现一个透明框&#xff0c;可以通过左下角的Size来修改画布大小&#xff0c;也可以直接拖动来调整 把透明框拖至自己想放置的位置 点击record进行录制&#xff0c;点击stop暂停&#xff0c;录制完成后给自己的gif图…

新160个crackme - 093-kesan

运行分析 需破解用户名和注册码 PE分析 Delphi程序&#xff0c;32位&#xff0c;无壳 静态分析&动态调试 ida找不到字符串&#xff0c;根据Delphi程序逻辑&#xff0c;双击进入cls_Unit1_TForm1查找 向下翻找后发现4个事件&#xff0c;逐个分析 动调_TForm1_Edit1Change函数…

自己开发得期货资管模拟软件演示1.0.15版仅供学习

期货资管模拟软件演示1.0.15版仅供学习——C技术栈知识分享 本文将以期货资管模拟软件演示1.0.15版为例&#xff0c;分享其基于C技术栈的框架知识。 一、C技术栈在期货交易软件开发中的应用 C作为一种高性能的编程语言&#xff0c;以其强大的内存管理能力和高效的执行速度&a…