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 能够自行处理这种变化,无需用户自己删除老数据,插入新数据。
举个例子
前置条件:
- CloudCanal 社区版部署完毕,参见CloudCanal社区版安装文档
- PolarDB-X 开源版已经安装,参见PolarDB-X 集群部署文档
- 带有增量流量的 MySQL 运行中
造数据
添加数据源
任务创建
校验任务
FAQ
是否会支持 PolarDB-X 源端?
目前 PolarDB-X 版本支持 CDC , 和 MySQL binlog 交互很相似(外在表现出些许差别),我们将在不久推出 PolarDB-X 源端,目标端仍首选 MySQL (让业务有去有回)。
是否会支持更多源端?
CloudCanal 新增数据源之后,后续相互打通相对简单,目前 Oracle 是首选源端。之后 PostgreSQL、SqlServer(开发中)都是候选。
目前这条链路还存在什么不足?
功能层面目前自动创建数据库未支持 PolarDB-X 的 partitioning
模式,另外已存在表,无法感知对端分库分表字段(急需修复)。性能层面则需要更多调优。
总结
本文简单介绍了使用 CloudCanal 进行 MySQL 到 PolarDB-X 的数据迁移同步。各位小伙伴,如果觉得还不错,请点赞、评论加转发吧。
更多精彩
- 异地多活基础之数据双向同步进阶篇-CloudCanal实战
- 5分钟搞定 MySQL 到 ClickHouse 实时数据同步进阶篇-CloudCanal实战
- 主流关系型数据库到 Kudu 实时数据同步-CloudCanal实战
- 5分钟搞定 MySQL 到 ElasticSearch 迁移同步-CloudCanal 实战
- 5分钟搞定 MySQL 到 MySQL 异构在线数据迁移同步-CloudCanal 实战
- MySQL 到 ElasticSearch 实时同步构建数据检索服务的选型与思考
- 构建基于Kafka中转的混合云在线数据生态-cloudcanal实战
- 5分钟搞定 MySQL 到 TiDB 的数据同步 - CloudCanal实战
社区快讯
以上是关于CloudCanal 落地 DB2 数据迁移同步功能的主要内容,如果未能解决你的问题,请参考以下文章
5分钟搞定 MySQL 到 PolarDB-X 数据迁移和同步-CloudCanal实战
5分钟搞定MySQL/PostgreSQL/Oracle到StarRocks数据迁移同步-CloudCanal实战