【MySQL】主从复制(重点:主从复制原理)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
日志服务 SLS,月写入数据量 50GB 1个月
简介: 本文重点介绍MySQL的主从复制概述,作用,原理,同步数据一致性问题。

【大家好,我是爱干饭的猿,本文重点介绍MySQL的主从复制概述,作用,原理,同步数据一致性问题。

后续会继续分享Redis和其他重要知识点总结,如果喜欢这篇文章,点个赞👍,关注一下吧】

上一篇文章:《【MySQL】MVCC多版本并发控制(重点:MVCC实现原理之ReadView)》


目录

🥞1. 主从复制概述

1.1 如何提升数据库并发能力

1.2 主从复制的作用

🥞2. 主从复制的原理

2.1 原理剖析

2.2 复制的基本原则

🥞3. 同步数据一致性问题

3.1 理解主从延迟问题

3.2 主从延迟问题原因

3.3 如何减少主从延迟

3.4 如何解决一致性问题


SQL语句中 DDL 、DML 、DQL 、DCL:

    • DDL:DDL(Data Definition Language)语句: 数据定义语言,主要是进行定义/改变表的结构、数据类型、表之间的链接等操作。常用的语句关键字有 CREATE、DROP、ALTER 等。
    • DML:DML(Data Manipulation Language)语句: 数据操纵语言,主要是对数据进行增加、删除、修改操作。常用的语句关键字有 INSERT、UPDATE、DELETE 等。
    • DQL:DQL(Data Query Language)语句:数据查询语言,主要是对数据进行查询操作。常用关键字有 SELECT、FROM、WHERE 等。
    • DCL:DCL(Data Control Language)语句: 数据控制语言,主要是用来设置/更改数据库用户权限。常用关键字有 GRANT、REVOKE 等。

    🥞1.主从复制概述

    1.1如何提升数据库并发能力

    image.gif编辑

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

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

    1.2主从复制的作用

    第1个作用:读写分离。

    image.gif编辑

    第2个作用:数据备份。

    第3个作用:具有高可用性。

    🥞2.主从复制的原理

    2.1原理剖析

    三个线程

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

    image.gif编辑

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

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

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

    image.gif编辑

    复制三步骤(面试重点)

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

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

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

    复制的问题

    复制的最大问题:延时

    2.2复制的基本原则

      • 每个Slave只有一个Master
      • 每个Slave只能有一个唯一的服务器ID
      • 每个Master可以有多个Slave

      🥞3.同步数据一致性问题

      主从同步的要求:

        • 读库和写库的数据一致(最终一致);
        • 写数据必须写到写库;
        • 读数据必须到读库(不一定);

        3.1理解主从延迟问题

        进行主从同步的内容是二进制日志,它是一个文件,在进行网络传输的过程中就一定会存在主从延迟(比如 500ms),这样就可能造成用户在从库上读取的数据不是最新的数据,也就是主从同步中的数据不一致性问题。

        3.2主从延迟问题原因

        在网络正常的时候,日志从主库传给从库所需的时间是很短的,即T2-T1的值是非常小的。即,网络正常情况下,主备延迟的主要来源是备库接收完binlog和执行完这个事务之间的时间差。

        主备延迟最直接的表现是,从库消费中继日志(relay log)的速度,比主库生产binlog的速度要慢。造成原因:

        1、从库的机器性能比主库要差

        2、从库的压力大

        3、大事务的执行

        3.3如何减少主从延迟

        若想要减少主从延迟的时间,可以采取下面的办法:

          1. 降低多线程大事务并发的概率,优化业务逻辑
          2. 优化SQL,避免慢SQL,减少批量操作,建议写脚本以update-sleep这样的形式完成。
          3. 提高从库机器的配置,减少主库写binlog和从库读binlog的效率差。
          4. 尽量采用短的链路,也就是主库和从库服务器的距离尽量要短,提升端口带宽,减少binlog传输的网络延时。
          5. 实时性要求的业务读强制走主库,从库只做灾备,备份。

          3.4如何解决一致性问题

          读写分离情况下,解决主从同步中数据不一致的问题, 就是解决主从之间 数据复制方式 的问题,如果按照数据一致性 从弱到强 来进行划分,有以下 3 种复制方式。

          方法1:异步复制

          image.gif编辑

          方法2:半同步复制

          image.gif编辑

          方法3:组复制

          异步复制和半同步复制都无法最终保证数据的一致性问题,半同步复制是通过判断从库响应的个数来决定是否返回给客户端,虽然数据一致性相比于异步复制有提升,但仍然无法满足对数据一致性要求高的场景,比如金融领域。MGR 很好地弥补了这两种复制模式的不足。

          组复制技术,简称 MGRMySQL Group Replication)。是 MySQL 5.7.17 版本中推出的一种新的数据复制技术,这种复制技术是基于 Paxos 协议的状态机复制。

          MGR 是如何工作的

          首先我们将多个节点共同组成一个复制组,在执行读写(RW)事务的时候,需要通过一致性协议层(Consensus 层)的同意,也就是读写事务想要进行提交,必须要经过组里“大多数人”(对应 Node 节点)的同意,大多数指的是同意的节点数量需要大于 (N/2+1),这样才可以进行提交,而不是原发起方一个说了算。而针对只读(RO)事务则不需要经过组内同意,直接 COMMIT 即可。

          image.gif编辑

          MGR MySQL 带入了数据强一致性的时代,是一个划时代的创新,其中一个重要的原因就是MGR 是基于 Paxos 协议的。Paxos 算法是由 2013 年的图灵奖获得者 Leslie Lamport 1990 年提出的。事实上,Paxos 算法提出来之后就作为 分布式一致性算法 被广泛应用,比如

          Apache ZooKeeper 也是基于 Paxos 实现的。


          分享到此,感谢大家观看!!!

          如果你喜欢这篇文章,请点赞关注吧,或者如果你对文章有什么困惑,可以私信我。

          🏓🏓🏓

          相关实践学习
          如何快速连接云数据库RDS MySQL
          本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
          全面了解阿里云能为你做什么
          阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
          相关文章
          |
          9天前
          |
          存储 SQL 关系型数据库
          MySQL进阶突击系列(03) MySQL架构原理solo九魂17环连问 | 给大厂面试官的一封信
          本文介绍了MySQL架构原理、存储引擎和索引的相关知识点,涵盖查询和更新SQL的执行过程、MySQL各组件的作用、存储引擎的类型及特性、索引的建立和使用原则,以及二叉树、平衡二叉树和B树的区别。通过这些内容,帮助读者深入了解MySQL的工作机制,提高数据库管理和优化能力。
          |
          2月前
          |
          SQL 关系型数据库 MySQL
          mysql主从复制概述和配置
          【10月更文挑战第22天】MySQL 主从复制是一种将主服务器的数据复制到一个或多个从服务器的技术,实现读写分离,提高系统性能和可用性。主服务器记录变更日志,从服务器通过 I/O 和 SQL 线程读取并应用这些变更。适用于读写分离、数据备份和恢复、数据分析等场景。配置步骤包括修改配置文件、创建复制用户、配置从服务器连接主服务器并启动复制进程。
          126 1
          |
          2月前
          |
          监控 关系型数据库 MySQL
          深入了解MySQL主从复制:构建高效稳定的数据同步架构
          深入了解MySQL主从复制:构建高效稳定的数据同步架构
          143 1
          |
          7天前
          |
          关系型数据库 MySQL 数据库
          docker高级篇(大厂进阶):安装mysql主从复制
          docker高级篇(大厂进阶):安装mysql主从复制
          63 24
          |
          11天前
          |
          缓存 关系型数据库 MySQL
          MySQL 索引优化与慢查询优化:原理与实践
          通过本文的介绍,希望您能够深入理解MySQL索引优化与慢查询优化的原理和实践方法,并在实际项目中灵活运用这些技术,提升数据库的整体性能。
          40 5
          |
          22天前
          |
          SQL 存储 关系型数据库
          MySQL进阶突击系列(01)一条简单SQL搞懂MySQL架构原理 | 含实用命令参数集
          本文从MySQL的架构原理出发,详细介绍其SQL查询的全过程,涵盖客户端发起SQL查询、服务端SQL接口、解析器、优化器、存储引擎及日志数据等内容。同时提供了MySQL常用的管理命令参数集,帮助读者深入了解MySQL的技术细节和优化方法。
          |
          2月前
          |
          存储 关系型数据库 MySQL
          MySQL主从复制原理和使用
          本文介绍了MySQL主从复制的基本概念、原理及其实现方法,详细讲解了一主两从的架构设计,以及三种常见的复制模式(全同步、异步、半同步)的特点与适用场景。此外,文章还提供了Spring Boot环境下配置主从复制的具体代码示例,包括数据源配置、上下文切换、路由实现及切面编程等内容,帮助读者理解如何在实际项目中实现数据库的读写分离。
          117 1
          MySQL主从复制原理和使用
          |
          2月前
          |
          缓存 算法 关系型数据库
          Mysql(3)—数据库相关概念及工作原理
          数据库是一个以某种有组织的方式存储的数据集合。它通常包括一个或多个不同的主题领域或用途的数据表。
          87 5
          Mysql(3)—数据库相关概念及工作原理
          |
          2月前
          |
          存储 缓存 关系型数据库
          MySQL事务日志-Redo Log工作原理分析
          事务的隔离性和原子性分别通过锁和事务日志实现,而持久性则依赖于事务日志中的`Redo Log`。在MySQL中,`Redo Log`确保已提交事务的数据能持久保存,即使系统崩溃也能通过重做日志恢复数据。其工作原理是记录数据在内存中的更改,待事务提交时写入磁盘。此外,`Redo Log`采用简单的物理日志格式和高效的顺序IO,确保快速提交。通过不同的落盘策略,可在性能和安全性之间做出权衡。
          1708 14
          |
          2月前
          |
          SQL 关系型数据库 MySQL
          Mysql中搭建主从复制原理和配置
          主从复制在数据库管理中广泛应用,主要优点包括提高性能、实现高可用性、数据备份及灾难恢复。通过读写分离、从服务器接管、实时备份和地理分布等机制,有效增强系统的稳定性和数据安全性。主从复制涉及I/O线程和SQL线程,前者负责日志传输,后者负责日志应用,确保数据同步。配置过程中需开启二进制日志、设置唯一服务器ID,并创建复制用户,通过CHANGE MASTER TO命令配置从服务器连接主服务器,实现数据同步。实验部分展示了如何在两台CentOS 7服务器上配置MySQL 5.7主从复制,包括关闭防火墙、配置静态IP、设置域名解析、配置主从服务器、启动复制及验证同步效果。
          Mysql中搭建主从复制原理和配置