Mysql主从复制

binlog日志

记录所有更改的语句,可以从用于主从服务器之间的数据同步,以及服务器遇到的故障数据的无损修复

  1. 用于数据的恢复,如果Mysql数据库意外停止的话,可以通过二进制日志来查看用户执行了哪些操作,对数据库服务器文件做了哪些修改,然后根据二进制文件中的记录来恢复数据库服务器
  2. 数据的复制,由于日志的延伸性和时效性,master把二进制日志传递给slaves来达到 主从数据一致的目的
    mysql的数据备份,主备,主主,主从,都离不开binlog,需要依赖binlog来同步数据,保证数据的一致性

中继日志(relay log)介绍

中继日志只在主从服务器架构的从服务器上存在,从服务器为了与主服务器保持一致,要从主服务器读取二进制binlog日志的内容,并且把读取到的信息写入到本地日志文件中,这个从服务器本地的日志文件就叫做中继日志,然后从服务器读取中继日志,并且根据中继日志的内容对从服务器的数据进行更新,完成主从服务器的数据的同步,中继日志和二进制日志的格式相同

如何提高数据库的并发能力

在实际的工作中,我们常常将redis作为缓存和Mysql进行配合使用当有请求的时候,会先从reids中进行查找,如果存在就直接取出,如果不存在然后访问数据库,这样就提高了读取的效率,降低了数据库的压力,redis的缓存架构是高并发中非常重要的一环
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1nRTCXKw-1651980207259)(./2022-05-07-19-10-43.png)]
此外,一般应用对于的数据库而言,都是读多写少,数据库的读取压力比较的大,因此的话,可以采用集群的方案,做主从架构,进行读写分离,这样可以提高数据库的并发处理能力,但是设计架构本身是有一定成本的,如果我们的目的在于提高数据库高并发访问的效率,应该首先考虑的是如何优化sql和索引,其次才是缓存策略,比如使用redis将热点数据保存在内存数据库当中,提高读取的效率,最后才是主从架构,读写分离

主从复制的作用

主从复制的设计不仅可以提高数据库的吞吐量,还有以下的作用

  1. 读写分离
    我们可以通过主从复制的方式来同步数据,然后通过读写分离提高数据库的并发处理能力
    其中一个是master主库,负责写数据,我们称为写库
    其他的都是slave从库,负责读取数据,我们称为读库
    当主库更新的时候,会自动的将数据复制到从库中,而我们在读取数据的时候,是在从库中进行读取的,在面对读多写少的需求的时候,读写分离的方式可以实现更高的并发访问,还可以对服务器进行负载均衡,让不同的请求策略均匀的发送到不同的服务器上,让读取更加的顺畅,减少了锁表的影响,主库出现写锁的时候,不会影响从库进行读取.
  2. 数据的备份
    通过主从复制将主库中的数据复制到了从库上,相当于是一种热备份机制,在主库正常的情况下进行备份,不会影响到服务
  3. 高可用
    数据的备份就是一种冗余的机制,通过这种冗余的方式,可以换取数据库的高可用性,也就是当服务器出现故障或者宕机的时候,可以切换主从服务器,然后保证服务器的正常运行

主从复制的原理

slave 会从Master读取binlog来进行数据的同步

mysql8 开启binlog主从 mysql主从binlog原理_mysql

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

主库线程:

二进制日志转储线程

从库线程:

从库I/O线程

从库SQL线程

mysql8 开启binlog主从 mysql主从binlog原理_主从复制_02

主从复制的步奏

  1. master将写操作记录到二进制日志中,传输到从服务器
  2. slave接收master传输的bin.log文件,将其转化为二进制的中继日志
  3. slave重新的读取中继日志中的事件,将其改变同步到自己的数据库中

主从复制的问题和原则

  1. 主从复制的最大问题是 延时
  2. 每个slave只有一个master
  3. 每个slave只能有一个唯一的服务器id
  4. 每个master可以有多个slave