shardingsphere-proxy5.5.3分库分表+mysql9.7.1主从库读写分离
1、准备安装包,shardingsphere-proxy下载地址:https://shardingsphere.apache.org/document/current/en/downloads/
mysql9.7.1下载地址: https://dev.mysql.com/downloads/mysql/5.7.html ,
选个自己喜欢版本就行最新的都可以,我这里用9.7.1做示范。
注意选择压缩包不要用安装包,因为要做多个实例。
2、搭建mysql主从库主库写从库读,我这里只演示一个从。
2.1.1、配置主库
下载好的压缩包里面是没有my.ini文件的需要自己在根目录手动添加。(注意下载的安装包放在一个盘符下,文件名和路径中不能有空格)

文件里面添加端口,文件路径,serverid和logbin等信息
参考:
[mysqld]
port=3308
basedir=D:/mysql-9.7.1-winx64
datadir=D:/mysql-9.7.1-winx64/data
socket=D:/mysql-9.7.1-winx64/mysql.sock
pid-file=D:/mysql-9.7.1-winx64/mysql.pid
log-error=D:/mysql-9.7.1-winx64/data/error.log
server-id=1
log-bin=mysql-bin
binlog_format=ROW
binlog_expire_logs_seconds=604800
[mysql]
default-character-set=utf8mb4
2.1.2、以管理员身份打开cmd初始化主库:
cd /d D:\mysql-9.7.1-winx64\bin
mysqld --initialize --console --defaults-file=D:\mysql-9.7.1-winx64\my.ini
记下控制台输出的 root@localhost 临时密码。
2.1.3、注册主库服务:
mysqld --install MySQL-Master --defaults-file=D:\mysql-9.7.1-winx64\my.ini
启动服务:
net start MySQL-Master
2.1.4、启动成功后,用navicat客户端连接服务,修改root密码。
2.1.5、创建复制账号:
CREATE USER 'repl'@'127.0.0.1' IDENTIFIED BY 'Repl@123';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'127.0.0.1';
flush privileges;
查看主库位点:
SHOW BINARY LOG STATUS;
记录下返回的file和position,配置从库的时候用这个或者用自动的都行。
2.2.1、配置从库
把安装包复制一份,改下名字,我这里加的是slave

