Mysql专栏(五) Mysql高可用

news2024/11/15 21:56:52

Mysql专栏收尾之作,作为一名后端开发人员,对于Mysql的知识了解到这里已经足以应对99的场景了,毕竟没有必要非要跟DBA抢活儿干。

而且现在的趋势都是往云上走,云数据库已经帮我们处理了高可用和数据一致性的事情了,所以当扩展知识了解就好,实际应用场景几乎没有,在本篇文章中并没有给出具体的配置实现。

Mysql热备

Mysql自身提供了数据复制的方式-主从同步。
基于Mysql的主从同步,我们可以生成数据库的很多副本,这时候加上keepalived做个热备,就可以基本满足Mysql的高可用要求了。
但是主从同步必然会损失数据一致性,所以实际应用场景来讲,顶多做几个读库来实现读写分离,而不是为了高可用,因为数据库的一致性是至关重要的。

Mysql主从同步

这里特指Mysql5.7版本,5.6、5.7、8.0都有些差异点,而且目前主要使用的都是5.7,对于其他版本接触不多。
Mysql主从复制基础来源于binlog,所以一定要开启binlog,而且在5.7版本,对于binlog提供了新的id增强:gtid,极大的简化了对于binlog复制过程的排查和纠错难度,建议开启。(之前数据恢复什么的,都得用binlog的位点信息 logfile + logposition,如果开了gtid只用gtid就行了)
当开启binlog后,在mysql控制台中
在这里插入图片描述
整个同步流程如上图所示,当slave开启了主从复制后,会使用当前的位点信息向master发送请求。
master会为每个slave启动一个dump线程,如果当前的binlog位点大于slave请求的位点就向slave发送binlog日志。
slave中会启动一个io线程用于接收binlog日志写到磁盘的relay_log日志中,并同时维护当前slave的位点信息。
slave也会启动一个sql线程从relay_log日志中获取binlog进行重放数据。
默认情况下,master的dump线程不会关心slave的接收状态,所以一般来讲,主从复制也可称为异步复制。

Mysql半同步复制

上面提到了,Mysql自身的同步复制属于异步复制,也就是master是不关心数据有没有真正到从库的,你给我发请求拉取,我就给你binlog数据,仅此而已,所以是无法保障数据一致性的。
因此Mysql又提供了一种半同步复制方案(以插件模式支持,具体配置可以查阅其他文章)。
半同步复制在主从同步的基础上,需要从库返回ack响应。也就是需要slave明确收到了数据后,master才能进行提交事务(5.7特性 Loss-less Semi-Synchronous)当然有利也有弊,该方案提升了数据一致性的同时,也会对Mysql的性能产生影响,因为每个事务都需要进行二次传播(同步到从库上)
为了尽可能减小半同步复制对主库的影响,当从库断联时,会自动降级为异步复制,所以该方案也不是追求完全数据一致性的。
半同步复制要求主库、从库都要开启,其中只要一个未开启则降级为异步复制

附录

1 Loss-less Semi-Synchronous

5.7之前,半同步复制中事务的二次传播是发生在主库事务提交之后进行的。也就是如果主库在等待从库ack过程中发生异常了,这时主库其实已经把事务给提交了,主库的客户端是能感知到这个事务的,但是在从库上是没有该事务的,会造成主从数据不一致。
5.7默认在事务提交前等待从库ack,来尽可能保证主从两边的事务一致。

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

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

相关文章

初阶指针的介绍

文章目录 指针是什么 指针和指针类型 野指针 指针运算 指针和数组 二级指针 指针数组 一、 指针是什么 指针理解的2个要点: 1. 指针是内存中一个最小单元的编号,也就是地址 2. 平时口语中说的指针,通常指的是指针变量,是用…

达梦8数据库优化

1.什么是执行计划? 一条SQL语句在数据库中执行过程或访问路径的描述。 2.如何查看达梦数据库执行计划? 通过explain命令: EXPLAIN 执行的SQL语句,如 SQL> EXPLAIN SELECT * FROM TEST1; 1 #NSET2: [1, 1113, 602] 2 …

Vue笔记01 模板语法,数据代理,事件处理,计算监听属性,绑定样式,列表渲染,数据监测

