瑞吉外卖使用mysql主从复制实现项目的读写分离

瑞吉外卖使用mysql主从复制实现项目的读写分离

  • 一 mysql主从分离
    • 主从分离介绍
    • 前置条件:
    • 虚拟机的克隆
    • linux系统上mysql主从复制的搭建过程
  • 二 搭建Sharding-Jdbc框架,基于mysql主从复制功能实现项目的读写分离
    • Sharding-Jdbc介绍
    • 搭建SpringBoot工程框架
    • 配置文件相关注意点

一 mysql主从分离

主从分离介绍

瑞吉外卖使用mysql主从复制实现项目的读写分离_第1张图片

前置条件:

在VM上准备好两台linux虚拟机安装好mysql

虚拟机的克隆

克隆后需修改uuid,ip地址,网卡mac地址
https://blog.csdn.net/qq_35461394/article/details/92788603

linux系统上mysql主从复制的搭建过程

搭建步骤如下:
https://blog.csdn.net/qq_33382925
注意点:如Slave_IO_Running:No ——则克隆后的虚拟机未完成UUID的修改
修改UUID步骤如下:
https://blog.csdn.net/qq_54217349
搭建完成后使用navicat连接两台linux系统上的数据库,注意需开启两台虚拟机的防火墙,相关命令如下
瑞吉外卖使用mysql主从复制实现项目的读写分离_第2张图片
连接两台数据库成功,准备好java项目
瑞吉外卖使用mysql主从复制实现项目的读写分离_第3张图片

二 搭建Sharding-Jdbc框架,基于mysql主从复制功能实现项目的读写分离

Sharding-Jdbc介绍

搭建SpringBoot工程框架

  • boot版本为2.4.5,引入Sharding—jdbc框架及相关依赖
 <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.5</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <properties>
        <java.version>1.8</java.version>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <dependencies>
        <!--阿里云短信服务-->
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-core</artifactId>
            <version>4.5.16</version>
        </dependency>
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
            <version>2.1.0</version>
        </dependency>
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>dysmsapi20170525</artifactId>
            <version>2.0.18</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <scope>compile</scope>
        </dependency>

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.2</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.20</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.76</version>
        </dependency>

        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.6</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.23</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-cache</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

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

    </dependencies>
    
  • 配置文件配置从主数据源,实现读写分离功能
server:
  port: 8080
spring:
  application:
    name: reggie_take_out
  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.25.100:3306/reggie?characterEncoding=utf-8&useSSL=false
        username: root
        password: cxw123
      # 从数据源
      slave:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://192.168.25.101:3306/reggie?characterEncoding=utf-8&useSSL=false
        username: root
        password: cxw123
    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: localhost
    port: 6379
    #password: 123456
    database: 0 #操作的是0号数据库
    jedis:
      #Redis连接池配置
      pool:
        max-active: 8 #最大连接数
        max-wait: 1ms #连接池最大阻塞等待时间
        max-idle: 4 #连接池中的最大空闲连接
        min-idle: 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:\reggiephtot\

配置文件相关注意点

  1. 如遇配置从主数据源爆红,启动无限报错,只需在url后面添加&useSSL=false即可,上述代码已给出

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