【java】【项目实战】[外卖十]项目优化(mysql读写分离)

目录

一、问题说明

 二、读写分离示例

三、Mysql主从复制

3.1 介绍

3.2 配置

3.2.1 前置条件

 3.2.2 配置-主库Master

3.2.2.1 第一步

3.2.2.2 第二步 

 3.2.2.3 第三步

3.2.2.4 第四步

3.2.3 配置-从库Slave

3.2.3.1 第一步

3.2.3.2 第二步

3.2.3.3 第三步

3.2.3.4 第四步

3.3 测试

四、读写分离案例

4.1 背景

4.2 Sharding-JDBC介绍

4.3 入门案例

4.4 功能测试

五、项目实现读写分离

5.1 数据库环境准备(主从复制)

5.2 代码改造

5.2.1 maven坐标

 5.2.2 配置读写分离规则与允许定义bean覆盖

5.3 功能测试


前言:实现数据读写分离

一、问题说明

【java】【项目实战】[外卖十]项目优化(mysql读写分离)_第1张图片

 二、读写分离示例

【java】【项目实战】[外卖十]项目优化(mysql读写分离)_第2张图片

三、Mysql主从复制

3.1 介绍

【java】【项目实战】[外卖十]项目优化(mysql读写分离)_第3张图片

3.2 配置

3.2.1 前置条件

【java】【项目实战】[外卖十]项目优化(mysql读写分离)_第4张图片

 3.2.2 配置-主库Master

3.2.2.1 第一步

【java】【项目实战】[外卖十]项目优化(mysql读写分离)_第5张图片

3.2.2.2 第二步 

【java】【项目实战】[外卖十]项目优化(mysql读写分离)_第6张图片

systemctl restart mysqld

 3.2.2.3 第三步

【java】【项目实战】[外卖十]项目优化(mysql读写分离)_第7张图片  

GRANT REPLICATION SLAVE ON *.* to 'xiaoming'@'%' identified by 'Root@123456';

3.2.2.4 第四步

【java】【项目实战】[外卖十]项目优化(mysql读写分离)_第8张图片

show master status;

  

3.2.3 配置-从库Slave

3.2.3.1 第一步

【java】【项目实战】[外卖十]项目优化(mysql读写分离)_第9张图片

3.2.3.2 第二步

【java】【项目实战】[外卖十]项目优化(mysql读写分离)_第10张图片

systemctl restart mysqld

3.2.3.3 第三步

【java】【项目实战】[外卖十]项目优化(mysql读写分离)_第11张图片

# 根据master第四步查询结果更改

change master to master_host='192.168.138.100',master_user='xiaoming',master_password='Root@123456',master_log_file='mysql-bin.000001',master_log_pos=441;

如有错误按图操作


start slave;

3.2.3.4 第四步

 【java】【项目实战】[外卖十]项目优化(mysql读写分离)_第12张图片

show slave status;

 复制到文本编译器查看

【java】【项目实战】[外卖十]项目优化(mysql读写分离)_第13张图片

3.3 测试

使用数据库连接工具测试,主库进行操作,查看从库

【java】【项目实战】[外卖十]项目优化(mysql读写分离)_第14张图片

四、读写分离案例

4.1 背景

【java】【项目实战】[外卖十]项目优化(mysql读写分离)_第15张图片

4.2 Sharding-JDBC介绍

【java】【项目实战】[外卖十]项目优化(mysql读写分离)_第16张图片

4.3 入门案例

【java】【项目实战】[外卖十]项目优化(mysql读写分离)_第17张图片

server:
  port: 8080
mybatis-plus:
  configuration:
    #在映射实体或者属性时,将数据库中表名和字段名中的下划线去掉,按照驼峰命名法映射
    map-underscore-to-camel-case: true
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  global-config:
    db-config:
      id-type: ASSIGN_ID
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
        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
        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  # 不配置会出现下图报错

  报错:【java】【项目实战】[外卖十]项目优化(mysql读写分离)_第18张图片

4.4 功能测试

五、项目实现读写分离

5.1 数据库环境准备(主从复制)

【java】【项目实战】[外卖十]项目优化(mysql读写分离)_第19张图片

5.2 代码改造

【java】【项目实战】[外卖十]项目优化(mysql读写分离)_第20张图片

5.2.1 maven坐标


  4.0.0

  com.runa
  reggie_take_out_spuer
  1.0-SNAPSHOT
  jar

  
    org.springframework.boot
    spring-boot-starter-parent
    2.4.5
     
  

  reggie_take_out_spuer
  http://maven.apache.org

  
    UTF-8
    1.8
  

  
    
    
      com.aliyun
      aliyun-java-sdk-core
      4.5.16
    
    
      com.aliyun
      aliyun-java-sdk-dysmsapi
      2.1.0
    
    
      org.springframework.boot
      spring-boot-starter
    

    
      org.springframework.boot
      spring-boot-starter-test
      test
    

    
      org.springframework.boot
      spring-boot-starter-web
      compile
    

    
      com.baomidou
      mybatis-plus-boot-starter
      3.4.2
    

    
      org.projectlombok
      lombok
      1.18.20
    

    
      com.alibaba
      fastjson
      1.2.76
    

    
      commons-lang
      commons-lang
      2.6
    

    
      mysql
      mysql-connector-java
      runtime
    

    
      com.alibaba
      druid-spring-boot-starter
      1.1.23
    

    
      junit
      junit
      3.8.1
      test
    

    
    
      org.springframework.boot
      spring-boot-starter-data-redis
    

    
    
      org.springframework.boot
      spring-boot-starter-cache
    

    
    
      org.apache.shardingsphere
      sharding-jdbc-spring-boot-starter
      4.0.0-RC1
    

  

  
    
      
        org.springframework.boot
        spring-boot-maven-plugin
        2.4.5
      
    
  

 5.2.2 配置读写分离规则与允许定义bean覆盖

server:
  port: 8080
spring:
  application:
    # 应用名称 可选
    name: reggie_take_out_spuer
  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/reggie?characterEncoding=utf-8
        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/reggie?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
  redis:
    host: 127.0.0.1
    port: 6379
    password: 123456
    database: 0
  cache:
    redis:
      time-to-live: 1800000  # 设置缓存数据的过期时间
mybatis-plus:
  configuration:
    #在映射实体或者属性时,将数据库中表名和字段名中的下划线去掉,按照驼峰命名法映射
    map-underscore-to-camel-case: true
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  global-config:
    db-config:
      id-type: ASSIGN_ID
# 文件上传目录
reggie:
  path: D:\images\

5.3 功能测试

你可能感兴趣的:(java,mysql,数据库)