Mysql 8.0 主从复制及读写分离搭建记录
前言
搭建参考:搭建Mysql主从复制
为什么要做主从复制?
- 做数据的热备,作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作,避免数据丢失。
- 架构的扩展。业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问的频率,提高单个机器的I/O性能。
- 读写分离,使数据库能支撑更大的并发。在报表中尤其重要。由于部分报表sql语句非常的慢,导致锁表,影响前台服务。如果前台使用master,报表使用slave,那么报表sql将不会造成前台锁,保证了前台速度。
- 使数据在地理位置上更接近用户,从而降低访问延迟。(游戏分西南大区 华南大区 北部大区等)
Mysql支持三种主要的二进制日志(binlog)格式
1、STATEMENT:基于语句的复制
记录导致数据更改的SQL语句。这种方式效率较高,因为它只需记录执行的语句,但是可能在某些情况下(如使用函数或非确定性操作)导致数据不一致。
- 优点:效率高
- 缺点:数据一致性存在问题
例如:update xxx set time=now() where id=1
2、ROW:基于行的复制
记录实际更改的数据行。这种方式提供了最高的数据一致性,因为它是基于数据更改的,而不是执行的语句。适合所有情况,尤其是当复制环境中存在复杂的SQL或者函数操作时。
- 优点:数据一致性强
- 缺点:性能低
例如:存在一个表,要更新其中10万条数据,那么就会造成十万条记录被写入binary.log日志,造成性能和空间的浪费。
3、MIXED:混合类型的复制
MySQL会根据情况自动选择STATEMENT或ROW模式来记录日志。对于不涉及非确定性函数的简单更新,它可能使用STATEMENT格式;而对于可能引起问题的语句,则使用ROW格式。
Mysql主从复制的实现方式
1、异步复制(Asynchronous Replication)
这是最基础的复制模式,主服务器提交事务后立即返回,而不等待从服务器确认。这种方式下,主从之间的数据延迟可能较大,但写入性能最高。
2、半同步复制(Semi-Synchronous Replication)
MySQL 5.5 引入了半同步复制,在MySQL 8.0 中进一步完善(增强半同步)。在半同步模式下,主服务器必须等待至少一个从服务器确认收到二进制日志事件后才能提交事务。这样保证了至少有一个副本有最新的数据,但可能会影响写入性能。
注:
MySQL 中的增强半同步配置具有一个参数rpl_semi_sync_master_timeout,它定义了主数据库等待备库确认的超时时间。如果超过这个超时时间,主数据库将切换到异步复制模式。
3、完全同步复制(Fully Synchronous Replication):
在某些配置中,可以实现所有从节点都确认后主节点才提交,但这通常会导致写性能显著下降。
主从复制的工作过程
-
主节点开启二进制日志,从节点开启中继日志。
-
Master 节点将数据的改变记录成二进制日志(bin log) ,当Master上的数据发生改变时(增删改),则将其改变写入二进制日志中。
-
从节点会在一定时间间隔内对Master的二进制日志进行探测其是否发生改变,如果发生改变,则开始一个I/O线程请求主节点的二进制事件。(请求二进制数据)
-
同时主节点为每个I/O线程启动一个dump线程,用于通知和向其发送二进制日志,I/O线程接收到bin-log内容后,将内容保存至slave节点本地的中继日志(Relay log)中
-
从节点将启动SQL线程从中继日志中读取二进制日志,在本地重放,即解析成sql 语句逐一执行,使得其数据和主节点的保持一致。最后I/O线程和SQL线程将进入睡眠状态,等待下一次被唤醒。

