CloudCanal 落地 DB2 数据迁移同步功能

Posted clougence

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CloudCanal 落地 DB2 数据迁移同步功能相关的知识,希望对你有一定的参考价值。

简述

Db2 是一款具有悠久历史的关系型数据库,由 IBM 公司开发和维护,广泛应用于金融级业务场景。

CloudCanal 近期提供了 Db2 为源端的数据迁移同步 功能,用户可以便利地将 Db2 中数据实时同步到其他数据库,实现数据更广泛、更实时的应用。

功能介绍

目标数据库和能力

目标端数据源 结构迁移 数据初始化 增量同步 数据校验 数据订正
MySQL 支持 支持 支持 支持 支持
TiDB 支持 支持 支持 支持 支持
Kafka - 支持 支持 - -
StarRocks 支持 支持 支持 支持 支持

Db2 源端特色能力

基于 CDC 技术的数据同步

Db2 源端同步能力是基于 SQL 复制的 ASN 捕获代理,CloudCanal 通过捕获 Db2 CDC 表中的增量数据来实现数据同步。

Db2 源端进行增量数据同步时,CDC 元信息表的维护过程会被自动化管理,无需用户手动操作。

同时,CloudCanal 会周期性地清理已经同步到目标端的 CDC 记录,以避免 CDC 表的无限增长,从而保证同步数据的准确性和系统的稳定性。

结构迁移类型自动处理

不同数据库对于数据类型支持存在差异,CloudCanal 结构迁移时会进行类型自动转换

Db2 为源端的结构迁移也存在类似转换(5+,并不断细化),如对端为 MySQL 或 TiDB,CloudCanal 将自动转换 VARCHAR FOR BIT DATA 为 VARBINARY。

数据初始化支持断点续传

Db2 为源端的数据初始化,支持字符或数字类型主键表的断点续传功能。

对于亿级别数据量的大表,此能力不可或缺,数据初始化断点续传功能让此种暂停尽可能少的影响进度。

数据同步支持断点续传

长周期的数据同步任务,暂停任务调整参数修复问题数据优化性能等情况很难避免,断点续传让这些维护操作变成可能。

CloudCanal 定时或定量保存提交后的位点(LSN,log sequence number),确保增量同步任务重启后可继续,并且不丢失数据。

配套数据校验与订正能力

在数据同步过程中,由于数据的外部关联性结构约束差异数据库运维操作软件bug等情况,两端数据可能会不一致,此时数据校验和订正功能非常必要。

CloudCanal 为 Db2 为源端的数据同步能力额外提供了数据校验数据订正功能,快速确定不一致数据范围,并针对差异数据进行修复。

产品化能力支撑

可视化创建

CloudCanal 创建 Db2 数据迁移同步任务是完全可视化的,通过获取数据库元数据,让用户在 web 页面上决定哪些库、表、列进行迁移同步,或者设定过滤条件自定义数据处理逻辑等。

自动化流程

Db2 数据迁移同步任务创建后,CloudCanal 将自动流转各个阶段的任务,用户无需干涉,直达数据实时同步状态。

监控图表支撑

CloudCanal 为 Db2 数据迁移同步任务提供了多个实用监控指标,包括增量缓存RPS增量缓存延迟(ms)内存队列数据个数等,当调优任务性能或排查任务异常原因时,监控指标提供了很好的判断依据。

告警支持

CloudCanal 为 Db2 数据迁移任务提供了包括钉钉/企业微信/飞书/自定义等 webhook 类型告警,对于企业级客户,可额外选择邮件,以及短信告警,实时保障同步任务的高可用。

简单示例

本示例以将数据从 Db2 数据库同步到 MySQL 数据库为操作案例,以便更好地说明 CloudCanal 在不同数据库之间进行数据同步的能力。

准备动作

  • 准备 CloudCanal,安装详细请参考:全新安装
  • 准备好 Db2 数据库(本例使用 11.5 版本)和 MySQL 数据库(本例使用 8.0 版本)
  • 登录 CloudCanal 平台 ,添加 Db2 和 MySQL
  • Db2 源端如果需要增量同步需要开启 CDC,详细请参考:Db2 源端 CDC 同步准备

任务创建

  • 任务管理 -> 新建任务

  • 测试链接并选择 源 和 目标 数据库

  • 点击下一步

  • 选择 数据同步,并勾选 全量数据初始化,其他选项默认

  • 选择需要迁移同步的表和列

  • 确认创建任务

  • 任务自动做结构迁移、全量迁移、增量同步

  • 增量阶段进行数据写入后,进行数据校验,数据校验通过

总结

本文主要介绍了 CloudCanal 支持 Db2 为源端数据迁移同步功能,通过这个能力,用户可以便利地将 Db2 中数据实时同步到其他数据库,实现数据更广泛、更实时的应用。

5分钟搞定 MySQL 到 PolarDB-X 数据迁移和同步-CloudCanal实战

简述

CloudCanal 近期支持了 PolarDB-X 对端, 目前开放的链路为 MySQL 到 PolarDB-X 。

本链路特点包括

  • 完整支持结构迁移、全量迁移、增量同步、数据校验
  • 支持 PolarDB-X 云版本 API 级对接(自动获取实例、添加白名单)
  • 支持 PolarDB-X 开源自建版

PolarDB-X 前身 DRDS (内部产品名称 TDDL),经过 10 几年发展, 很好解决了 ToC 端业务对数据库超高并发、严苛事务的需求,并且近几年也努力尝试解决企业级数据需求(复杂SQL、分布式事务、在线数据的实时计算),而这样的一个产品,目前有云版本,同时近期也进行了开源。所以我们认为有必要对其生态做良好支撑。

