windows下mysql 使用sharding-proxy5.1.1sharding-scaling4.1.1zookeeper3.6.4进行水平分表数据迁移
Posted 谋勇
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了windows下mysql 使用sharding-proxy5.1.1sharding-scaling4.1.1zookeeper3.6.4进行水平分表数据迁移相关的知识,希望对你有一定的参考价值。
记录使用官方工具进行水平分表迁移过程
流程图(随手画)
环境准备
根据官方4.1.1scaling和5.1.1proxy的文档
需要:
1、java1.8
2、sharding-proxy5.1.1 .tar.gz
3、sharding-scaling4.1.1 .tar.gz
4、zookeeper3.6.4 .tar.gz
5、源端数据库(5.1.15 ~ 5.7.x)
本文使用版本:
6、目标端数据库(5.1.15 ~ 5.7.x)
本文使用版本:
7、根据文档所需开启的权限
MySQL 需要开启binlog,binlog format为Row模式,且迁移时所使用用户需要赋予Replication相关权限
sharding-scaling4.1.1配置
根据文档配置所需:
- MySQL Connector/J-jar包 ,例如:mysql-connector-java-5.1.47.jar放置在lib文件夹下;
- 注意conf文件夹下的server.yaml配置文件中的端口号 在后续请求接口进行迁移和查询时使用;
sharding-proxy5.1.1配置
-
MySQL Connector/J-jar包 ,例如:mysql-connector-java-5.1.47.jar放置在lib文件夹下;
-
conf文件夹下的server.yaml配置文件
打开mode、rules处注解
注意格式
-
conf文件夹下的config-sharding.yaml(分库分表逻辑配置文件)(如果备份不要同前缀名)
寻找部分
If you want to connect to MySQL, you should manually copy MySQL driver to lib directory
打开注解 根据自身水平分表逻辑配置(yaml注意格式)
schemaName: sharding_db_1 #自定义代理数据库名称
dataSources:
db_0:
url: jdbc:mysql://127.0.0.1:3306/xxx?serverTimezone=UTC&useSSL=false&allowMultiQueries=true
username: root
password: xxxxxx
connectionTimeoutMilliseconds: 30000
idleTimeoutMilliseconds: 60000
maxLifetimeMilliseconds: 1800000
maxPoolSize: 50
rules:
- !SHARDING
tables:
biblio_temp:
actualDataNodes: db_0.biblio_temp_$->0..9
tableStrategy:
standard:
shardingColumn: school_id
shardingAlgorithmName: table-inline-biblio_temp
keyGenerateStrategy:
column: id
keyGeneratorName: snowflake
shardingAlgorithms:
table-inline-biblio_temp:
type: INLINE
props:
algorithm-expression: biblio_temp_$->school_id % 10
scalingName: default_scaling
scaling:
default_scaling:
input:
workerThread: 40
batchSize: 1000
output:
workerThread: 40
batchSize: 1000
streamChannel:
type: MEMORY
props:
block-queue-size: 10000
completionDetector:
type: IDLE
props:
incremental-task-idle-minute-threshold: 30
dataConsistencyChecker:
type: DATA_MATCH
props:
chunk-size: 1000
zookeeper配置
1、将conf文件夹下的zfg_simple.cfg复制一个名为zfg.cfg——此为默认加载配置文件
启动流程
1、sharding-scaling和zookeeper分别执行
zookeeper:
bin目录下zkServer.cmd(windows命令脚本)
sharding-scaling:
bin目录下
start.bat 脚本
2、因为sharding-proxy开启的zookeeper相关注册配置所以在zookeeper后执行
bin目录下
start.bat 脚本
如需修改默认启动端口3307 在当前目录下的 cmd命令界面 启动脚本 + 端口号
start.bat 3308
启动后连接proxy代理数据库和检查
1、连接代理端 切换数据库为代理数据库
2、根据sharding-proxy5.1.1文档使用DistSQL查询资源是否存在
SHOW SCHEMA RESOURCES # 与配置相同 则代理成功
根据官方文档信息在proxy代理数据库中创建需要水平分表的表(此表结构需与源端表结构相同),代理端会将目标端的数据库中创建相关逻辑表
请求sharding-scaling对外接口进行迁移和查询
根据4.1.1文档 接口为
get http://localhost:配置的端口号/shardingscaling/job/list # 查询当前所有任务列表
get http://localhost:配置的端口号/shardingscaling/job/progress/jobId # 查询目标任务id的任务进度
post http://localhost:配置的端口号/shardingscaling/job/stop
json参数:
jobId
post http://localhost:配置的端口号/shardingscaling/job/start
json参数:
根据文档scaling4.1.1文档继续配置
sourceDatasource为源端数据库配置
destinationDataSources为传输目标代理端数据库(proxy生成的代理端,通过代理端将数据分别传输至目标端的各个分表中)配置
注意:
sourceDatasource和sourceRule配置中的换行和空格也为格式
"ruleConfiguration":
"sourceDatasource": "db_0: !!org.apache.shardingsphere.orchestration.core.configuration.YamlDataSourceConfiguration\\n dataSourceClassName: com.zaxxer.hikari.HikariDataSource\\n properties:\\n jdbcUrl: jdbc:mysql://xxx.xxx.xxx.xxx:xxxx/xxx?serverTimezone=UTC&useSSL=false\\n username: root\\n password: xxxx\\n driverClassName: com.mysql.jdbc.Driver\\n connectionTimeout: 30000\\n idleTimeout: 60000\\n maxLifetime: 1800000\\n maxPoolSize: 50\\n minPoolSize: 1\\n",
"sourceRule": "tables:\\n biblio_temp:\\n actualDataNodes: db_0.biblio_temp\\n keyGenerator:\\n column: id\\n type: SNOWFLAKE",
"destinationDataSources":
"name": "sharding_db_1",
"password": "xxxx",
"url": "jdbc:mysql://127.0.0.1:proxy自定义启动端口号 默认为3307/sharding_db_1?serverTimezone=UTC&useSSL=false",
"username": "xxx"
,
"jobConfiguration":
"concurrency": 3
查询任务
开启迁移任务
查询任务列表
查询任务进度
当迁移任务请求成功后 就可根据jobId查询该任务的进度
以上是关于windows下mysql 使用sharding-proxy5.1.1sharding-scaling4.1.1zookeeper3.6.4进行水平分表数据迁移的主要内容,如果未能解决你的问题,请参考以下文章
ShardingSphere5.0.0-Sharding-proxy MySql 读写分离
mysql分库分表方案之sharding-jdbc使用(非demo示例)