Sharding-Proxy配置
将server.yaml里面的注释打开
Sharding-Proxy分表配置
- 创建一个数据库,名为“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.通过查询测试发现,查询只会查从库的数据,而不会去查主库的数据,出现这个结果即可证明 读写分离