技术点

结构迁移

PolarDB-X 是分布式数据库领域产品,所以存在 partition 概念 ,提供了两种拆分模型:sharding(即分库分表)和partitioning。 前者按用户自定义拆分,后者对应用透明。可以通过类似 create database d1 partition_mode="sharding"create database d1 partition_mode="partitioning" 指定。

sharding模式下,具体创建语句和算法可参考 官方文档

对于响应时间、RPS 要求的严苛应用场景(相对较窄),设定业务感知的分库分表算法是合理的,这也是为何很多分布式数据库在类似 sysbench 或 tpcc 或 天猫双十一 场景中达到难以置信性能的朴素原理。

CloudCanal 目前自动创建 database 为 sharding 模型,并且通过产品化方式支持这个能力-选择相应的算法和字段。

目前支持分库分表类型包括

  • DB(只分库不分表)
  • DB_TAB(既分库又分表)
  • NONE(单表)

设定分库分表字段的时候,支持的算法包括

  • HASH
  • WEEK
  • MM
  • DD
  • MMDD

一张普通的表,如果应用 DB_TAB 分库分表类型,并且选择常用的 HASH 算法,字段都选择worker_id, 经过 CloudCanal 结构迁移,会在 PolarDB-X 中生成如下表

CREATE TABLE `worker_stats` (
	`id` bigint(20) NOT NULL AUTO_INCREMENT BY GROUP,
	`gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
	`worker_id` bigint(20) NOT NULL,
	`cpu_stat` text,
	`mem_stat` text,
	`disk_stat` text,
	`col_new` varchar(255) NOT NULL DEFAULT \'123\',
	PRIMARY KEY (`id`),
	KEY `auto_shard_key_worker_id` USING BTREE (`worker_id`)
) ENGINE = InnoDB AUTO_INCREMENT = 278489 DEFAULT CHARSET = utf8mb4 DEFAULT COLLATE = utf8mb4_0900_ai_ci  dbpartition by hash(`worker_id`) tbpartition by hash(`worker_id`) tbpartitions 4

任务对分库分表的处理

与普通单机数据库不同, 如果需要达到 PolarDB-X 最好的写入性能, 增量同步需要处理分库分表字段,对于 update 和 delete 操作, 带上拆分字段。数据校验进行对端数据获取时,也需要带上拆分字段,并且保证数据的获取效率。

if (col.isKey() || (partitionKeys != null && partitionKeys.contains(col.getName()))) 
       if (col.isUpdated()) 
               // put before column in it , PK/UKs may be change.
               pkCols.add(SqlUtilCommon.pickBeforeColumn(rowData, col.getName()));
         else 
               pkCols.add(col);
        

        if (firstPk) 
              where.append("`").append(col.getName()).append("`= ?");
              firstPk = false;
        else 
             where.append(" AND `").append(col.getName()).append("`= ?");
        

另外,如同变更主键,如果变更拆分字段值, 目前 PolarDB-X 能够自行处理这种变化,无需用户自己删除老数据,插入新数据。

举个例子

前置条件:

造数据

  • 混合负载,IUD 比例 2:7:1

添加数据源

  • 登录 CloudCanal 平台
  • 数据源管理->新增数据源
  • 分别选择 自建 部署模式下的 PolarDB-XMySQL 并添加

任务创建

  • 任务管理->任务创建
  • 选择源和目标数据源
  • 选择数据同步,并勾选 全量数据初始化, 其他选项默认
  • 选择需要迁移同步的表
  • 选择列,默认全选
  • 设定分库分表算法和字段
  • 确认创建,并自动运行

校验任务

  • 停止增量负载
  • 创建校验任务
    • 目前类似任务创建开发中,暂时库表列选择和拆分选择请和同步任务保持一致
  • 校验完毕数据一致

FAQ

是否会支持 PolarDB-X 源端?

目前 PolarDB-X 版本支持 CDC , 和 MySQL binlog 交互很相似(外在表现出些许差别),我们将在不久推出 PolarDB-X 源端,目标端仍首选 MySQL (让业务有去有回)。

是否会支持更多源端?

CloudCanal 新增数据源之后,后续相互打通相对简单,目前 Oracle 是首选源端。之后 PostgreSQL、SqlServer(开发中)都是候选。

目前这条链路还存在什么不足?

功能层面目前自动创建数据库未支持 PolarDB-X 的 partitioning 模式,另外已存在表,无法感知对端分库分表字段(急需修复)。性能层面则需要更多调优。

总结

本文简单介绍了使用 CloudCanal 进行 MySQL 到 PolarDB-X 的数据迁移同步。各位小伙伴,如果觉得还不错,请点赞、评论加转发吧。

更多精彩

社区快讯

  • 我们创建 CloudCanal 微信粉丝群啦,在里面,你可以得到最新版本发布信息和资源链接,你能看到其他用户一手评测、使用情况,你更能得到热情的问题解答,当然你还可以给我们提需求和问题。快快加入吧。
    • 扫描下方二维码,添加我们小助手微信拉您进群,接头语(“加CloudCanal交流群”)

以上是关于CloudCanal 落地 DB2 数据迁移同步功能的主要内容,如果未能解决你的问题,请参考以下文章

5分钟搞定 MySQL 到 PolarDB-X 数据迁移和同步-CloudCanal实战

5分钟搞定MySQL/PostgreSQL/Oracle到StarRocks数据迁移同步-CloudCanal实战

DB2数据库迁移

MySQL准实时同步到PostgreSQL, Greenplum的方案之一 - rds_dbsync

DB2同平台迁移数据库

[db2数据库同步]db2数据库同步