Mysql系列-Binlog主从同步

原文链接:https://zhuanlan.zhihu.com/p/669450627

一、主从同步概述

mysql主从同步,即MySQL Replication,可以实现将数据从一台数据库服务器同步到多台数据库服务器。MySQL数据库自带主
从同步功能,经过配置,可以实现基于库、表结构的多种方案的主从同步。

可以对MySQL做主从架构并且进行读写分离,让主服务器(Master)处理写请求,从服务器(Slave)处理读请求,这样可以
进一步提升数据库的并发处理能力,如下图所示:

二、主从同步作用

一般来说,优先考虑优化sql及索引等,充分发挥数据库的最大性能;其次是采用缓存的策略,比如使用redis、magodb
等缓存工具,通过其高性能的优势把数据保存在内存数据库中,提升读取的效率,最后才是采取数据库主从架构,进行读写分
离(因为成本高)。

2.1 读写分离

通过主从复制的方式来同步数据,之后通过读写分离的方法提升数据库并发处理能力。简单来说就是数据放在多个数据库中,其中一
个是Master主库,其余的是Slave从库。当主数据库数据发生变化时,会自动将数据同步到从数据库中,程序可以设置去从库
读取数据,从而实现读写分离

2.2 数据备份

主从同步属于数据热备份机制,在主库正常运行下备份,不影响提供查询服务。

2.3 高可用性

数据备份其实是冗余的机制,通过冗余的方式可以换取数据库的高可用性,当服务器出现故障、宕机等无可用的情况下,可
以迅速进行故障切换,让从库当主库,保证服务正常运行。

三、主从同步原理

3.1 主从同步流程图

3.2 主从同步执行流程

1、从库不断试探主库的二进制日志文件(binlog),如果这个文件有更新则发送请求从主库获取新的内容;
2、用户向主库中写数据:包括添加、删除、修改、建库建表等操作;
3、主库将写的命令记录到二进制文件并更新二进制文件的偏移量;
4、从库试探主库二进制文件发现偏移量与从库中记录的偏移量值不一样时表示主库有更新,那么启动IO线程向主库请求从某个偏移量开始到二进制日志文件结束位置之间所有的数据;
5、主库根据从库请求,通过binlog dump线程将新偏移量推送到从库中;
6、从库获取主库的数据后,会将这些命令数据写入中继日志文件(relaylog)中,然后唤醒SQL线程同时让当前的IO线程挂起(休眠等待);
7、SQL线程根据记录的中继日志文件的偏移量读取中继日志文件中的命令;
8、SQL线程获取到命令后在本地数据库进行回放(就是从库中执行主库的SQL语句),回放完成当前SQL线程挂机(休眠等待)。

3.3 主从同步线程

msyql 的主从同步通过3个线程完成,其中1个线程在主库,2个线程在从库上。

如果一个主库连接多个从库,那么主库将会给每个处于连接状态的从库创建一个Binary log dump线程,每个从库也有自己的同步I/O以及SQL线程。

3.3.1 Binary log dump 线程

当从库连上主库时,主库会创建一个线程来发送 binlog 的内容给从库。

在数据库终端执行sql: SHOW PROCESSLIST , 可以看到 Binlog Dump 线程。

binlog dump 线程在binlog中读取要发送给从库的数据时,会对binlog加锁。一旦数据读取完成,线程将释放锁,即使数据还未发送到从库。

3.3.2 IO 线程

当在从库上执行sql: START SLAVE ,从库将创建一个I/O线程。该线程将连接主库,并请求主库发送binlog中更新的记录给从库。

主库的Binlog Dump线程,将更新的binlog发送到从库,从库的 I/O线程将这些更新入从库的relay log。

在从库中执行sql: SHOW SLAVE STATUS, 能够看到 Slave_IO_running 的状态。

3.3.3 IO 线程

从库创建同步SQL线程来读取 relay log,并执行其中的事务。

一个从库使用2个线程将从主库读取更新以及在从库执行数据更新分成独立的任务。因此,从主库读取更新的任务不会减慢,即使从库执行数据更新任务很慢。例如,如果从库停止运行一段时间后再启动从库,从库的 I/O线程能够快速获从主库取到所有的binlog,即使 SQL 线程滞后。如果从库在 SQL线程执行所有更新前停止运行, I/O 线程至少获取到了一份安全的更新binlog并保存到从库的relay log, 当下次启动从库后就可能执行数据更新。

在从库上通过设置系统变量 slave_parallel_workers 的值大于0(默认值),可以开启并行处理任务。当该变量设置了,从库设置创建设置的数量的worker 线程,以及一个协调线程来管理worker 线程。如果你在使用多从库通道,每个通道都将有这么多线程。slave_parallel_workers大于0从库一般被称为多线程从库(副本)。一旦这么设置,失败的事务将会被重试。

3.4 Relay log与从库元数据存储

从库(副本)也会记录从库(源库)的binlog的当前位置以及从库的relay log。

在同步过程中,一个从库创建多个信息库。

