mysql的主从复制+springboot实现读写分离

-mysql的主从复制:为了解决单台数据库的压力,一般需要两台数据库来分担压力。需要解决两台数据库之间的数据一致性问题。解决过程可以理解为从库在主库那里得到日志文件,之后运行日志,得到新库。

-配置主库:
1、修改mysql配置文件/etc/my.cnf,添加配置项:
在这里插入图片描述
2、重启服务: systemctl restart mysqld
3、执行sql语句:GRANT REPLICATION SLAVE ON . to ‘xiaoming’@‘%’ identified by ‘Root@123456’;(用于复制日志文件时的相应权限。)
4、查看主库状态:show master status;
mysql的主从复制+springboot实现读写分离_第1张图片

-配置从库:
1、修改mysql配置文件/etc/my.cnf,添加配置项:
在这里插入图片描述
2、重启服务: systemctl restart mysqld

3、执行sql命令:
change master to master_host= ‘192.168.157.100’,master_user=‘xiaoming’,master_password=‘Root@123456’ ,master_log_file=‘mysql-bin.000001’,master_log_pos=441;

start slave;

4、查看从库状态:show slave status;

-测试:略,可以看到,从库的建库建表以及数据相关操作和主库会保持一致。

-在项目中实现读写分离:
1、导入maven坐标:

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

2、修改配置:

spring:
#  datasource:
#    druid:
#      driver-class-name: com.mysql.cj.jdbc.Driver
#      url: jdbc:mysql://localhost:3306/db1?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
#      username: root
#      password: root
  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.157.100:3306/db1?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false
        username: root
        password: root
      slave:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://192.168.157.101:3306/db1?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false
        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
  main:
   allow-bean-definition-overriding: true

注意:如果连接的是虚拟机上的数据库,需要加参数useSSL=false,即jdbc:mysql://192.168.157.101:3306/db1useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false
说明:useSSL=true是进行安全验证,一般通过证书或者令牌,useSSL=false就是通过账号密码进行连接,通常使用useSSL=false。

3、运行项目测试:略。

你可能感兴趣的:(spring,boot,mysql,java)