MySQL主从复制与读写分离原理

一、什么是主从复制?

MySQL 主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点。MySQL 默认采用异步复制方式,这样从节点不用一直访问主服务器来更新自己的数据,数据的更新可以在远程连接上进行,从节点可以复制主数据库中的所有数据库或者特定的数据库,或者特定的表。

二、MySQL主从复制原理:

MySQL的主从复制和MySQL的读写分离两者不分家,基于主从复制的架构才可实现数据的读写分离。
1、 主库将数据改变记录到二进制日志(binary log)中,也即是配置文件 log-bin
指定的文件(这些记录叫做二进制日志事件,binary log events)
2、 从库将 主库 的 二进制日志文件 拷贝到它的中继日志(relay log)
3、 从库 重做中继日志中的事件,将改变反映它自己的数据(数据重演) —重新执行一下
4、默认 1 分钟同步一次

三、MySQL支持的复制类型:

(1)基于语句的复制。顾名思义就是在主服务器上执行的SQL语句,在从服务器上执行同样的语句。MySQL默认采用这种方式的复制,效率比较高。
(2)基于行的复制。把改变的内容复制过去,而不是把命令再从主服务器上执行一遍。
(3)混合类型的复制。默认采用基于语句的复制,一旦发现基于语句无法精确复制时,就会采用基于行的复制。

四、mysql复制的优点:

(1)如果主库出现问题,可以快速切换到从库提供服务
(2)可以在从库执行查询操作,降低主库的访问压力。
(3)可以在从库进行备份,以免备份期间影响主库的服务。

五、MySQL 主从复制主要用途
(1)读写分离
在开发工作中,有时候会遇见某个sql 语句需要锁表,导致暂时不能使用读的服务,这样就会影响现有业务,使用主从复制,让主库负责写,从库负责读,这样,即使主库出现了锁表的情景,通过读从库也可以保证业务的正常运作。

(2)数据实时备份,当系统中某个节点发生故障时,可以方便的故障切换

(3)高可用HA

(4)架构扩展
随着系统中业务访问量的增大,如果是单机部署数据库,就会导致I/O访问频率过高。有了主从复制,增加多个数据存储节点,将负载分布在多个从节点上,降低单机磁盘I/O访问的频率,提高单个机器的I/O性能。

六、读写分离

数据库层面:主数据库复制写,从数据库复制读。
软件(代码)层面:通过读写分离中间,比如MyCat、shardingsphere等实现。

代码层面进行读写分离

代码环境是 springboot+mybatis+druib 连接池。想要读写分离就需要配置多个数据源,在进行写操作是选择写的数据源,读操作时选择读的数据源。其中有两个关键点:
•如何切换数据源
•如何根据不同的方法选择正确的数据源

1)、如何切换数据源

通常用 springboot 时都是使用它的默认配置,只需要在配置文件中定义好连接属性就行了,但是现在我们需要自己来配置了,spring 是支持多数据源的,多个 datasource 放在一个 HashMapTargetDataSource中,通过dertermineCurrentLookupKey获取 key 来决定要使用哪个数据源。因此我们的目标就很明确了,建立多个 datasource 放到 TargetDataSource 中,同时重写 dertermineCurrentLookupKey 方法来决定使用哪个 key。

2)、如何选择数据源

事务一般是注解在 Service 层的,因此在开始这个 service 方法调用时要确定数据源,有什么通用方法能够在开始执行一个方法前做操作呢?相信你已经想到了那就是切面 。怎么切有两种办法:
•注解式,定义一个只读注解,被该数据标注的方法使用读库
•方法名,根据方法名写切点,比如 getXXX 用读库,setXXX 用写库

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值