3.4.1 relay log

该log有 I/O线程写入,log中的事务来自主库的binlog,并且将被 SQL线程执行更新到从库。

3.4.2 从库连接元数据存储

包含了从库I/O线程连接主库需要的信息,以及从主库binlog中检索事务需要的信息。连接元数据存储被写进表mysql.slave_master_info或者一个文件中。

3.4.3 从库的应用程序元数据存储

包含了从库SQL线程从relay log读取事务以及将事务更新到从库的信息。从库的应用程序元数据存储被写进表mysql.slave_relay_log_info 或者 一个文件中。

从库连接元数据存储与从库的应用程序元数据存储被统称为从库元数据存储,可以参考更多相关说明

使从库能够灵活应对宕机: 事务性存储引擎InnoDB创建表mysql.slave_master_info 与 表mysql.slave_relay_log_info。从库的应用程序元数据存储表更新将与事务一起提交, 也就是记录在元数据存储中的从库进度信息一直与从库的更新保持一致,即使从库宕机。

四、解决主从数据一致性

4.1 全同步复制

全同步复制,就是当主库执行完一个事务之后,要求所有的从库也都执行完该事物,才可以返回处理结果给客户端;因此,虽然
全同步复制数据一致性得到保证了,但是主库完成一个事务需要等待所有从库完成,性能难免会降低。

4.2 异步复制

异步复制,就是当主库提交事物后,会通知binlog dump线程发送binlog 日志给从库,一旦binlog dump线程将binlog 日志
发送给从库之后,不需要等到从库也同步完成事物,主库就会将处理结果返回给客户端。
主库只管自己完成事物,就将处理结果返回给客户端(此时从库不一定完成同步事物),可能导致主从数据不一致问题,比如刚在
主库新增的数据,马上去从库查询就可能查询不到。而且当主库提交完事物后,如果宕机了,可能会导致binlog 日志未同步给从库,
同时为了回复故障切换主从节点的话,就会出现数据丢失问题。因此,虽然异步复制性能高,但是数据一致性是最弱的。
mysql主从复制,默认采用的就是异步复制这种复制策略。

4.3 半同步复制

mysql5.5 版本后开始支持半同步复制方式。原理就是在客户端提交commit之后不直接将结果返回客户端,而是至少等待至少有一个从
库收到binlog ,并且写到中继日志之后再返回给客户端。优点:提高数据一致性。缺点:降低主库写的效率。
mysql5.7 版本中增加了一个rpl_semi_sync_master_wait_for_slave_count参数,可以根据需要响应的从库数据库数量
设置,默认为1,也就是一个从库有了响应,就返回给客户端。如果这个参数调大,就可以提高数据一致性。

4.4 增强半同步复制

增强半同步复制,是mysql 5.7.2后的版本对半同步复制做的一个改进,原理上几乎是一样的,主要是解决幻读的问题。
主库配置了参数 rpl_semi_sync_master_wait_point = AFTER_SYNC 后,主库在存储引擎提交事务前,必须先收到从库数据
同步完成的确认信息后,才能提交事务,以此来解决幻读问题

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

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

相关文章

SpringBoot开发实用篇(二)

目录 一:Redis 1:SpringBoot整合Redis 2:SpringBoot读写Redis的客户端 3:SpringBoot操作Redis实现技术切换(jedis) 二:Mongodb 1:Mongodb基础操作 2:SpringBoot整合…

ELFK 8.12.2 部署 -- docker部署方式⚽

👨‍🎓博主简介 🏅CSDN博客专家   🏅云计算领域优质创作者   🏅华为云开发者社区专家博主   🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入&#xff01…

frp内网映射初体验

frp内网映射工具配置 1、配置穿透映射工具服务器信息2、服务器配置3、客户端配置4、配置完毕后 1、配置穿透映射工具服务器信息 1.1、frp版本是 frp_0.57.0 配置文件中文说明文档:https://gofrp.org/zh-cn/docs/ 参考优秀文章:https://blog.hoshiroko.c…

数据库之DML

1,创建表 mysql> create table student(-> id int primary key,-> name varchar(20) not null,-> grade float-> );插入记录 mysql> insert into student values(1,monkey,98.5); Query OK, 1 row affected (0.01 sec)一次性插入多条记录 mysql…

车灯出现破损破损破裂断角掉角断边等等车灯问题如何修复?用泰达克TADHE车灯无痕修复液来解决。车灯合面合壳密封用泰达克TADHE车灯密封UV胶。

小车车灯无痕修复用的胶是什么? 可以使用在小车车灯无痕修复中的胶水,通常使用的车灯无痕修复专用UV胶。 车灯无痕修复专用胶主要成份是改性丙烯酸UV树脂,主要应用在车灯的专业无痕修复领域。它可以用于修复车灯壳的裂缝或破损,使…

十大护眼落地灯品牌排行榜:2024十大王炸护眼大路灯分享

