Sharding-Proxy 实现分库分表

一、简介

Sharding-Proxy是ShardingSphere的第二个产品。 它定位为透明化的数据库代理端,提供封装了数据库二进制协议的服务端版本,用于完成对异构语言的支持

目前先提供MySQL/PostgreSQL版本,它可以使用任何兼容MySQL/PostgreSQL协议的访问客户端(如:MySQL Command Client, MySQL Workbench, Navicat等)操作数据,

对DBA更加友好。

  • 向应用程序完全透明,可直接当做MySQL/PostgreSQL使用。
  • 适用于任何兼容MySQL/PostgreSQL协议的的客户端

定位为透明的数据库代理端

Sharding-Proxy独立应用,需要安装服务,进行分库分表或者读写分离配置,启动使用

二、安装

2.1 下载安装软件

 2.2 把下载之后压缩文件,解压,启动bin目录启动文件就可以了

tar zxvf apache-shardingsphere-5.0.0-beta-shardingsphere-proxy-bin.tar.gz

 

二、Sharding Proxy 配置 (分表)

2.1 进入conf目录,修改文件server.yaml,打开两段内容注释

 

2.2 进入conf目录,修改config-sharding.yaml

2.3 复制mysql驱动jar包到lib目录

2.4 配置分库分表规则

schemaName: sharding_db

dataSources:
  ds_0:
    url: jdbc:mysql://127.0.0.1:3306/edu_db_1?serverTimezone=UTC&useSSL=false
    username: root
    password: root
    connectionTimeoutMilliseconds: 30000
    idleTimeoutMilliseconds: 60000
    maxLifetimeMilliseconds: 1800000
    maxPoolSize: 50
    minPoolSize: 1
    maintenanceIntervalMilliseconds: 30000

rules:
- !SHARDING
  tables:
    t_order:
      actualDataNodes: ds_${0}.t_order_${0..1}
      tableStrategy:
        standard:
          shardingColumn: order_id
          shardingAlgorithmName: t_order_${order_id % 2}
      keyGenerateStrategy:
        column: order_id
        keyGeneratorName: snowflake
  bindingTables:
    - t_order
  defaultDatabaseStrategy:
    standard:
      shardingColumn: user_id
      shardingAlgorithmName: ds_${0}
  defaultTableStrategy:
    none:

2.5 启动Sharding-Proxy服务

(1)Sharding-Proxy默认端口号 3307

 

2.6 通过Sharding-Proxy启动端口进行连接

(1) 打开cmd窗口连接Sharding-Proxy,连接方式和连接mysql一样的

(2) 进行sql命令操作看到只有一个库

(3) 在sharding_db数据库创建表

create table if not exists t_order (
	order_id bigint not null,
	user_id int not null, 
	status varchar(5),
	primary key(order_id)
);

 (4) 向表添加一条记录

insert into t_order(order_id, user_id, status) values (11, 1, 'init');

(5) 回到本地3306端口实际数据库中,看到已经创建好了表和添加数据

 

三、Sharding Proxy 配置 (分库)

3.1 创建两个数据库

 3.2 找到conf目录,config-sharding.yaml

schemaName: sharding_db

dataSources:
  ds_0:
    url: jdbc:mysql://127.0.0.1:3306/edu_db_1?serverTimezone=UTC&useSSL=false
    username: root
    password: root
    connectionTimeoutMilliseconds: 30000
    idleTimeoutMilliseconds: 60000
    maxLifetimeMilliseconds: 1800000
    maxPoolSize: 50
    minPoolSize: 1
    maintenanceIntervalMilliseconds: 30000
  ds_1:
    url: jdbc:mysql://127.0.0.1:3306/edu_db_2?serverTimezone=UTC&useSSL=false
    username: root
    password: root
    connectionTimeoutMilliseconds: 30000
    idleTimeoutMilliseconds: 60000
    maxLifetimeMilliseconds: 1800000
    maxPoolSize: 50
    minPoolSize: 1
    maintenanceIntervalMilliseconds: 30000

rules:
- !SHARDING
  tables:
    t_order:
      actualDataNodes: ds_${0..1}.t_order_${1..2}
      tableStrategy:
        standard:
          shardingColumn: order_id
          shardingAlgorithmName: t_order_${order_id % 2 + 1}
      keyGenerateStrategy:
        column: order_id
        keyGeneratorName: snowflake
  bindingTables:
    - t_order
  defaultDatabaseStrategy:
    standard:
      shardingColumn: user_id
      shardingAlgorithmName: ds_${user_id % 2}
  defaultTableStrategy:
    none:

3.3 启动Sharding_Proxy服务

 3.4 打开cmd,连接Sharding_Proxy服务

mysql -P3307 -uroot -p

(1) 创建数据库表,向表添加记录

create table if not exists t_order (
	order_id bigint not null,
	user_id int not null, 
	status varchar(5),
	primary key(order_id)
);

insert into t_order(order_id, user_id, status) values (11, 1, 'init');

(2) 连接本地3306的MySql数据库服务器,表已经创建出来,表里面有数据

四、Sharding-Proxy配置(读写分离)

4.1 创建三个数据库

4.2 修改conf里面配置文件,config-readwrite-splitting.yaml

schemaName: readwrite_splitting_db

dataSources:
  write_ds:
    url: jdbc:mysql://127.0.0.1:3306/demo_ds_master?serverTimezone=UTC&useSSL=false
    username: root
    password: root
    connectionTimeoutMilliseconds: 30000
    idleTimeoutMilliseconds: 60000
    maxLifetimeMilliseconds: 1800000
    maxPoolSize: 50
    minPoolSize: 1
    maintenanceIntervalMilliseconds: 30000
  read_ds_0:
    url: jdbc:mysql://127.0.0.1:3306/demo_ds_slave_0?serverTimezone=UTC&useSSL=false
    username: root
    password: root
    connectionTimeoutMilliseconds: 30000
    idleTimeoutMilliseconds: 60000
    maxLifetimeMilliseconds: 1800000
    maxPoolSize: 50
    minPoolSize: 1
    maintenanceIntervalMilliseconds: 30000
  read_ds_1:
    url: jdbc:mysql://127.0.0.1:3306/demo_ds_slave_1?serverTimezone=UTC&useSSL=false
    username: root
    password: root
    connectionTimeoutMilliseconds: 30000
    idleTimeoutMilliseconds: 60000
    maxLifetimeMilliseconds: 1800000
    maxPoolSize: 50
    minPoolSize: 1
    maintenanceIntervalMilliseconds: 30000

rules:
- !READWRITE_SPLITTING
  dataSources:
    pr_ds:
      writeDataSourceName: write_ds
      readDataSourceNames:
        - read_ds_0
        - read_ds_1

4.3 启动Sharding-Proxy服务

4.4 通过cmd连接Sharding-Proxy,进行创建表和添加记录操作

(1)在主数据库和从数据库里面,都创建数据库表

(2)向表添加记录,不指定向哪个库添加

 把添加数据添加到主数据库里面

(3)查询数据库表数据,不指定查询哪个库

直接执行查询从库里面的数据

Sharding-JDBC与Sharding-Proxy视频教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值