IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 她那天晚上叫住我,让我去她家给他讲讲Mysql主从同步及主从同步延迟解决方案 -> 正文阅读

[大数据]她那天晚上叫住我,让我去她家给他讲讲Mysql主从同步及主从同步延迟解决方案

🍁 作者:知识浅谈,CSDN签约讲师,CSDN原力作者,后端领域优质创作者,热爱分享创作
💒 公众号:知识浅谈
📌 擅长领域:后端全栈工程师、爬虫、ACM算法
🔥 联系方式vx:zsqtcc

这次探索的问题:

  1. 什么是 Mysql主从同步?
  2. Mysql主从同步为什么会有主从延迟?
  3. 主从同步延迟解决方案?

🤞这次都给他拿下🤞
为什么 主从同步 会暴露出问题呢? 主从同步虽然满足了性能上要求,但一致性可能会有问题。

正菜来了🛴🛴🛴

🍖Mysql主从同步是?

因为数据访问量的大量增长,单体数据库主键有点吃力了,采用主库写数据,从库读数据这种将读写分离开的主从架构便产生了。
常见主从同步有,一主一从一主多从多主一从多主多从,这次拿一主多从举例。
在这里插入图片描述

🍕主从同步原理

涉及到两个重要文件

  • binlog(二进制日志文件)
  • relay log(中继日志文件)
    在这里插入图片描述

🍕主从同步原理主从同步过程

  1. 主库将数据库中数据的变化写入到 binlog
  2. 从库连接主库
  3. 从库会创建一个 I/O 线程向主库请求更新的 binlog
  4. 主库会创建一个 binlog dump 线程来发送 binlog ,从库中的 I/O 线程负责接收
  5. 从库的 I/O 线程将接收的 binlog 写入到 relay log 中。
  6. 从库的 SQL 线程读取 relay log 同步数据本地(也就是再执行一遍 SQL )

🍖为什么有主从同步延迟?

温馨提醒:这个主要有以下两点原因

🍕随机重放

MySQL的主从复制都是单线程的操作,主库对所有DDL和DML产生的日志写进binlog,由于binlog是顺序写,所以效率很高。Slave的SQL Thread线程将主库的DDL和DML操作事件在slave中重放。DML和DDL的IO操作是随机的,不是顺序的,成本高很多。所以SQL Thread线程的速度赶不上主库写binlog的速度,就会产生主从延迟

🍕锁等待

另一方面,由于SQL Thread也是单线程的,当主库的并发较高时,产生的DML数量超过slave的SQL Thread所能处理的速度,或者当slave中有大型query语句产生了锁等待那么延时就产生了。

🍖主从同步延迟解决方案

🍕强制读主库

如果你做的是类似支付这种对实时性要求非常高的业务,那么最直接的方法就是直接读主库,当然这种方法相当于从库做一个备份的功能了。

🍕延迟读

就是在写入之后,等一段时间再读,Eg:写入后同步的时间是0.5s,读取的时候可以设置1s后再读,但是这个方案主要存在的问题就是,不知道主从同步完成所需要的时间。

🍕降低并发

如果你理解了随机重放这个导致主从延迟的原因,那么就比较好理解了,控制主库写入的速度,主从延迟发生的概率自然就小了。{原因:因为主库中sql可能并发执行,可以控制并发速度}。

🍕并行复制

相比于上边的三种,相对比较好的解决方案了。

SQL 单线程进行重放时速度有限,那么能不能采用多线程的方式来进行重放呢?
MySQL 5.6 版本后,提供了一种并行复制的方式,通过将 SQL 线程转换为多个 work 线程来进行重放,这样就解决了主从延迟的问题。
在这里插入图片描述

🍚总结

常用的主从同步延迟解决方案:
🥖强制读主库
🥖延迟读
🥖降低并发
🥖并行复制(推荐)

🎈靓文推荐🎈
🚀分布式ID的常用解决方案-一把拿下🚀

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-07-17 16:30:00  更:2022-07-17 16:30:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 22:43:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码