2.2.2、跟主库一样手动添加一个my.ini文件,改下端口号,文件路径,serverid,这里的serverid要跟主库的不一样,所有的实例,serverid都不能相同。
参考:
[mysqld]
port=3309
basedir=D:\mysql-9.7.1-winx64-slave
datadir=D:\mysql-9.7.1-winx64-slave\data
socket=D:\mysql-9.7.1-winx64-slave\mysql.sock
pid-file=D:\mysql-9.7.1-winx64-slave\mysql.pid
log-error=D:\mysql-9.7.1-winx64-slave\data\error.log
server-id=2
relay-log=relay-bin
log-bin=mysql-bin
binlog_format=ROW
binlog_expire_logs_seconds=604800
[mysql]
default-character-set=utf8mb4
2.2.3、初始化从库,如果这里data文件有冲突的话需要指定下data文件路径
mysqld --initialize --console --datadir=D:\mysql-9.7.1-winx64-slave\data
同样记录下从库临时密码。
2.2.4、注册从库服务:
mysqld --install MySQL-Slave --defaults-file=D:\mysql-9.7.1-winx64-slave\my.ini
启动服务:
net start MySQL-Slave
2.2.5、登录客户端修改密码。这里跟主库密码一致即可,后期数据同步的时候会把密码也同步的一致,如果想不一致需要配置(replicate-ignore-db=mysql 忽略主库密码)
2.2.6、建立主从复制,在从库执行:
这里file和pos就填上面记录的数据
CHANGE REPLICATION SOURCE TO
SOURCE_HOST='127.0.0.1',
SOURCE_PORT=3308,
SOURCE_USER='repl',
SOURCE_PASSWORD='Repl@123',
SOURCE_LOG_FILE='mysql-bin.000001',
SOURCE_LOG_POS=157,
SOURCE_AUTO_POSITION=0;
如果要自动就用
CHANGE REPLICATION SOURCE TO
SOURCE_HOST='127.0.0.1',
SOURCE_PORT=3308,
SOURCE_USER='repl',
SOURCE_PASSWORD='Repl@123',
SOURCE_AUTO_POSITION=1;
2.2.7、启动复制:
START REPLICA;
最后建个表验证下是否能够同步
3、使用shardingsphere-proxy分库分表:
3.1、下好连接mysql的java包mysql-connector-java-8.0.11.jar放到lib文件中,删除seat,hive相关的包。
3.2、yaml配置文件参考:
database-sharding.yaml:
databaseName: ebusinesss
dataSources:
write_ds:
url: jdbc:mysql://localhost:3308/ebusinesss_ydt?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true
username: root
password: master@123
connectionTimeoutMilliseconds: 30000
idleTimeoutMilliseconds: 60000
maxLifetimeMilliseconds: 1800000
maxPoolSize: 50
minPoolSize: 1
read_ds:
url: jdbc:mysql://localhost:3309/ebusinesss_ydt?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true
username: root
password: master@123
connectionTimeoutMilliseconds: 30000
idleTimeoutMilliseconds: 60000
maxLifetimeMilliseconds: 1800000
maxPoolSize: 50
minPoolSize: 1
write_ds_0:
url: jdbc:mysql://localhost:3308/ebusinesss_ydt_0?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true
username: root
password: master@123
connectionTimeoutMilliseconds: 30000
idleTimeoutMilliseconds: 60000
maxLifetimeMilliseconds: 1800000
maxPoolSize: 50
minPoolSize: 1
read_ds_0:
url: jdbc:mysql://localhost:3309/ebusinesss_ydt_0?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true
username: root
password: master@123
connectionTimeoutMilliseconds: 30000
idleTimeoutMilliseconds: 60000
maxLifetimeMilliseconds: 1800000
maxPoolSize: 50
minPoolSize: 1
rules:
- !READWRITE_SPLITTING
dataSourceGroups:
pr_ds_0:
writeDataSourceName: write_ds
readDataSourceNames:
- read_ds
loadBalancerName: round_robin
pr_ds_1:
writeDataSourceName: write_ds_0
readDataSourceNames:
- read_ds_0
loadBalancerName: round_robin
loadBalancers:
round_robin:
type: ROUND_ROBIN
- !SHARDING
tables:
product1:
actualDataNodes: pr_ds_${0..1}.product_${0..1}
databaseStrategy: #分库
standard:
shardingColumn: UserId
shardingAlgorithmName: database_inline
tableStrategy: #分表
standard:
shardingColumn: ProductId
shardingAlgorithmName: product_inline
shardingAlgorithms:
database_inline:
type: INLINE
props:
algorithm-expression: pr_ds_${UserId % 2}
product_inline:
type: INLINE
props:
algorithm-expression: product_${ProductId % 2}
- !SINGLE
tables:
- "pr_ds.*"
global.yaml:
transaction:
defaultType: LOCAL
props:
sql-show: true #开启日志
主库中建好库和表,ebusinesss_ydt和ebusinesss_ydt_0数据库,每个库里创建对应的product_0,product_1的表,添加字段Id,ProductId,UserId.
shardingsphere不会自动创建库和表,需要手动创建。
3.3、启动shardingsphere-proxy,进入bin目录,cmd:start.bat
3.4、进入navicat连接3307-shardingsphere-proxy端口,会自动映射逻辑库和表,在3307中添加两条数据:
1应该进入ebusinesss_ydt_0下的product_1,2应该进入ebusinesss_ydt下的product_0


ebusinesss_ydt的product_1是没有数据的

ebusinesss_ydt_0的product_0也是没有数据的

查看3309




最后查看下读写是否分离了


读的read_ds_0,也就是3309的ebusinesss_ydt_0

浙公网安备 33010602011771号