十大护眼落地灯品牌排行榜有哪些?护眼落地灯作为一款有效的照明神器,广受消费者们的喜爱。然而,市场上护眼落地灯品牌众多,品质参差不齐,一些护眼落地灯在光线舒适度方面的表现并不理想,甚至可能光线不稳定…

SpringBoot后端验证码-防止密码爆破功能

一、简介 为了防止网站的用户被通过密码典爆破。引入验证码的功能是十分有必要的。而前端的验证码又仅仅是只防君子不防小人。通过burpsuit等工具很容易就会被绕过。所以后端实现的验证码才是对用户信息安全的一大重要保障。 实现思路: 1.引入图形生成的依赖 2.生成…

VPN 的入门介绍

VPN(虚拟专用网络) 简介 虚拟专用网络,简称虚拟专网(VPN),其主要功能是在公用网络上建立专用网络,进行加密通讯。在企业网络中有广泛应用。VPN网关通过对数据包的加密和数据包目标地址的转换实…

SpringBoot日常:封装rabbitmq starter组件

文章目录 逻辑实现RabbitExchangeEnumRabbitConfigRabbitModuleInfoRabbitModuleInitializerRabbitPropertiesRabbitProducerManagerPOM.xmlspring.factories 功能测试application.yml配置生产者:消费者:测试结果:总结 本章内容主要介绍编写一…

【电机控制】EG2134无刷电机驱动、控制一体板——开环、无感SMO验证

【电机控制】EG2134无刷电机驱动、控制一体板——开环、无感SMO验证 文章目录 前言一、硬件二、软件三、开环SVPWM四、SMO无感观测器闭环控制五、参考文献总结 前言 【电机控制】直流有刷电机、无刷电机汇总——持续更新 【电机控制】EG2134无感FOC驱控一体板-滑模观测器 使用…

C++11中新特性介绍-之(二)

11.自动类型推导 (1) auto类型自动推导 auto自动推导变量的类型 auto并不代表某个实际的类型,只是一个类型声明的占位符 auto并不是万能的在任意场景下都能推导,使用auto声明的变量必须进行初始化,以让编译器推导出它的实际类型,…

苏东坡传-读书笔记十

不管怎么说,能使读者快乐的确是苏东坡作品的一个特点。苏东坡最快乐就是写作之时。一天,苏东坡对朋友说:“我一生之至乐在执笔为文之时,心中错综复杂之情思,我笔皆可畅达之。我自谓人生之乐,未有过于此者也…

红黑树模拟实现

概念 红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡…

昇思25天学习打卡营第20天|RNN实现情感分类

数据准备 使用IMDB影评数据集,包含Positive和Negative两类。 数据下载 import os import shutil import requests import tempfile from tqdm import tqdm from typing import IO from pathlib import Path# 指定保存路径为 home_path/.mindspore_examples cache…

蚓链实践告诉你“企业确保达成数字化营销效果的方法”

在如今这个数字化盛行的时代,企业想在激烈的市场竞争里崭露头角,确保数字营销效果那可是至关重要!今天就来给大家聊聊实现这一目标的基本条件,来自蚓链数字化营销系统的广大用户体验总结。 一、精准的目标定位 企业一定要清楚地知…

第一作者讲述《生态系统架构:人工智能时代从业者的新思维》背后的故事:Episode One

当前,人工智能技术正不断渗透到各行各业,对企业和组织的系统和流程带来深刻的影响。生态系统架构可以帮助企业进行更好的规划和管理人工智能系统,使人工智能技术能够更好地为企业所用,从而实现企业的数字化转型和更好的商业表现。…

信号量——Linux并发之魂

欢迎来到 破晓的历程的 博客 引言 今天,我们继续学习Linux线程本分,在Linux条件变量中,我们对条件变量的做了详细的说明,今天我们要利用条件变量来引出我们的另一个话题——信号量内容的学习。 1.复习条件变量 在上一期博客中&…

HTML5实现我的音乐网站源码

文章目录 作者:[xcLeigh](https://blog.csdn.net/weixin_43151418) 1.设计来源1.1 界面效果1.2 轮播图界面1.3 音乐播放界面1.4 视频播放界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板,程序开发,在线开发,在线沟通 作…

DAY22-力扣刷题

1.被围绕的区域 方法一&#xff1a;深度优先搜索 class Solution {int n, m;public void solve(char[][] board) {n board.length;if (n 0) {return;}m board[0].length;for (int i 0; i < n; i) {dfs(board, i, 0);dfs(board, i, m - 1);}for (int i 1; i < m - 1…

项目方案:社会视频资源整合接入汇聚系统解决方案(九)-视频监控汇聚应用案例

目录 一、概述 1.1 应用背景 1.2 总体目标 1.3 设计原则 1.4 设计依据 1.5 术语解释 二、需求分析 2.1 政策分析 2.2 业务分析 2.3 系统需求 三、系统总体设计 3.1设计思路 3.2总体架构 3.3联网技术要求 四、视频整合及汇聚接入 4.1设计概述 4.2社会视频资源分…