乐趣区

关于数据库:快速搞定将分库分表数据汇聚到一张表CloudCanal实战

简述

CloudCanal 2.X 版本近期反对了自定义代码能力,带来了丰盛的场景化数据能力,本文次要介绍在面向 To C 业务分库分表状况下,如何通过 CloudCanal 进行数据实时汇聚。

本计划特点:

  • 数据处理灵便,适配多变的业务数据汇聚需要
  • 针对大部分带构造数据源互通,可触类旁通
  • 稳定性较好

技术点

束缚抵触

对于一部分分库分表中间件或业务本人写的拆分逻辑,并没有思考写入数据主键或者惟一字段值的全局惟一问题,导致做数据汇聚时束缚抵触。

另一类零碎,在业务上就独立,做数据会集时,除了束缚抵触,还存在构造不统一,数据标准不对立的问题。

对以上两种状况,增加额定的字段以打消分表之间的束缚抵触,进行数据荡涤、结构调整,将数据进行规整。自定义代码可能很好的实现这种使命。

DDL 同步

分库分表数据汇聚还存在一个较大的问题是 DDL 同步,对于大部分这类场景, 相似的 DDL 会在源端执行多遍,然而在对端只能执行一遍,并且数据和局部 DDL 有程序依赖问题 — 只有 DDL 在对端执行胜利之后,新的数据能力写入或者执行。

咱们目前倡议不同步 DDL, 依照肯定标准进行源和指标端 DDL 变更,达到不提早且 DDL 不处于中间状态的目标。

操作示例

