otter+dble实现在线数据迁移、扩容

思路

otter读取binlog中的日志信息,导入扩容后的dble中。当原库和dble中数据同步完成时切换到新的路由。

工具

  • otter
  • dble(需做修改)
    修改版修改部分代码以兼容otter的复合语句,dble基于Mycat修复了较多bug

前提条件

  • 源数据库是 Mysql 并开启Row模式的Binlog(中途开启不仅丢失数据,还可能导致迁移失败)
  • 数据库默认字符集为GBK、UTF8、UTF8MB4、ISO-8859-1(otter 默认数据源只支持这些)
  • 如果进行扩容,源库不能有主键修改的相关操作

环境准备

  • zookeeper搭建,自行百度
  • otter搭建 QuickStart
  • dble搭建 dble-docs

具体步骤

  1. zookeeper配置


    otter+dble实现在线数据迁移、扩容_第1张图片
    zookeeper管理
  2. node配置


    otter+dble实现在线数据迁移、扩容_第2张图片
    node管理
  3. 数据源和数据表配置


    otter+dble实现在线数据迁移、扩容_第3张图片
    数据源配置.png

    otter+dble实现在线数据迁移、扩容_第4张图片
    数据表配置.png
  4. canal配置,设置位点信息为起始位置


    otter+dble实现在线数据迁移、扩容_第5张图片
    canal配置.png
  5. 添加Channel


    otter+dble实现在线数据迁移、扩容_第6张图片
    添加Channel.png
  6. 添加Pipeline,高级设置中选择跳过ddl异常


    otter+dble实现在线数据迁移、扩容_第7张图片
    编辑Pipeline.png

    otter+dble实现在线数据迁移、扩容_第8张图片
    高级设置跳过ddl异常.png
  7. 添加映射关系


    otter+dble实现在线数据迁移、扩容_第9张图片
    添加映射关系.png
  8. 启动


    otter+dble实现在线数据迁移、扩容_第10张图片
    启动.png

注意事项

  1. 原版本dble DruidInsertParse.java :221 处理如下 插入语句会报包含主键异常,需修改以兼容otter
         insert into `xxx`(`name` , `id`) values (1 , 1) on duplicate key update `name`=values(`name`) , `id`=values(`id`)
otter+dble实现在线数据迁移、扩容_第11张图片
代码修改.png
  1. 默认同步是从开启otter时binlog的当前位置开始,同步整个表需设置canal自定义位点为起始位点。
    • 在Mysql中执行show binary logs 查看初始binlog
    • 配置管理 > canal配置 > 位点自定义设置 > 位点信息: {"journalName":"mysql-bin.000001","position":0};


      otter+dble实现在线数据迁移、扩容_第12张图片
      binlog.png
  2. 关于全量同步还可以通过canal的自由门来实现

你可能感兴趣的:(otter+dble实现在线数据迁移、扩容)