面试官:Mysql 中主库跑太快,从库追不上怎么整?

九路 等级 873 2 1

写这篇文章是因为之前有一次删库操作,需要进行批量删除数据,当时没有控制好删除速度,导致产生了主从延迟,出现了一点小事故。

今天我们就来看看为什么会产生主从延迟以及主从延迟如何处理等相关问题。

坐好了,准备发车!

面试官:Mysql 中主库跑太快,从库追不上怎么整?

image

图注:思维导图

主从常见架构

随着日益增长的访问量,单台数据库的应接能力已经捉襟见肘。因此采用主库写数据,从库读数据这种将读写分离开的主从架构便随之衍生了出来。

在生产环境中,常见的主从架构有很多种,在这里给大家介绍几种比较常见的架构模式。

面试官:Mysql 中主库跑太快,从库追不上怎么整?

image

面试官:Mysql 中主库跑太快,从库追不上怎么整?

image

主从复制原理

了解了主从的基本架构及相关配置后,下面就要进入正题了。

对于主从来说,通常的操作是主库用来写入数据,从库用来读取数据。这样的好处是通过将读写压力分散开,避免了所有的请求都打在主库上。同时通过从库进行水平扩展使系统的伸缩性及负载能力也得到了很大的提升。

面试官:Mysql 中主库跑太快,从库追不上怎么整?

image

但是问题就来了,读从库时的数据要与主库保持一致,那就需要主库的数据在写入后同步到从库中。如何保持主库与从库的数据一致性,主库又是通过什么样的方式将数据实时同步到从库的?

基本原理

Mysql 中主从复制时有两个很重要的日志文件:

  • binlog(二进制日志文件)

  • relay log(中继日志文件)

面试官:Mysql 中主库跑太快,从库追不上怎么整?

image

在主从同步的过程中,主库会将所有的操作事件记录在 binlog 中,从库通过开启一个 I/O 线程保持与主库的通信,并在一定时间间隔内探测 binlog 日志文件是否发生改变。如果 binlog 日志发生了变化,主库生成一个 binlog dump 线程向从库 I/O 线程传送 binlog。从库上的 I/O 线程将 binlog 复制到自己的 relay log 中。最终由从库中的 SQL 线程读取 relay log 中的事件重放到从库上。

面试官:Mysql 中主库跑太快,从库追不上怎么整?

image

主从延迟原因

上面的流程我们已经知道了主从复制的相关过程了,但是主库有更新就会同步从库,那为什么会出现主从延迟的情况呢?

随机重放

Mysql 主库中写 binlog 的操作是顺序写的,之前我们提到过,磁盘的顺序读写速度是很快的。同样的,从库中的 I/O 线程操作日志的速度效率也是很高的。但是别忘了,还有一个 SQL 线程来进行数据重放,而重放的过程是随机写盘的。到这里你应该就明白了吧,某一时刻 relay log 里的数据来不及重放进从库,就会产生主从延迟的情况。

主库并发高

知道了从库中 SQL 线程的重放情况,对于主库并发高导致主从延迟肯定就不难理解了。某一时刻,大量写请求打到主库上,意味着要不断对 binlog 进行写入,此时从库中的 SQL 线程就会应接不暇,自然会产生主从延迟。

锁等待

对于 SQL 单线程来说,当遇到阻塞时就会一直等待,直到执行成功才会继续进行。如果某一时刻从库因为查询产生了锁等待的情况,此时只有当前的操作执行完成后才会进行下面的操作,同理也就产生了主从延迟的情况。

主从延迟处理

知道了主从延迟的原因,接下来我们看看如何来进行处理。

并行复制

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

面试官:Mysql 中主库跑太快,从库追不上怎么整?

image

降低主库并发

你可能会说了,我现在用的低版本的数据库,也没法升版本啊,那我怎么整。对于主库并发高的情况,这种方式你只能通过控制并发来解决延迟了,多用用 Redis。

读主库

