Shardingsphere-Proxy 5.5.0部署
Shardingsphere系列目录:
【Springboot 集成 Shardingsphere-JDBC】
【Shardingsphere-Proxy 5.5.0部署】
【Shardingsphere-Proxy 5.5.0数据迁移】
背景
继上一篇【Springboot 集成 Shardingsphere-JDBC】 实现了真实的分库分表,但是我们每次线下查数据的时候不能一个一个表挨个查询吧?这样就需要一个代理数据库将分片数据库和表的数据汇聚起来,就用到了Shardingsphere-Proxy。
下载安装包
进入shardingsphere官网:
https://shardingsphere.apache.org/
Linux解压安装包
使用指令
tar -zxvf apache-shardingsphere-5.5.0-shardingsphere-proxy-bin.tar.gz
安装包解压后目录:
修改配置文件
进入config目录,修改两个配置文件
global.yaml
authority:
users:
- user: 该数据库代理登录用户名
password: 该数据库代理登录密码
privilege:
type: ALL_PERMITTED
props:
# 带路数据库端口号,默认3307
proxy-default-port: 3307
database-sharding.yaml
注:建议这里配置的数据库连接ip使用【公网地址】,之前碰到过迁移数据失败问题,查看其他配置实在没问题,将这里修改为用公网地址连接数据库后迁移成功
配置没有单表情况
databaseName: 代理数据库名
dataSources:
db0:
url: jdbc:mysql://localhost:3306/tss_db?allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai&characterEncoding=utf8&autoReconnect=true&useSSL=false&maxReconnects=666&failOverReadOnly=false&initialTimeout=10&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true
username: root
password: 1234
db1:
url: jdbc:mysql://localhost:3306/tss_db_2?allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai&characterEncoding=utf8&autoReconnect=true&useSSL=false&maxReconnects=666&failOverReadOnly=false&initialTimeout=10&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true
username: root
password: 1234
rules:
- !SHARDING
tables:
tss_table:
actualDataNodes: db$->{0..1}.tss_table_$->{1..31}
# 分片表后缀不是简单数字自增,可以使用英文逗号拼接
tss_tenant_table:
actualDataNodes: db$->{0..1}.tss_tenant_table_0${1..9},db$->{0..1}.tss_tenant_table_$->{1..31}
配置有单表的情况
背景
一个工程需要连接三个数据库,一个数据库中放的全是未分片的单表
,另两个数据库有实现分库的分片表
,这种情况需要进行如下配置。
databaseName: 代理数据库名
dataSources:
db:
url: jdbc:mysql://localhost:3306/tss_db?allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai&characterEncoding=utf8&autoReconnect=true&useSSL=false&maxReconnects=666&failOverReadOnly=false&initialTimeout=10&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true
username: root
password: 1234
db0:
url: jdbc:mysql://localhost:3306/tss_db1?allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai&characterEncoding=utf8&autoReconnect=true&useSSL=false&maxReconnects=666&failOverReadOnly=false&initialTimeout=10&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true
username: root
password: 1234
db1:
url: jdbc:mysql://localhost:3306/tss_db_2?allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai&characterEncoding=utf8&autoReconnect=true&useSSL=false&maxReconnects=666&failOverReadOnly=false&initialTimeout=10&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true
username: root
password: 1234
rules:
- !SHARDING
tables:
tss_table:
actualDataNodes: db$->{0..1}.tss_table_$->{1..31}
# 分片表后缀不是简单数字自增,可以使用英文逗号拼接
tss_tenant_table:
actualDataNodes: db$->{0..1}.tss_tenant_table_0${1..9},db$->{0..1}.tss_tenant_table_$->{1..31}
# 单表配置
test_single_table:
actualDataNodes: db.test_single_table
注意:这个yaml中的【databaseName】
参数是必须的,并且内容不能是【shardingsphere】
,因为这个【shardingsphere】数据库在这个代理创建的时候就已经有了。
引入数据库驱动
将数据库驱动放到lib目录下,我放的版本是【mysql-connector-java-8.0.23.jar】。
注意:
1. 官网说放到ext-lib目录下,这个我试过,放到lib和ext-lib都可以使用,看个人喜好吧。
2. 这个驱动最好放新版本的,不要放太老的,可能会出问题。
启动代理
进入【bin】目录,执行指令:
./start.sh
截图红框中的路径就是日志文件所在路径,可以通过以下指令查看日志:
cat /opt/middle/shardingsphere_proxy/apache-shardingsphere-5.5.0-shardingsphere-proxy-bin/logs/stdout.log
连接代理数据库
Navicate工具连接
MYSQL客户端连接
执行指令:
mysql -h${proxy_host} -P${proxy_port} -u${proxy_username} -p${proxy_password}