• MySQL主从复制


    主从复制

    1. 主从复制概述

    1. 1 如何提升数据库并发能力

    在实际工作中,我们常常将Redis作为缓存与MySQL配合来使用,当有请求的时候,首先会从缓存中进行查找,如果存在就直接取出。如果不存在再访问数据库,这样就提升了读取的效率,也减少了对后端数据库的访问压力。Redis的缓存架构是高并发架构中非常重要的一环。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iT8WC9wg-1666310232297)(C:\Users\wu\AppData\Roaming\Typora\typora-user-images\image-20221013020206517.png)]

    此外,一般应用对数据库而言都是“读多写少”,也就说对数据库读取数据的压力比较大,有一个思路就是采用数据库集群的方案,做主从架构、进行读写分离,这样同样可以提升数据库的并发处理能力。但并不是所有的应用都需要对数据库进行主从架构的设置,毕竟设置架构本身是有成本的。

    如果我们的目的在于提升数据库高并发访问的效率,那么首先考虑的是如何优化SQL和索引,这种方式简单有效;其次才是采用缓存的策略,比如使用 Redis将热点数据保存在内存数据库中,提升读取的效率;最后才是对数据库采用主从架构,进行读写分离。

    1. 2 主从复制的作用

    主从同步设计不仅可以提高数据库的吞吐量,还有以下 3 个方面的作用。

    第 1 个作用:读写分离我们可以通过主从复制的方式来同步数据,然后通过读写分离提高数据库并发处理能力

    在这里插入图片描述

    其中一个是Master主库,负责写入数据,我们称之为:写库。

    其它都是slave从库,负责读取数据,我们称之为:读库。

    当主库进行更新的时候,会自动将数据复制到从库中,而我们在客户端读取数据的时候,会从从库中进行读取。

    面对“读多写少”的需求,采用读写分离的方式,可以实现更高的并发访问。同时,我们还能对从服务器进行负载均衡,让不同的读请求按照策略均匀地分发到不同的从服务器上,让读取更加顺畅。读取顺畅的另一个原因,就是减少了锁表的影响,比如我们让主库负责写,当主库出现写锁的时候,不会影响到从库进行SELECT的读取。

    第 2 个作用就是数据备份我们通过主从复制将主库上的数据复制到了从库上,相当于是一种热备份机制,也就是在主库正常运行的情况下进行的备份,不会影响到服务。

    第 3 个作用是具有高可用性数据备份实际上是一种冗余的机制,通过这种冗余的方式可以换取数据库的高可用性,也就是当服务器出现故障宕机的情况下,可以切换到从服务器上,保证服务的正常运行。

    关于高可用性的程度,我们可以用一个指标衡量,即正常可用时间/全年时间。比如要达到全年99.999%的时间都可用,就意味着系统在一年中的不可用时间不得超过365*24*60*(1-99.999%)=5.256分钟(含系统崩溃的时间、日常维护操作导致的停机时间等),其他时间都需要保持可用的状态。

    实际上,更高的高可用性,意味着需要付出更高的成本代价。在现实中我们需要结合业务需求和成本来进行选择。

    2. 主从复制的原理

    Slave会从Master读取binlog来进行数据同步。

    2. 1 原理剖析

    三个线程

    实际上主从同步的原理就是基于 binlog 进行数据同步的。在主从复制过程中,会基于 3 个线程来操作,一个主库线程,两个从库线程。

    在这里插入图片描述

    二进制日志转储线程(Binlog dump thread)是一个主库线程。当从库线程连接的时候, 主库可以将二进
    制日志发送给从库,当主库读取事件(Event)的时候,会在 Binlog 上加锁,读取完成之后,再将锁释
    放掉。

    从库 I/O 线程会连接到主库,向主库发送请求更新 Binlog。这时从库的 I/O 线程就可以读取到主库的
    二进制日志转储线程发送的 Binlog 更新部分,并且拷贝到本地的中继日志 (Relay log)。

    从库 SQL 线程会读取从库中的中继日志,并且执行日志中的事件,将从库中的数据与主库保持同步。

    在这里插入图片描述

    注意:
    不是所有版本的MySQL都默认开启服务器的二进制日志。在进行主从同步的时候,我们需要先检查服务器是否已经开启了二进制日志。

    除非特殊指定,默认情况下从服务器会执行所有主服务器中保存的事件。也可以通过配置,使从服务器执行特定的事件。

    复制三步骤

    步骤 1 :Master将写操作记录到二进制日志(binlog)。

    步骤 2 :SlaveMaster的binary log events拷贝到它的中继日志(relay log);

    步骤 3 :Slave重做中继日志中的事件,将改变应用到自己的数据库中。 MySQL复制是异步的且串行化
    的,而且重启后从接入点开始复制。

    复制的问题

    复制的最大问题:延时会导致数据不一致

    2. 2 复制的基本原则

    • 每个Slave只有一个Master
    • 每个Slave只能有一个唯一的服务器ID
    • 每个Master可以有多个Slave
  • 相关阅读:
    关于在浏览器新标签页重新登录后旧页面没刷新导致一系列问题的解决方法
    【算法每日一练]-图论(保姆级教程 篇5(LCA,最短路,分层图)) #LCA #最短路计数 #社交网络 #飞行路线 # 第二短路
    「高效程序员的修炼」正则表达式极速入门:掌握快速找出文本中目标内容的能力
    k8s部署rook ceph
    【QT开发笔记-基础篇】| 第四章 事件QEvent | 4.5 键盘事件
    Jmeter —— 常用的几种断言方法(基本用法)
    Mac电脑输入正确密码后提示密码错误
    QGraphicsView,QGraphicsScene和QGraphicsItem
    IDEA使用中, 设置平展软件包。使用IDEA遇到的问题:src里为什么创建包为什么不在包里面
    Node基础and包管理工具
  • 原文地址:https://blog.csdn.net/admin3335/article/details/127438577