文章目录
1 创建三个数据库
一主二从
CREATE SCHEMA `demo_ds_master` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ;
CREATE SCHEMA `demo_ds_slave_0` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ;
CREATE SCHEMA `demo_ds_slave_1` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ;
2 修改conf目录的conf-master-slave.yaml
schemaName: master_slave_db
dataSources:
master_ds:
url: jdbc:mysql://127.0.0.1:3306/demo_ds_master?serverTimezone=UTC&useSSL=false
username: root
password: chengwen
connectionTimeoutMilliseconds: 30000
idleTimeoutMilliseconds: 60000
maxLifetimeMilliseconds: 1800000
maxPoolSize: 50
slave_ds_0:
url: jdbc:mysql://127.0.0.1:3306/demo_ds_slave_0?serverTimezone=UTC&useSSL=false
username: root
password: chengwen
connectionTimeoutMilliseconds: 30000
idleTimeoutMilliseconds: 60000
maxLifetimeMilliseconds: 1800000
maxPoolSize: 50
slave_ds_1:
url: jdbc:mysql://127.0.0.1:3306/demo_ds_slave_1?serverTimezone=UTC&useSSL=false
username: root
password: chengwen
connectionTimeoutMilliseconds: 30000
idleTimeoutMilliseconds: 60000
maxLifetimeMilliseconds: 1800000
maxPoolSize: 50
masterSlaveRule:
name: ms_ds
masterDataSourceName: master_ds
slaveDataSourceNames:
- slave_ds_0
- slave_ds_1
3 启动Sharding-Proxy服务
3.1 进入Sharding-Proxy的bin目录
chengwen@chengwen bin % ./start.sh
Starting the Sharding-Proxy ...
Please check the STDOUT file: /Users/chengwen/apache-shardingsphere-incubating-4.0.1-sharding-proxy-bin/logs/stdout.log
chengwen@MacBook-Pro bin %
3.2 出现3307端口并且ACTIVE表示启动成功
[INFO ] 12:28:06.822 [nioEventLoopGroup-2-1] i.n.handler.logging.LoggingHandler - [id: 0xcedc789a] REGISTERED
[INFO ] 12:28:06.823 [nioEventLoopGroup-2-1] i.n.handler.logging.LoggingHandler - [id: 0xcedc789a] BIND: 0.0.0.0/0.0.0.0:3307
[INFO ] 12:28:06.825 [nioEventLoopGroup-2-1] i.n.handler.logging.LoggingHandler - [id: 0xcedc789a, L:/0.0.0.0:3307] ACTIVE
4 通过Navicat for MySQL 连接sharding-proxy 服务端
4.1 查看数据库
show DATABASES;
master_slave_db
sharding_db
4.1 在主数据库和从数据库中都创建表
USE master_slave_db;
create table if not exists demo_ds_master.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_ds_slave_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_ds_slave_1.t_order(
order_id bigint not null,
user_id int not null,
status varchar(50),
primary key(order_id)
);
show tables;
t_order
4.2 向表中添加数据(不指定数据库)
insert into t_order(order_id,user_id,status) values (11,1,'init');
默认向主表中添加数据
默认从库中查询数据,从库中没有查到,主库中可以查到,实现了读写分离。
4.3 分别向从库中添加数据
insert into demo_ds_slave_0.t_order(order_id,user_id,status) values (12,1,'init');
insert into demo_ds_slave_1.t_order(order_id,user_id,status) values (13,1,'init');