当前位置 博文首页 > 韩超的博客 (hanchao5272):MySql: 浅谈主从复制简介、原理、方

    韩超的博客 (hanchao5272):MySql: 浅谈主从复制简介、原理、方

    作者:[db:作者] 时间:2021-09-05 16:10

    1.简介

    • 随着技术的发展,在实际的生产环境中,由单台MySQL数据库服务器不能满足实际的需求。

    • 此时数据库集群就很好的解决了这个问题。

    • 采用MySQL分布式集群,能够搭建一个高并发、负载均衡的集群服务器。

    • 在此之前我们必须要保证每台MySQL服务器里的数据同步

    • 数据同步我们可以通过MySQL内部配置就可以轻松完成,主要有主从复制主主复制

    • MySQL数据库自身提供的主从复制功能可以方便的实现数据的多处自动备份,实现数据库的拓展。

    • 多个数据备份不仅可以加强数据的安全性,通过实现读写分离还能进一步提升数据库的负载性能。

    • 下图就描述了一个多个数据库间主从复制与读写分离的模型(来源网络):

    在这里插入图片描述

    • 在一主多从的数据库体系中,多个从服务器采用异步的方式更新主数据库的变化。

    • 业务服务器在执行写或者相关修改数据库的操作是在主服务器上进行的,读操作则是在各从服务器上进行。

    2.意义

    读写分离

    • 在业务复杂的系统中,有这么一个情景,有一句sql语句需要锁表,导致暂时不能使用读的服务,那么就很影响运行中的业务。

    • 使用主从复制,让主库负责写,从库负责读,这样,即使主库出现了锁表的情景,通过读从库也可以保证业务的正常运作。

    数据热备

    架构扩展

    • 业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问的频率,提高单个机器的I/O性能。

    3.原理

    • MySQL的主从复制是一个异步复制过程(虽然一般情况下感觉是实时的)。
    • 数据将从一个MySQL数据库(Master)复制到另一个MySQL数据库(Slave)。
    • 在Master和Slave之间实现整个主从复制的过程是由三个线程参与完成的。
    • 其中两个线程(SQL线程I/O线程)在Slave端,另一个线程(I/O线程)在Master端。
    • 要实现MySQL的主从复制,首先必须打开Master端的binlog记录功能,否则就无法实现。
    • binlog: binary log,是主库中保存所有更新事件日志的二进制文件。
    • 因为整个复制过程实际上就是Slave从Master端获取binlog日志,然后在Slave上以相同顺序执行获取的binlog日志中的记录的各种SQL操作。
    • 下图简单展示了MySql主从复制的原理(源于网络):

    在这里插入图片描述

    4.基本原则

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

    5.方式

    MySql的复制方式分为以下几种:

    • 基于SQL语句的复制(statement-based replication,SBR)
    • 基于行的复制(row-based replication,RBR)
    • 混合模式复制(mixed-based replication,MBR)
    • 全局事务标识符 GTID(Global Transaction Identifier,GTID)

    基于SQL语句的方式是最古老的方式,也是目前默认的复制方式,后来的三种是MySQL 5以后才出现的复制方式。

    5.1.SBR

    优点

    • 历史悠久,技术成熟

    • binlog文件较小

    • binlog中包含了所有数据库更改信息,可以据此来审核数据库的安全等情况

    • binlog可以用于实时的还原,而不仅仅用于复制

    • 主从版本可以不一样,从服务器版本可以比主服务器版本高

    缺点

    • 不是所有的UPDATE语句都能被复制,尤其是包含不确定操作的时候
    • 复制需要进行全表扫描(WHERE 语句中没有使用到索引)的 UPDATE 时,需要比 RBR 请求更多的行级锁
    • 对于一些复杂的语句,在从服务器上的耗资源情况会更严重,而 RBR 模式下,只会对那个发生变化的记 录产生影响
    • 数据表必须几乎和主服务器保持一致才行,否则可能会导致复制出错
    • 执行复杂语句如果出错的话,会消耗更多资源

    5.2.RBR

    优点

    • 任何情况都可以被复制,这对复制来说是最安全可靠的
    • 和其他大多数数据库系统的复制技术一样
    • 多数情况下,从服务器上的表如果有主键的话,复制就会快了很多

    缺点

    • binlog 大了很多
    • 复杂的回滚时 binlog 中会包含大量的数据
    • 主服务器上执行 UPDATE 语句时,所有发生变化的记录都会写到 binlog 中,而 SBR 只会写一次,这会
    • 导致频繁发生 binlog 的并发写问题
    • 无法从 binlog 中看到都复制了写什么语句

    5.3.MBR

    混合方式就是有mysql自动选择RBR方式和SBR方式,能够充分发挥两种方式的优点,一般情况下都使用该种方式实现主从复制。

    5.4.GTID

    这种方式虽然能够大大提高主从复制的效率,减小主从复制的延时,但也存在问题,具体请参看下面的博客。

    • https://blog.csdn.net/guotao521/article/details/45483833
    cs