跳到主要内容

CloudCanal x TiDB 数据迁移同步

· 阅读需 6 分钟
励强
励强

简介​

TiDB 是一款由 PingCAP 开源的 分布式关系型 数据库,主打 HTAP 能力,具备 优秀的伸缩性。其开源社区强大,产品颇具流行度。

数据同步场景中,TiDB 官方提供如 TiCDC、TiDB Binlog 等工具,但为了满足用户将 TiDB 数据迁移同步到更加广泛数据库的需求,CloudCanal 近期推出了 TiDB 为源端的数据迁移同步 功能,本文将简要介绍该能力的落地。

功能介绍​

目标数据库和能力​

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

目标数据源不断增加中

TiDB 源端特色能力​

不依赖 TiCDC​

TiDB 为源端的增量数据同步实现有两种方式

  • 作为 TiCDC 下游接收变更记录,实现数据同步
  • 与 TiKV/PD 直接通信,接收实时变更数据,实现数据同步

CloudCanal 考虑到部署的 轻量性、可控性,选择了第二种方案,跳过 TiCDC、TiDB Server 组件,直接与 PD 建立 gRPC 通信,实时接收源端数据变更记录,通过算法解析字节流内容,自动同步到对端数据库中。

支持断点续传​

长周期数据同步,任务可能会因为参数调整、问题数据修复、性能优化等操作暂停或重启任务,断点续传能力不可或缺。

CloudCanal 为 TiDB 源端定时或定量保存对端消费后的位点,以实现断点续传能力。

全量迁移中,对亿级别数据量的大表中断重启,断点续传能力可尽可能少的影响迁移进度,增量同步中,断点续传能力确保任务重启后可继续,并不丢失数据。

变更事件保序​

订阅 TiDB 增量变更事件,可能因为各种原因,个别变更数据到达时间不一致(乱序),导致数据丢失或变更错误。

CloudCanal 为此采用自研算法处理事件,并根据事务 最终提交时间 来保证事务的有序消费。

支持 DDL、DML 增量数据同步​

CloudCanal 支持以 TiDB 为源端,TiDB、MySQL 为对端 (支持的对端数据源还在不断增加) 的 DDL 和 DML 同步。

  • DDL 数据同步能力:

    • ALTER TABLE ... ADD/DROP/MODIFY COLUMN ...
    • ALTER TABLE ... ADD/ALTER/DROP INDEX ...
    • RENAME TABLE ... TO ...
  • DML 数据同步能力

    • INSERT/UPDATE/DELETE

除了 DDL、DML 同步功能实现,CloudCanal 根据 SCHEMA SNAPSHOT 和 DDL 构建了表 多版本表快照能力,确保变更数据和结构保持一致,数据消费更加精准。

结构迁移类型自动处理与优化​

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

TiDB 为源端的结构迁移也存在类似转换与优化,如以 MySQL 为对端的 Float 类型若不指定精度,则可能造成数据精度丢失, CloudCanal 将 Float 类型自动转换为 Float(0),保证了精度的准确性

配套数据校验与订正能力​

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

CloudCanal 为 TiDB 为源端的数据同步能力额外提供了数字、字符类型主键表的数据校验和数据订正功能,快速确定不一致数据范围,并针对差异数据进行修复。

产品化能力支撑​

可视化创建​

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

自动化流程​

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

监控图表支撑​

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

告警支持​

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

简单示例​

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

准备动作​

  • 下载安装 CloudCanal 私有部署版本,使用参见快速上手文档
  • 准备好 TiDB 数据库(本例使用 5.4.3 版本)和 MySQL 数据库(本例使用 8.0 版本)
  • 登录 CloudCanal 平台 ,添加 TiDB 和 MySQL
  • TiDB 增量同步依赖 PD 通信,如需进行增量同步,请在额外参数处填写 PD 地址

任务创建​

  • 任务管理 -> 新建任务

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

  • 点击下一步

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

  • 选择需要迁移同步的表和列 (本例以常见的 数字、字符、时间类型主键、多主键表为例)

  • 确认创建任务

  • 任务自动执行结构迁移、全量同步和增量同步,执行一些增量数据同步后进行数据校验,结果显示数据校验通过

总结​

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