这种情况你肯定不陌生,对于一些实时性要求比较高的数据,你总不能读从库去拿吧,万一延迟个大半天,你不得贡献自己的年终奖啊。

总结

主从复制原理

  • 主从复制中有两个很重要的日志文件,binlog和relay log,分别位于主库与从库中。其中 binlog 是主从复制的基础,通过将操作事件写入 binlog 通过 I/O 线程传送至从库进行同步。

主从延迟原因

  • 从库中 SQL 线程重放的过程是随机写盘的,并且 SQL 线程是单线程的,因此数据来不及重放的话就会导致主从延迟。

  • 主库并发高会导致写操作不断写入 binlog,对于 SQL 线程说可能会应接不暇,也会产生主从延迟。

  • 重放过程中如果遇到锁等待也是产生延迟的原因之一。

主从延迟处理

  • MySQL 5.6版本以后通过并行复制的方式来解决 SQL 单线程产生的主从延迟问题。对于低版本来说,可以通过降低主库的并发来解决。如果对数据实时性要求比较严格的话,可以通过读主库来达到目的。

转载:https://www.cnblogs.com/caoyier/p/14246126.html

收藏
评论区

相关推荐

学完了C++语法之后该学什么??(数据库篇)
数据库与中间件 主要是MySQL、MongDB、Redis、Nginx等; 在大学的课程里,一般都会开设一门数据库的课程,不过这门数据库是没有针对某一种数据库语言的(例如 MySQL、SQlite)。不过我这里只讲 MySQL,因为最频繁。数据库不在多。 把MySQL学好,还是特别重要的,千万不能停留在会用的层面上,而是应该
postgresql和mysql哪个好
postgresql和mysql都是免费且功能强大的开源数据库,很多用户面对这两个库都会有一个问题,那就是哪一个才是最好的开源数据库,MySQL还是PostgreSQL呢?该选择哪一个开源数据库呢? postgresql和mysql哪个好 一.PostgreSQL相对于MySQL的优势 1、在SQL的标准实现上要比MySQL完善,而且功能实现比较严谨;
mysql面试题:如何实现 MySQL 的读写分离?MySQL 主从复制原理是啥?如何解决 MySQL 主从同步的延时问题?
你有没有做 MySQL 读写分离?如何实现 MySQL 的读写分离?MySQL 主从复制原理的是啥?如何解决 MySQL 主从同步的延时问题? 考点分析 高并发这个阶段,肯定是需要做读写分离的,啥意思?因为实际上大部分的互联网公司,一些网站,或者是 app,其实都是读多写少。所以针对这个情况,就是写一个主库,但是主库挂多个从库,然后从多个从库来
面试官:Mysql 中主库跑太快,从库追不上怎么整?
写这篇文章是因为之前有一次删库操作,需要进行批量删除数据,当时没有控制好删除速度,导致产生了主从延迟,出现了一点小事故。 今天我们就来看看为什么会产生主从延迟以及主从延迟如何处理等相关问题。 坐好了,准备发车! (https://imghelloworld.osscnbeijing.aliyuncs.com/4ed72bf8b1fc67
msyql备份
MySQL备份的几种方式最近一直想写点博客,但是不知道写什么,感觉自己最近的知识没有什么增加,今天想到了一篇可以写的博客。以前试过根据data文件夹备份MySQL,但是从来没有成功过,前几天帮助朋友还原MySQL,终于成功的将备份的data文件夹还原成功了。MySQL数据库算是常用的数据库中最好使用的数据库了,对于备份的操作也不例外。所以今天分享一下
MySQL 8 复制(二)——半同步复制
目录 一、简介 直到目前的最新版本为止,MySQL缺省依然使用异步复制策略。简单说所谓异步复制,指的是主库写二进制日志、从库的I/O线程读主库的二进制日志写本地中继日志、从库的SQL线程重放中继日志,这三步操作都是异步进行的。如此选择的主要理由是出于性能考虑,与同步复制相比,异步复制显然更快,同时能承载更高的吞吐量。但异
MySQL 5.7新特性:并行复制原理
众所周知,MySQL的复制延迟是一直被诟病的问题之一,在MySQL 5.7版本已经支持“真正”的并行复制功能,官方称为为enhanced multithreaded slave(简称MTS),因此复制延迟问题已经得到了极大的改进。总之,MySQL 5.7版本后,复制延迟问题永不存在。一、MySQL 5.6并行复制架构从MySQL 5.6.3版本开始
21分钟 MySQL 入门教程
21分钟 MySQL 入门教程 目录 一、MySQL的相关概念介绍(c1) 二、Windows下MySQL的配置(c2) 配置步骤(d1) MySQL服务的启动、停止与卸载(d2) 三、
MySQL基础(非常全)
MySQL基础一、MySQL概述1、什么是数据库 ? 答:数据的仓库,如:在ATM的示例中我们创建了一个 db 目录,称其为数据库2、什么是 MySQL、Oracle、SQLite、Access、MS SQL Server等 ? 答:他们均是一个软件,都有两个主要的功能: a. 将数据保存到文件或内存 b. 接收特定的命令,然后对文件进行相应
MySQL(一)MySQL基础介绍
最近的学习内容是数据库相关的一些知识,主要以MySQL为主,参考书籍——《MySQL必知必会》MySQL学习及下载地址:https://dev.mysql.com/MySQL学习使用注意事项:1、必须访问一个已有的MySQL服务器,需要一个服务器账号(一个登录名和一个口令)2、MySQL运行在所有主要平台上,包括Windows、Linux、Solaris、M
Mysql Workbench使用教程
<1 MySQL WorkbenchMySQL Workbench 为数据库管理员、程序开发者和系统规划师提供可视化的Sql开发、数据库建模、以及数据库管理功能。 <2.MySQL Workbench 的下载和安装 (1)安装最新MySql时,有是否安装MySql Workbench的选项,可选择安装。 (2)可以独立安装MySql Workbench。
MySQL最全整理,1200页文档笔记,从高级到实战讲的太清楚了
闲话作为一名编程人员,对MySQL一定不会陌生,尤其是互联网行业,对MySQL的使用是比较多的。对于求职者来说,MySQL又是面试中一定会问到的重点,很多人拥有大厂梦,却因为MySQL败下阵来。实际上,MySQL并不难,今天这份最全的MySQL总结,一共1200页,几乎涵盖了MySQL的所有知识,尤其突出了实战技能和高级知识点,无论是工作还是面试看完这篇就足
手把手教你使用Django如何连接Mysql
前言这次咱们来简述一下,Django如何连接Mysql。默认情况下,Django连接的是自己带的sqlite数据库。这种数据库好处是方便,不需要远程连接,打包项目挪到其他电脑上安装一下依赖一会就跑起来了。 但是缺点就是,可能会出现各种莫名其面的问题,所以,尽可能在开始的时候,就配置上连接Mysql。 连接MysqlDjango连接Mysql分三步1.
年后腾讯二面,第一个问MySQL主从结构,给我整不会了
一、MySQL一主一从 数据库服务器192.168.4.51配置为主数据库服务器 数据库服务器192.168.4.52配置为从数据库服务器 客户端192.168.4.50测试配置其中192.168.4.51是主服务器,另一台192.168.4.52作为从服务器,通过调取主服务器上的binlog日志,在本地重做对应的库、表,实现与主服务器的数据同步
最新金九银十JAVA面试合集,进阶加薪全靠它!
异步复制MySQL的复制默认是异步的,主从复制至少需要两个MYSQL服务,这些MySQL服务可以分布在不同的服务器上,也可以在同一台服务器上。MySQL主从异步复制是最常见的复制场景。数据的完整性依赖于主库BINLOG的不丢失,只要主库的BINLOG不丢失,那么就算主库宕机了,我们还可以通过BINLOG把丢失的部分数据通过手工同步到从库上去。注意:主库宕机的