认真研究MySQL的主从复制(一)

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

【1】主从复制概述

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

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

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

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

在这里插入图片描述

按照上面的方式进行优化使用和维护的成本是由低到高的。

② 主从复制的作用

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

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

在这里插入图片描述
其中一个是Master库负责写入数据我们称之为写库。其他都是slave从库负责读取数据我们称之为读库。

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

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


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

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

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

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

【2】主从复制的原理

① 原理剖析

核心关键词三个线程。 实际上主从同步的原理就是基于binlog进行数据同步的。在主从复制过程中会基于3个线程来操作一个主库线程两个从库线程。
在这里插入图片描述
二进制日志转储线程Binlog dump thread是一个主库线程。当从库线程连接的时候主库可以将二进制日志发送给从库当主库读取事件Event的时候会在Binlog上加锁读取完成之后再将锁释放掉。

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

从库SQL线程会读取从库中的中继日志并且执行日志中的事件将从库中的数据与主库保持同步。
在这里插入图片描述

注意不是所有版本的MySQL都默认开启服务器的二进制日志。在进行主从同步的时候我们需要先检查服务器是否已经开启了二进制日志。除非特殊指定默认情况下从服务器会执行所有主服务器中保存的事件。也可以通过配置使从服务器执行特定的事件。

② 复制三步骤

步骤1Master将写操作记录到二进制日志binlog。这些记录叫做二进制日志事件binary log events

步骤2Slave 将Master的binary log events 拷贝到它的中继日志relay log

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

不过复制的最大问题是延时。

③ 复制的基本原则

有三个需要注意事项

  • 每个Slave只有一个Master
  • 每个Slave只能有一个唯一的服务器ID
  • 每个Master可以有多个Slave。
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: mysql