前置条件:

  • CloudCanal 社区版部署, 参见 社区版装置文档
  • 筹备好 MySQL 数据库(本例源端 5.7,指标端 8.0)
  • 源端 MySQL 上创立 2 个分库(shard_1shard_2), 表构造统一(本例每一个分库只有一张分表)

     CREATE TABLE `shard_1`.`my_order` (`id` bigint(19) NOT NULL AUTO_INCREMENT,
      `gmt_create` datetime NOT NULL,
      `gmt_modified` datetime NOT NULL,
      `product_id` bigint(20) NOT NULL,
      `user_id` bigint(20) NOT NULL,
       PRIMARY KEY (`id`)
     ) ENGINE=InnoDB AUTO_INCREMENT=35 DEFAULT CHARSET=utf8
    
     CREATE TABLE `shard_2`.`my_order` (`id` bigint(19) NOT NULL AUTO_INCREMENT,
      `gmt_create` datetime NOT NULL,
      `gmt_modified` datetime NOT NULL,
      `product_id` bigint(20) NOT NULL,
      `user_id` bigint(20) NOT NULL,
      PRIMARY KEY (`id`)
     ) ENGINE=InnoDB AUTO_INCREMENT=35 DEFAULT CHARSET=utf8
  • 指标 MySQL 上创立 1 个汇聚库(no_shard), 并蕴含 1 张汇聚表

    • %(#ea1f1f)[额定多出 region 字段,该字段通过自定义代码固定生成]
    • %(#ea1f1f)[源端主键 id 和生成字段 region 组合成联结主键,不便数据汇聚时放弃惟一]
     CREATE TABLE `my_order` (
    `id` bigint NOT NULL,
    `region` varchar(64) NOT NULL,
    `gmt_create` datetime NOT NULL,
    `gmt_modified` datetime NOT NULL,
    `product_id` bigint NOT NULL,
    `user_id` bigint NOT NULL,
      PRIMARY KEY (`id`,`region`)
     ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3

开发宽表代码

  • 代码工程 cloudcanal-data-process,并找到代码类 MySqlPartitionToMySql1_user_1.java 和 MySqlPartitionToMySql2_user_1.java
  • 为了清晰,本案例对于不同的源库,应用不同的自定义代码,实际上两者逻辑统一,只是匹配库表是有所不同。

增加数据源

  • 登录 CloudCanal 平台
  • 数据源治理 -> 新增数据源
  • 将源端和指标端MySQL 别离增加

分库 shard_1 工作创立

  • 工作治理 -> 工作创立
  • 抉择 指标 数据源
  • 抉择 数据同步 ,并勾选 全量数据初始化, 其余选项默认
  • 抉择须要迁徙同步的表, 此处只有抉择待聚合表即可,对端抉择聚合表
  • 批改自定义代码,并打包

    % pwd
    /Users/zylicfc/source/product/cloudcanal/cloudcanal-data-process
    % mvn -Dtest -DfailIfNoTests=false -Dmaven.javadoc.skip=true - 
    Dmaven.compile.fork=true clean package

  • 抉择列, 默认全选,%(#ea1f1f)[抉择上传代码包 1]
  • 确认创立, 并主动运行

分库 shard_2 工作创立

  • 工作治理 -> 工作创立
  • 抉择 指标 数据源
  • 抉择 数据同步 ,并勾选 全量数据初始化, 其余选项默认
  • 抉择须要迁徙同步的表, 此处只有抉择待聚合表即可,对端抉择聚合表
  • 批改自定义代码,并打包

    % pwd
    /Users/zylicfc/source/product/cloudcanal/cloudcanal-data-process
    % mvn -Dtest -DfailIfNoTests=false -Dmaven.javadoc.skip=true - 
    Dmaven.compile.fork=true clean package

  • 抉择列, 默认全选,%(#ea1f1f)[抉择上传代码包 2]
  • 确认创立, 并主动运行

分库工作状态

  • 两个分库汇聚工作失常运行

校验数据

  • 变更 shard_1 数据
  • 变更 shard_2 数据
  • 查看 no_shard 汇聚库数据

常见问题

是否反对带数字后缀的分表

反对,就是在自定义代码中匹配表名会略微简单些,须要自行批改匹配逻辑。

是否反对异构数据库

反对,自定义代码是 CloudCanal 通用性能,可实现自在的数据变幻。然而对于具体的指标数据源,行为可能会产生一些轻微变动,须要进行肯定的测试和验证。

如果遇到出错或者问题怎么办?

如果会 java 开发,倡议关上工作的 printCustomCodeDebugLog 察看输入的数据是否合乎预期,如果不合乎预期,能够关上工作的 debugMode 参数,对数据转换逻辑进行调试。

如果不会 java 开发, 找 CloudCanal 同学帮助。

总结

本文简略介绍了如何应用 CloudCanal 进行分库分表数据汇聚。各位读者敌人,如果你感觉还不错,请点赞、评论加转发吧。

更多精彩

  • 5 分钟搞定 MySQL 到 ClickHouse 宽表构建和同步 -CloudCanal 实战
  • 5 分钟搞定 MySQL 到 ElasticSearch 宽表构建和同步 -CloudCanal 实战
  • 异地多活根底之数据双向同步进阶篇 -CloudCanal 实战
  • 5 分钟搞定 MySQL 到 ClickHouse 实时数据同步进阶篇 -CloudCanal 实战
  • 支流关系型数据库到 Kudu 实时数据同步 -CloudCanal 实战
  • 5 分钟搞定 MySQL 到 ElasticSearch 迁徙同步 -CloudCanal 实战
  • 5 分钟搞定 MySQL 到 MySQL 异构在线数据迁徙同步 -CloudCanal 实战
  • MySQL 到 ElasticSearch 实时同步构建数据检索服务的选型与思考
  • 构建基于 Kafka 直达的混合云在线数据生态 -cloudcanal 实战
  • 5 分钟搞定 MySQL 到 TiDB 的数据同步 – CloudCanal 实战

退出社区

咱们创立了 CloudCanal 微信交换群,在外面,您能够失去最新版本公布信息和资源链接,您能看到其余用户一手评测、应用状况,您更能失去激情的问题解答,当然您还能够给咱们提需要和问题。扫描下方二维码,增加咱们小助手微信 suhuayue001 拉您进群,备注: 加 CloudCanal 群
退出 CloudCanal 粉丝群把握一手音讯和获取更多福利,请增加咱们小助手微信:suhuayue001
CloudCanal- 收费好用的企业级数据同步工具,欢送品鉴。
理解更多产品能够查看官方网站:http://www.clougence.com
CloudCanal 社区:https://www.askcug.com/

退出移动版