基本使用 引入vue 创建vue实例并关联容器 一个Vue实例只应对应一个容器 一个Vue实例可以有多个组件 模板语法 使用Vue实例中数据 root容器中代码被称为vue模板 语法分为插值语法和指令(v-xxx) 插值语法 绑定标签体内容 {{}}中的可以是js表达式(特殊的js代码&…

CF790 div4 F(双指针) H(逆序对)

乐,被div4薄纱了没想到把所有出现次数>k的数放一个数组里然后双指针还有H,连逆序对都没看出来,嘻感觉以后还是写写div4算了,写什么div2啊,caibiProblem - F - Codeforces题意:给定一个数列,长…

2023万象更新!smardaten企业级无代码新版本也来啦!

2022可以说是在反复的做核酸、查绿码中度过的,不曾想年终一个月还是躲不过“小阳人”的命运。而这一个月,研发部的“阳过”们依旧加班加点给我们带来了最新版本——V8R4C70。在2022-2023跨年之际,smardaten这次又有哪些新的变化呢&#xff0c…

MVC三层架构的模式

大家好,今天给大家分享一下MVC 三层架构的模式 首先你要知道,所谓的MVC就是一种面向于javaee企业级开发的设计模式 这里要强调一点,MVC 不是一种技术,不是一种像spring 那样的框架,它是一种思想(可以理解为一种解决问…

【GNSS算法工程入门】1. Git入门

写在前面笔者在GNSS算法开发岗位从业过一段时间,和大部分同学类似,在GNSS开发过程中,也是从工程化的小白逐渐成长起来。而在算法开发从业的过程中,发现有些基础的知识其实在学校学习过程中是相对缺失的。麻省理工有个课程叫计算机…

编译型语言的Docker镜像构建小技巧

最近公司需要将一个底层服务打包成docker镜像,作为征战docker一年的小白当然不能错过这次练手的好机会。简单介绍一下这个项目:该项目为一个纯restful风格的后端项目,后端由java开发、worker节点由python开发、管理员使用的命令行工具由rust开…

wpa_supplicant EAP状态机分析

EAP状态机分析RFC4137协议状态机设计原理模块划分SM状态定义SM状态转换SM使用到的变量及函数定义变量1.SM与LL交互使用到的变量列表2.SM与EM交互使用到的变量3.SM内部使用的变量函数wpas代码RFC4137协议 RFC4137:“State Machine for Extensible Authentication Pr…

强化学习笔记-01多臂老虎机问题

本文是博主对《Reinforcement Learning- An introduction》的阅读笔记,不涉及内容的翻译,主要为个人的理解和思考。 1. 多臂老虎机问题 多臂老虎机问题是指存在K个老虎机,每个老虎机的获胜金额是一个未知的概率分布且相互独立,假设…

一文解决Opencv四大经典算子——sobel算子、scharr算子、laplacian算子、canny算子

Opencv四大算子 Sobel算子Scharr算子laplacian算子canny算子总结边缘是像素值发生跃迁的位置,是图像的显著特征之一,在图像特征提取,对象检测,模式识别等方面都有重要的作用! Sobel算子 sobel算子对图像求一阶导数。一阶导数越大,说明像素在该方向的变化越大,边缘信号越…

python链接池和pymysql批量入库——从0实现大规模异步爬虫框架项目4

我将这个链接池和批量入库封装了一个工具类上传了pypi,可以直接import使用 使用也较为简单,导入PooledDBhelper的DBhelper,调用DBhelper.PooledDBhelper()方法传入数据库链接信息创建一个链接池即可 pip install PooledDBhelper1.0.0 -----------------…

虚析构函数的作用

类的析构函数是为了释放内存资源,析构函数不被调用的话就会造成内存泄漏。虚析构函数定义为虚析构函数是为了当用一个基类的指针删除一个派生类的对象时,派生类的析构函数会被调用。但并不是要把所有类的析构函数都写成虚函数。只有当一个类被用来作为基…

信息论复习—卷积码

目录 卷积码的基本概念: 卷积码与分组码的不同特点: 卷积码的构造与表示方法: 卷积码编码器的结构: 卷积码(3,1,3): 卷积码的卷积关系: 卷积码的生成矩阵: 卷积码的多项式: 系统码结构的卷积码: 卷积码的监督矩阵: 卷积…

Pipenv使用指南:轻量级虚拟环境管理工具详解

前言 终于能够挤出一点时间来总结最近学到的一些技术知识点了,博主这两周被居家隔离-集中隔离-居家隔离来回折腾,现在终于是得到解放能够空出的时间来写写博客了,但是项目又催的紧,写博文的时间还是有限,这周我会尽量…

正则语言的性质

正则语言的性质 一、正则语言的性质 1.正则语言的泵引理 设LLL是正则语言,则存在与LLL相关的常数nnn满足:对于任何LLL中的串www,如果∣w∣≥n|w|\geq n∣w∣≥n,则我们就能把www打断为三个串wxyzwxyzwxyz使得: y̸ϵ…

2011年专业408

文章目录0 结果1 题目2 思路2.1 思路1(暴力解:排序)2.2 思路2(较优解:归并合并数组)2.3 思路3(较优解:数组指针后移)2.4 思路4(最优解:两个数组的…

ARM BTI指令介绍

目录 一、JOP 二、BTI 三、启用BTI 四、BTI是怎么实现的 一、JOP JOP(Jump-oriented programming)类似于ROP(Return-Oriented Programming)。在 ROP 攻击中,会扫描出useful gadgets(易被攻击的一段代码…

【数据结构】顺序队列的原理及实现

1.什么是队列 队列是一种比较特殊的线性表,特殊就在于它只允许在表的前端来进行删除,在表的后端来进行插入,队列它是一种操作受限制的线性表。插入的一端称为队尾,删除的一端称为队头,队列里没有元素就称它为空队列。…

快速使用代码编辑工具vim+ctags+cscope快捷使用itop3568开发板

当以上配置全部完成后,每当拿到新的工程代码,进入相关代码目录,利用 vim ./命令打 开当前目录, 然后 crtl 生成插件所需文件,最后使用命令:qa!退出 vim。此步只需进行一 次。 在此目录中打开任意代码文件或任意子目录…