跳到主要内容

定时全量实现增量数据迁移

简述

本文主要介绍使用 CloudCanal 定时全量任务和数据过滤条件,实现增量数据迁移。

功能优点:

  • 不依赖增量日志
  • 可调节延迟时间

功能缺陷:

  • 无法同步删除数据

技术点

定时全量

CloudCanal 定时执行全量迁移或数据校验订正任务,包含 立即执行暂停调度恢复调度执行历史 等功能。

在被调度的任务下方,会展现下一次将要执行的时间。

立即执行 操作将会设定任务在当前时间往后2分钟的时间点运行。

数据过滤

CloudCanal 数据过滤通过设定 SQL 表达式(MySQL 方言)进行,过滤操作默认在程序里面进行,部分数据源可选择将条件带到源端数据扫描 SQL 中,在数据库中执行。

程序内过滤

程序内进行数据过滤,即将源端数据流式、全量扫描出来,在程序内并行过滤。

此方式优点为:

  • 支持所有种类的源端数据源,程序中采用 MySQL 方言的 SQL 引擎进行数据计算
  • 可断点续传
  • 只要支持的 SQL 表达式,均可稳定进行过滤,不需要考虑数据库执行计划如何
  • 全量迁移、增量同步均可有效支持过滤条件

缺点包括:

  • 全部数据将被扫出,性能较差,并且会影响源端数据库的索引命中率
  • SQL 表达式支持不完整(不支持 JOIN、子查询等)

过滤条件下推

过滤条件下推即将 SQL 条件放入数据扫描的 where 条件中,由数据库自身过滤数据,CloudCanal 收到过滤后的数据。

此方式优点为:

  • 只接收过滤后数据,对于结果数据较小,性能较好
  • 对于某一源端数据库,可做到过滤条件全兼容,包括做 JOIN、子查询

缺点为:

  • 无法做断点续传(任务中断即重做),过滤条件和分页条件组合很难调优
  • 过滤条件需要进行执行计划优化
  • 各种源端数据库过滤条件方言不一
  • 只支持全量迁移数据过滤,增量同步过滤较难

当前过滤条件下推只有 MySQL 和 OceanBase 源端支持。

操作步骤

准备 CloudCanal

添加数据源

  • 本例使用 本地 2 个 MySQL 数据库
  • 登录 CloudCanal 平台 ,数据源管理 > 新增数据源

创建定时迁移任务

  • 同步任务 > 创建任务
  • 第一步,源&目标设置 页面
    • 选择 MySQL 数据库类型
    • 选择数据库实例
    • 分别对源和目标数据源测试链接

      如遇到测试链接长时间不返回,可以刷新页面重新选择

      数据库信息错误或网络不通都可能造成该现象

    • 选择想要数据同步的数据库
    • 点击下一步
  • 第二步,功能配置 页面

    • 任务类型选择全量迁移
    • 勾选定时迁移,此处单位为任务运行时间点,当前支持以下选项
      • 每小时第几分钟
      • 每天某一个时间点
      • 每周某一天某一时间点
      • 每月某一天某一时间点
      • 每年某一月某一天某一时间点
    • 本例选择每小时0分 执行
    • 任务规格选择默认 2 GB 或 1 GB 即可

      不建议选择小于 1 GB 的任务,批量更新或写入较可能造成任务内存紧张,性能急剧下降

    • 其他选项可默认,点击下一步
  • 第三步,表&action过滤 页面

    • 选择需要定时数据迁移的表,可同时选择多张

      单个任务推荐选择不多于 1000 张表 社区版当前支持最大 1000 张表选择,商业版不限

    • 点击下一步
  • 第四步,数据处理 页面

    • 选择具体表,点击 操作 按钮,选择 数据过滤条件
    • 可选择 高级模式普通模式

      高级模式 使用了标准 SQL 引擎技术,比较全面支持了以 MySQL 语法为基础的 SQL 表达式

      普通模式 为简易 SQL 表达式,功能相对较弱,也是早期产品使用的数据过滤技术,将来逐步淘汰

    • 如本例所选择表,有 gmt_create datetime 字段,过滤表达式如下,其中设置 5 分钟为任务启动偏差(保证数据完整)
      gmt_create >= DATE_SUB(NOW(), INTERVAL 65 MINUTE)
    • 如果需要设置多张表(具有功能过滤数据字段),则可点击 批量操作 > 数据过滤条件
    • 点击下一步
  • 第五步,创建确认 页面

    • 如前述 4 步信息无误,则点击创建任务,开始运行

常见问题

历史数据怎么办?

  • 创建定时任务之后,可选择创建一个完整的全量任务补充历史数据。

如何查看设置的过滤条件?

  • 同步任务 > 任务详情 > 库表映射 查看 ,点开表并点击 where 条件 按钮即可查看

如何修改设置的过滤条件?

  • 任务处于全量迁移阶段,暂停任务,点击 任务详情 > 功能列表 > 修改订阅 进行修改

如何修改任务的定时设置?

  • 同步任务 > 任务详情 > 功能列表 > 修改任务配置 ,即可修改定时任务表达式

总结

本文主要介绍使用 CloudCanal 定时全量任务和数据过滤条件,实现增量数据迁移。