Sharding-Proxy-分表、分库、读写分离

Sharding-Proxy配置

将server.yaml里面的注释打开
在这里插入图片描述

Sharding-Proxy分表配置

  1. 创建一个数据库,名为“edu_db_1”
    在这里插入图片描述
    2.进入conf目录下的config-sharding.yaml,进行分表配置(打开注释即可),配置代码如下
schemaName: sharding_db
//配置数据库的用户密码
dataSourceCommon:
 username: root
 password: root
 connectionTimeoutMilliseconds: 30000
 idleTimeoutMilliseconds: 60000
 maxLifetimeMilliseconds: 1800000
 maxPoolSize: 50
 minPoolSize: 1
 maintenanceIntervalMilliseconds: 30000
dataSources:
 ds_0:
   url: jdbc:mysql://127.0.0.1:3306/edu_db_1?serverTimezone=UTC&useSSL=false

rules:
- !SHARDING
 tables:
   t_order:
     actualDataNodes: ds_${
    
    0..1}.t_order_${
    
    1..2}
     tableStrategy:
       standard:
         shardingColumn: order_id
         shardingAlgorithmName: t_order_inline
     keyGenerateStrategy:
       column: order_id
       keyGeneratorName: snowflake

 
 bindingTables:
   - t_order
   
 defaultDatabaseStrategy:
   standard:
     shardingColumn: user_id
     shardingAlgorithmName: database_inline
 defaultTableStrategy:
   none:
 
 shardingAlgorithms:

   database_inline:
     type: INLINE
     props:
       algorithm-expression: ds_${
    
    user_id % 2}

   t_order_inline:
     type: INLINE
     props:
       algorithm-expression: t_order_${
    
    order_id % 2+1}
 
 keyGenerators:
   snowflake:
     type: SNOWFLAKE
     props:
       worker-id: 123

3.如果是windows系统,打开bin目录,运行start.bat,显示如下结果,代表启动成功
在这里插入图片描述
4.cmd窗口,输入 mysql -P3307 -uroot -proot,显示如下图表示与sharding-Proxy连接成功
在这里插入图片描述5.继续执行创建表、插入数据的操作,会得到以下结果
在这里插入图片描述
6.刷新数据库,得到以下结果,说明分表实验成功
在这里插入图片描述

Sharding-Proxy分库配置

1.步骤同分表,但是需要创建两个数据库
在这里插入图片描述
2.进入conf目录下的config-sharding.yaml,进行分库配置,配置代码如下


schemaName: sharding_db

dataSourceCommon:
 username: root
 password: root
 connectionTimeoutMilliseconds: 30000
 idleTimeoutMilliseconds: 60000
 maxLifetimeMilliseconds: 1800000
 maxPoolSize: 50
 minPoolSize: 1
 maintenanceIntervalMilliseconds: 30000

dataSources:
 ds_0:
   url: jdbc:mysql://127.0.0.1:3306/edu_db_1?serverTimezone=UTC&useSSL=false
 ds_1:
   url: jdbc:mysql://127.0.0.1:3306/edu_db_2?serverTimezone=UTC&useSSL=false

rules:
- !SHARDING
 tables:
   t_order:
     actualDataNodes: ds_${
    
    0..1}.t_order_${
    
    0..1}
     tableStrategy:
       standard:
         shardingColumn: order_id
         shardingAlgorithmName: t_order_inline
     keyGenerateStrategy:
       column: order_id
       keyGeneratorName: snowflake
 
 bindingTables:
   - t_order
 defaultDatabaseStrategy:
   standard:
     shardingColumn: user_id
     shardingAlgorithmName: database_inline
 defaultTableStrategy:
   none:
 
 shardingAlgorithms:
   database_inline:
     type: INLINE
     props:
       algorithm-expression: ds_${
    
    user_id % 2}
   t_order_inline:
     type: INLINE
     props:
       algorithm-expression: t_order_${
    
    order_id % 2}
 
 keyGenerators:
   snowflake:
     type: SNOWFLAKE
     props:
       worker-id: 123

3.按照分表步骤执行,创建表和插入数据 语句如下
CREATE TABLE t_order(order_id BIGINT NOT NULL,user_id INT NOT NULL,status VARCHAR(50),PRIMARY KEY(order_id));
INSERT INTO t_order(order_id,user_id,status) VALUES(12,2,‘int’);
4.实现效果

在这里插入图片描述

Sharding-Proxy读写分离配置

1.进入如图的yaml文件
在这里插入图片描述2.在数据库中创建一个demo_primary_ds(主库),创建二个demo_replica_ds_0,demo_replica_ds_1(从库)
,配置代码如下

schemaName: replica_query_db

dataSourceCommon:
 username: root
 password: root
 connectionTimeoutMilliseconds: 30000
 idleTimeoutMilliseconds: 60000
 maxLifetimeMilliseconds: 1800000
 maxPoolSize: 50
 minPoolSize: 1
 maintenanceIntervalMilliseconds: 30000

dataSources:
 primary_ds:
   url: jdbc:mysql://127.0.0.1:3306/demo_primary_ds?serverTimezone=UTC&useSSL=false
 replica_ds_0:
   url: jdbc:mysql://127.0.0.1:3306/demo_replica_ds_0?serverTimezone=UTC&useSSL=false
 replica_ds_1:
   url: jdbc:mysql://127.0.0.1:3306/demo_replica_ds_1?serverTimezone=UTC&useSSL=false

rules:
- !REPLICA_QUERY
 dataSources:
   pr_ds:
     name: pr_ds
     primaryDataSourceName: primary_ds
     replicaDataSourceNames:
       - replica_ds_0
       - replica_ds_1

3.运行bin目录下的 start.bat,显示如图 则代表配置成功
在这里插入图片描述

4.cmd进入数据库mysql -P3307 -uroot -proot,输入show databases,显示replica_query_db,代表成功连接
在这里插入图片描述
5.进行读写分离测试,在主库以及两个从库分别创建表,以及插入数据
CREATE TABLE IF NOT EXISTS demo_primary_ds.t_order(order_id BIGINT NOT NULL,user_id INT NOT NULL,status VARCHAR(50),PRIMARY KEY(order_id));
CREATE TABLE IF NOT EXISTS demo_replica_ds_0.t_order(order_id BIGINT NOT NULL,user_id INT NOT NULL,status VARCHAR(50),PRIMARY KEY(order_id));

CREATE TABLE IF NOT EXISTS demo_replica_ds_1.t_order(order_id BIGINT NOT NULL,user_id INT NOT NULL,status VARCHAR(50),PRIMARY KEY(order_id));

INSERT INTO t_order(order_id,user_id,status) VALUES(12,2,‘int’);

INSERT INTO demo_replica_ds_0.t_order(order_id,user_id,status) VALUES(13,2,‘int’);

INSERT INTO demo_replica_ds_1.t_order(order_id,user_id,status) VALUES(15,2,‘int’);
结果如下图所示
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
6.通过查询测试发现,查询只会查从库的数据,而不会去查主库的数据,出现这个结果即可证明 读写分离
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44594263/article/details/112647299