Springboot之读写分离

当读和写所有压力都集中在一台数据库上承担时,压力大。并且若是数据库服务器磁盘损坏则会数据丢失,单点故障,因为所有数据都放在这一台服务器上。所以优化方向针对这两部分进行。

Mysql主从复制

介绍

配置

前置条件

准备好两台服务器,可以使用本机加上一台虚拟机,在虚拟机上需要安装mysql。可以使用下面命令查看MySQL服务是否打开

systemctl status mysqld

配置主库master

首先需要其用二进制文件,并且给服务器一个唯一的标识,因为主从复制会涉及到多台的服务器,每个服务器需要有自己的唯一标识。通过vim /etc/my.cnf进入修改配置文件。

vim /etc/my.cnf

第二步:重启Mysql服务

systemctl restart mysqld

第三步:登录Mysql数据库,创建用户并给用户赋予权限

因为主从复制时会涉及到,从库slave会向主库master请求日志,因此主库和从库之间是需要通信的,所以需要认证身份和权限。在从库时会使用到这个用户。mysql8需要先创建用户再赋予权限。

CREATE USER 用户名 IDENTIFIED WITH 'mysql_native_password' BY '密码';
GRANT REPLICATION SLAVE ON *.* TO 用户名;

第四步

在MySQL数据库下执行

show master status

配置从库slave

第一步:首先配置服务器的id

vim /etc/my.cnf

第二步:重启MySQL服务

systemctl restart mysqld

第三步:根据主库的实际的用户的值以及日志的位置进行修改

第四步:查看数据库的状态

可能遇到的问题:

  1. 若一直显示connecting可能是密码输入问题,也可能是未关闭防火墙,或者开启防火墙的3306端口

  1. 若是使用的是两台虚拟机,采用了虚拟机克隆技术的话,则需要修改slave从数据库的uuid(75条消息) 克隆的虚拟机导致mysql主从UUID一致怎么修改_数据库主从同步修改uuid_WuYle的博客-CSDN博客。但是采用本机与虚拟机的数据库则不需要。(75条消息) 关于MySQL5.7修改auto.cnf中UUID的值,启动报异常的问题_StromNing的博客-CSDN博客_auto.cnf(75条消息) 解决MySQL主从复制时主机和从机UUID相同问题_海并不深的博客-CSDN博客_csdn搜索:克隆的虚拟机导致mysql主从uuid一致怎么修改

读写分离案例

背景

什么是ORM框架(75条消息) ORM框架简介_papima的博客-CSDN博客_orm框架

什么是JDBCJDBC详解 - ErBing - 博客园 (cnblogs.com)

入门案例

导入Maven坐标
<dependency>
    <groupId>org.apache.shardingsphere</groupId>
    <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
    <version>4.0.0-RC1</version>
</dependency>
在配置文件中配置读写分离规则
spring:
  shardingsphere:
    datasource:
      names:
        master,slave
      # 主数据源
      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#主库的ip及数据库rw
        username: root
        password: root
      # 从数据源
      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#从库的ip以及数据库rw
        username: root
        password: root
    masterslave:
      # 读写分离配置
      load-balance-algorithm-type: round_robin#负载均衡,这里设置的是从库的负载均衡,因为查询的从库可以    #有多个,这里的策略是轮询查询从库 
      # 最终的数据源名称 
      name: dataSource#bean的名字 
      # 主库数据源名称
      master-data-source-name: master
      # 从库数据源名称列表,多个逗号分隔
      slave-data-source-names: slave
    props:
      sql:
        show: true #开启SQL显示,默认false

其中names表示的是数据源的名字,下面的名字与其对应,其中从库的数据源可以有多个,按照上面的格式定义好就行,后续就交由框架进行处理,若是查询操作会自动的调用从库,若是增删改会自动的使用主库。

在配置文件中配置允许bean定义覆盖配置项

因为在shardingspherejdbc配置类中要创建数据源对象,但是在DruidDataSourceAutoConfigure中也想创建数据源对象dataSource。在配置文件中加入最后两行

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值