简单实现基于ShardingSphere读写分离

mymx2
mymx2 2019-06-05 18:21
阅读需:0

上效果图:

先了解什么是ShardingSphere:查看

注意ShardingSphere还在孵化,选择要考虑。

  • 如果项目中已经有相关包,不用重复引入:


  • 如果你在使用blade,先删除spring自带数据源配置


  • yml配置:

spring:
  shardingsphere:
    datasource:
      names: master,slave0
      slave0:
        password: root
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-namecom.mysql.cj.jdbc.Driver
        url: jdbc:mysql://111.222.333.444:3306/xxx?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&useSSL=false&serverTimezone=GMT%2B8
        username: admin
      master:
        password: root
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-namecom.mysql.cj.jdbc.Driver
        url: jdbc:mysql://555.666.777.888:3306/xxx?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&useSSL=false&serverTimezone=GMT%2B8
        username: root
    masterslave:
      slave-data-source-names: slave0
      name: ms
      master-data-source-name: master
    props:
      sql:
        show: true

  • OK.已经完成了..开启trace级别日志查看insert和select效果吧

  • 没有两个mysql?简单贴下docker-compose:

spring:
  shardingsphere:
    datasource:
      names: master,slave0
      slave0:
        password: root
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-namecom.mysql.cj.jdbc.Driver
        url: jdbc:mysql://111.222.333.444:3306/xxx?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&useSSL=false&serverTimezone=GMT%2B8
        username: admin
      master:
        password: root
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-namecom.mysql.cj.jdbc.Driver
        url: jdbc:mysql://555.666.777.888:3306/xxx?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&useSSL=false&serverTimezone=GMT%2B8
        username: root
    masterslave:
      slave-data-source-names: slave0
      name: ms
      master-data-source-name: master
    props:
      sql:
        show: true

  • master:当前目录下mysql/conf.d/mysqld.cnf

spring:
  shardingsphere:
    datasource:
      names: master,slave0
      slave0:
        password: root
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-namecom.mysql.cj.jdbc.Driver
        url: jdbc:mysql://111.222.333.444:3306/xxx?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&useSSL=false&serverTimezone=GMT%2B8
        username: admin
      master:
        password: root
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-namecom.mysql.cj.jdbc.Driver
        url: jdbc:mysql://555.666.777.888:3306/xxx?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&useSSL=false&serverTimezone=GMT%2B8
        username: root
    masterslave:
      slave-data-source-names: slave0
      name: ms
      master-data-source-name: master
    props:
      sql:
        show: true

  • slave:当前目录下mysql/conf.d/mysqld.cnf

spring:
  shardingsphere:
    datasource:
      names: master,slave0
      slave0:
        password: root
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-namecom.mysql.cj.jdbc.Driver
        url: jdbc:mysql://111.222.333.444:3306/xxx?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&useSSL=false&serverTimezone=GMT%2B8
        username: admin
      master:
        password: root
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-namecom.mysql.cj.jdbc.Driver
        url: jdbc:mysql://555.666.777.888:3306/xxx?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&useSSL=false&serverTimezone=GMT%2B8
        username: root
    masterslave:
      slave-data-source-names: slave0
      name: ms
      master-data-source-name: master
    props:
      sql:
        show: true

当然如果你只有一个机子,那就复制docker-compose中的mysql并且修改端口号和挂载文件地址。

  • 大概主从同步流程

spring:
  shardingsphere:
    datasource:
      names: master,slave0
      slave0:
        password: root
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-namecom.mysql.cj.jdbc.Driver
        url: jdbc:mysql://111.222.333.444:3306/xxx?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&useSSL=false&serverTimezone=GMT%2B8
        username: admin
      master:
        password: root
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-namecom.mysql.cj.jdbc.Driver
        url: jdbc:mysql://555.666.777.888:3306/xxx?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&useSSL=false&serverTimezone=GMT%2B8
        username: root
    masterslave:
      slave-data-source-names: slave0
      name: ms
      master-data-source-name: master
    props:
      sql:
        show: true

至此,简单的msyql主从也配好了。然后自行测试吧。


评论
  • mtozhang
    2020-05-22 11:30
    数据源改了,程序启动不了,上述过程完成吗?
    16 回复