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配置

根据文档配置所需:

  1. MySQL Connector/J-jar包 ,例如:mysql-connector-java-5.1.47.jar放置在lib文件夹下;
  2. 注意conf文件夹下的server.yaml配置文件中的端口号 在后续请求接口进行迁移和查询时使用;

sharding-proxy5.1.1配置

  1. MySQL Connector/J-jar包 ,例如:mysql-connector-java-5.1.47.jar放置在lib文件夹下;

  2. conf文件夹下的server.yaml配置文件
    打开mode、rules处注解
    注意格式

  3. 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 读写分离

sharding键的选择

轻量级Mysql Sharding中间件——Shark

mysql分库分表方案之sharding-jdbc使用(非demo示例)

SpringBoot+MybatisPlus+Mysql+Sharding-JDBC分库分表实践

Mqsql使用Sharding-JDBC案例实战