MySQL主从复制和读写分离

什么是MySQL主从复制?

MySQL主从复制是一个异步的复制过程,底层是基于Mysql数据库自带的 二进制日志 功能,我们只需要在数据库中简单的配置即可,不需要借助于其他的技术

MySQL数据库默认是支持主从复制的,依靠的就是MySQL自带的二进制日志功能.

主从复制的作用?

解决一个数据库服务器查询高并发的时候读写压力大的问题,同时也防止数据库服务器磁盘损坏,造成数据的丢失。

主从复制的目的?

为了实现读写分离.

读写分离就是用户访问,查询时,操作主库,增删改时,操作从库,这种结构 我们成为读写分离.

注意:从库可以有多个,主库只有一个.

怎么开启二进制日志功能实现主从复制

主数据库

1.修改Mysql数据库的配置文件/etc/my.cnf,增加配置:   log-bin=mysql-bin 启用二进制日志                   server-id=200 服务器唯一ID(唯一即可)

2登录Mysql,创建数据同步的用户并授权

3登录Mysql,查看master同步状态

执行show master status,记录下结果中**File**和**Position**的值

从库中

1.配置服务器唯一ID,设置完重启服务器

2.登录Mysql数据库,设置主库地址及同步位置

这样就开启了二进制日志功能,实现了主从复制功能.

如何通过java代码来完成读写分离呢,如何在执行select的时候查询从库,而在执行insert、update、delete的时候,操作主库呢?这个时候,我们就需要介绍一个新的技术 ShardingJDBC.

什么是ShardingJDBC?

定位为轻量级 Java 框架,在 Java 的 JDBC 层提供的额外服务。 它使用客户端直连数据库,以 jar 包形式提供服务,无需额外部署和依赖,可理解为增强版的 JDBC 驱动,完全兼容 JDBC 和各种 ORM 框架。简单来说就是和增强版的JDBC用来操作数据库的.

使用Sharding-JDBC可以在程序中轻松的实现数据库读写分离。

在springboot项目中的实现只需要两步:

1.在pom.xml中增加shardingJdbc的maven坐标

<dependency>
    <groupId>org.apache.shardingsphere</groupId>
    <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
    <version>4.0.0-RC1</version>
</dependency>

2.在yml文件中加入数据源的配置

spring:
  shardingsphere:
    datasource:
      names:
        master,slave   # 维护了两个数据源,一个名为master,另一个名为slave
      master:   # 配置名为master的数据源
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://192.168.138.100:3306/rw?characterEncoding=utf-8
        username: root
        password: root
      slave:   # 配置名为slave的数据源
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://192.168.138.101:3306/rw?characterEncoding=utf-8
        username: root
        password: root
    masterslave:
      # 读写分离配置
      load-balance-algorithm-type: round_robin #采用轮询策略
      # 最终的数据源名称
      name: dataSource
      # 添加主库数据源名称
      master-data-source-name: master
      # 添加从库数据源名称列表,多个逗号分隔
      slave-data-source-names: slave   # 从库可以有多个,但是主库只能有一个
    props:
      sql:
        show: true #开启SQL显示,默认false
  main:
    allow-bean-definition-overriding: true   # 设置这个是为了使用后加载的数据源覆盖先加载的数
据源bean 原因是有一个同名的 dataSource 的bean在com.alibaba.druid.spring.boot.autoconfigure
包下的DruidDataSourceAutoConfigure类加载时已经声明了,而我们需要用到的是 shardingjdbc包下的
dataSource,所以我们需要配置上述属性,让后加载的覆盖先加载的。

这样就完成了在在springboot项目中的实现使用ShardingJDBC完成读写分离.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值