1、三个线程
- dump线程:由主数据库开启,用于读取主的二进制日志并传输给从数据库 。用于监听 I/O线程 请求将二进制日志更新的数据发送给slave的I/O 线程
- io线程:由从数据库开启,用于接收二进制日志并保存为中继日志。
- sql线程:由从数据库开启,用于将中继日志写入备数据库中完成主从复制。
2、二个日志
- 中继日志(relay log)只在主从服务器架构的从服务器上存在。从服务器(slave)为了与主服务器(Master)保持一致,要从主服务器读取二进制日志的内容,并且把读取到的信息写入本地的日志文件中,这个从服务器本地的日志文件就叫中继日志。然后,从服务器读取中继日志,并根据中继日志的内容对从服务器的数据进行更新,完成主从服务器的数据同步。
搭建好主从服务器之后,中继日志默认会保存在从服务器的数据目录下。
- 中继日志格式
文件名的格式是:从服务器名 - relay-bin.序号。中继日志还有一个索引文件:从服务器名 - relay-bin.index,用来定位当前正在使用的中继日志。
主从数据库同步
1、主库数据导出
#所有表只读
FLUSH TABLES WITH READ LOCK;
#导出所有数据库
mysqldump --all-databases --master-data -u 用户名 -p > dbdump.sql
#释放读锁
UNLOCK TABLES;
2、从库还原
#登录mysql,关闭IO线程
STOP REPLICA IO_THREAD;
#命令行执行导入操作
mysql -u root -p < dbdump.sql
#再次登录mysql,开启IO线程
START REPLICA IO_THREAD;
主从复制的问题及解决方案
Master宕机时,数据丢失问题
使用半同步复制方案,可以解决主库宕机造成的数据丢失问题。参考链接:半同步复制
读写分离方案
1、基于dynamic-datasource-spring-boot-starter实现
此插件基于Mybatis拦截实现,通过判断MappedStatement的SqlCommandType,如果为SELECT,则操作从库,否则操作主库。
@Bean
public MasterSlaveAutoRoutingPlugin masterSlaveAutoRoutingPlugin(){return new MasterSlaveAutoRoutingPlugin();
}
相关文章:
Mysql 8.0 主从复制及读写分离搭建记录
前言 搭建参考:搭建Mysql主从复制 为什么要做主从复制? 做数据的热备,作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作,避免数据丢失。架构的扩展。业务量越来越大,I/O访问频…...
PyTorch、显卡、CUDA 和 cuDNN 之间的关系
概述 PyTorch、显卡、CUDA 和 cuDNN 之间的关系及其工作原理可以这样理解: 显卡 (GPU) 显卡,特别是 NVIDIA 的 GPU,具有大量的并行处理单元,这些单元可以同时执行大量相似的操作,非常适合进行大规模矩阵运算&#x…...
Lambda 表达式练习
目录 sorted() 四种排序 List 转 Map map 映射 对象中 String 类型属性为空的字段赋值为 null BiConsumer,> T reduce(T identity, BinaryOperator accumulator) allMatch(Predicate p) groupingBy(Function f) flatMap(Function f) Optional.ofNullable(T t) 和 …...
JavaScript第七讲:数组,及练习题
目录 今天话不多说直接进入正题! 1. 创建数组对象 2. 数组长度 3. 遍历一个数组 4. 连接数组 5. 通过指定分隔符,返回一个数组的字符串表达 6. 分别在最后的位置插入数据和获取数据(获取后删除) 7. 分别在最开始的位置插入数据和获取数据(获取后删…...
从docker镜像反推Dockerfile
在项目运维的过程中,偶尔会遇到某个docker image打包时候的Dockerfile版本管理不善无法与image对应的问题,抑或需要分析某个三方docker image的构建过程,这时,就希望能够通过image反推构建时的instruction. 想实现这个过程可以使…...
车载软件架构 - AUTOSAR 的信息安全框架
车载软件架构 - AUTOSAR 的信息安全架构 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗…...
欧洲版“OpenAI”——Mistral 举办的 AI 大模型马拉松
近期,法国的 Mistral AI 举办了一场别开生面的 AI 大模型马拉松。要知道,Mistral 可是法国对 OpenAI 的有力回应,而且其技术还是完全开源的呢!这场在巴黎举行的黑客马拉松,规模空前盛大,竟然有超过 1000 名…...
Java | Leetcode Java题解之第128题最长连续序列
题目: 题解: class Solution {public int longestConsecutive(int[] nums) {Set<Integer> num_set new HashSet<Integer>();for (int num : nums) {num_set.add(num);}int longestStreak 0;for (int num : num_set) {if (!num_set.contai…...
C++的List
List的使用 构造 与vector的区别 与vector的区别在于不支持 [ ] 由于链表的物理结构不连续,所以只能用迭代器访问 vector可以排序,list不能排序(因为快排的底层需要随机迭代器,而链表是双向迭代器) (算法库里的排序不支持)(需要单独的排序) list存在vector不支持的功能 链…...
网易有道QAnything使用CPU模式和openAI接口安装部署
网易有道QAnything可以使用本地部署大模型(官网例子为qwen)也可以使用大模型接口(OPENAI或者其他大模型AI接口 )的方式,使用在线大模型API接口好处就是不需要太高的硬件配置。 本机环境windows11 首先安装WSL环境, 安装方法参考https://zhuan…...
量子加速超级计算简介
本文转载自:量子加速超级计算简介(2024年 3月 13日) By Mark Wolf https://developer.nvidia.cn/zh-cn/blog/an-introduction-to-quantum-accelerated-supercomputing/ 文章目录 一、概述二、量子计算机的构建块:QPU 和量子位三、量子计算硬件和算法四、…...
Unity3D 基于YooAssets的资源管理详解
前言 Unity3D 是一款非常流行的游戏开发引擎,它提供了丰富的功能和工具来帮助开发者快速创建高质量的游戏和应用程序。其中,资源管理是游戏开发中非常重要的一部分,它涉及到如何有效地加载、管理和释放游戏中的各种资源,如模型、…...
Linux 自动化升级Jar程序,指定Jar程序版本进行部署脚本
文章目录 一、环境准备二、脚本1. 自动化升级Jar程序2. 指定Jar程序版本进行部署总结一、环境准备 本文在 CentOS 7.9 环境演示,以springboot为例,打包后生成文件名加上版本号,如下打包之后为strategy-api-0.3.2.jar: pom.xml<?xml version="1.0" encoding=&…...
python练习五
Title1:请实现一个装饰器,每次调用函数时,将函数名字以及调用此函数的时间点写入文件中 代码: import time time time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) # 获取当前的时间戳 # 定义一个有参装饰器来实…...
YOLOv1深入解析与实战:目标检测算法原理
参考: https://zhuanlan.zhihu.com/p/667046384 https://blog.csdn.net/weixin_41424926/article/details/105383064 https://arxiv.org/pdf/1506.02640 1. 算法介绍 学习目标检测算法,yolov1是必看内容,不同于生成模型,没有特别…...
Apache Calcite - 自定义标量函数
前言 上一篇文章中我们介绍了calcite中内置函数的使用。实际需求中会遇到一些场景标准内置函数无法满足需求,这时候就需要用到自定义函数。在 Apache Calcite 中添加自定义函数,以便在 SQL 查询中使用自定义的逻辑。这对于执行特定的数据处理或分析任务…...
STM32作业实现(四)光敏传感器
目录 STM32作业设计 STM32作业实现(一)串口通信 STM32作业实现(二)串口控制led STM32作业实现(三)串口控制有源蜂鸣器 STM32作业实现(四)光敏传感器 STM32作业实现(五)温湿度传感器dht11 STM32作业实现(六)闪存保存数据 STM32作业实现(七)OLED显示数据 STM32作业实现(八)触摸按…...
HTML+CSS 文本动画卡片
效果演示 实现了一个图片叠加文本动画效果的卡片(Card)布局。当鼠标悬停在卡片上时,卡片上的图片会变为半透明,同时显示隐藏在图片上的文本内容,并且文本内容有一个从左到右的渐显动画效果,伴随着一个白色渐…...
MongoDB CRUD操作: 在本地实例进行文本搜索查询
MongoDB CRUD操作: 在本地实例进行文本搜索查询 文章目录 MongoDB CRUD操作: 在本地实例进行文本搜索查询举例创建集合创建文本索引精准搜索排除短语结果排序 在本地实例运行文本搜索查询前,必须先在集合上建立文本索引。MongoDB提供文本索引…...
文档智能开源软件
文档智能介绍: 文档智能通常指的是利用人工智能技术来处理和分析文档内容,以实现自动化、智能化的文档管理。文档智能的应用领域非常广泛,包括但不限于: 1. **文档识别**:使用OCR(光学字符识别࿰…...
戴尔G15笔记本散热优化:开源温度控制中心TCC-G15完全指南
戴尔G15笔记本散热优化:开源温度控制中心TCC-G15完全指南 【免费下载链接】tcc-g15 Thermal Control Center for Dell G15 - open source alternative to AWCC 项目地址: https://gitcode.com/gh_mirrors/tc/tcc-g15 对于戴尔G15系列笔记本用户而言ÿ…...
口腔诊所装修性价比提升指南
口腔诊所进行装修时,提升性价比的核心在于 “精准投入” ,即在确保医疗功能、患者体验和卫生合规的前提下,实现成本的最优化。1、 规划先行:奠定性价比基石 功能布局优先: 明确划分接待、候诊、诊疗、消毒等功能区&…...
fltk-rs主题定制技巧:打造个性化GUI界面的10个实用方法
fltk-rs主题定制技巧:打造个性化GUI界面的10个实用方法 【免费下载链接】fltk-rs Rust bindings for the FLTK GUI library. 项目地址: https://gitcode.com/gh_mirrors/fl/fltk-rs 想要让你的Rust GUI应用与众不同吗?fltk-rs作为FLTK GUI库的Rus…...
基于STM32的直流电机串级PID伺服控制系统设计与实现
摘要:本文设计并实现了一套基于STM32F103C8T6微控制器的直流电机串级PID伺服控制系统。该系统采用TB6612FNG驱动芯片控制带霍尔编码器的直流减速电机,通过位置-速度双闭环串级控制架构,实现了对电机位置和速度的高精度、快速响应控制。项目简…...
8255与74LS273实现流水灯控制原理
箱图片和题目要求,这是一个经典的微机原理/接口技术实验。你需要构建一个包含输入(开关)、处理(8255读取)、输出(74LS273锁存驱动LED)的系统。由于我无法直接为你绘制CAD图纸,我为你…...
Steam Deck Tools 终极指南:Windows 掌机的完美伴侣
Steam Deck Tools 终极指南:Windows 掌机的完美伴侣 【免费下载链接】steam-deck-tools (Windows) Steam Deck Tools - Fan, Overlay, Power Control and Steam Controller for Windows 项目地址: https://gitcode.com/gh_mirrors/st/steam-deck-tools 还在为…...
波兰市场语音本地化迫在眉睫,ElevenLabs波兰语支持深度评测:WAV质量、时延、重音准确率98.7%实测数据曝光
更多请点击: https://kaifayun.com 第一章:波兰市场语音本地化战略紧迫性分析 波兰作为欧盟第六大经济体和中东欧数字化转型先锋,其语音技术采纳率正以年均23.7%的速度攀升。截至2024年Q2,波兰智能音箱渗透率达38%,而…...
大模型转型AI工程师:小白必看学习路线,收藏这份成功秘籍!
本文作者分享了自己从零基础成功转型AI工程师的经历,强调学AI无需死磕算法和公式,关键在于掌握Python搭建AI智能体和Java项目迭代能力。文章提供三个月的学习路线,包括Python基础、Prompt技巧、RAG技术、知识库搭建、Agent搭建等,…...
Java Map集合详解与实战
集合进阶(Map集合)一、Map集合1.1 Map概述体系各位同学,前面我们已经把单列集合学习完了,接下来我们要学习的是双列集合。首先我们还是先认识一下什么是双列集合。所谓双列集合,就是说集合中的元素是一对一对的。格式:…...
如何快速上手Hertz.dev:5分钟完成首个全双工音频对话
如何快速上手Hertz.dev:5分钟完成首个全双工音频对话 【免费下载链接】hertz-dev first base model for full-duplex conversational audio 项目地址: https://gitcode.com/gh_mirrors/he/hertz-dev 想要体验革命性的全双工音频对话技术吗?Hertz.…...
