定时全量实现增量数据迁移
简述
本文主要介绍使用 CloudCanal 定时全量任务和数据过滤条件,实现增量数据迁移。
功能优点:
- 不依赖增量日志
- 可调节延迟时间
功能缺陷:
- 无法同步删除数据
技术点
定时全量
CloudCanal 定时执行全量迁移或数据校验订正任务,包含 立即执行,暂停调度,恢复调度,执行历史 等功能。
在被调度的任务下方,会展现下一次将要执行的时间。
立即执行 操作将会设定任务在当前时间往后2分钟的时间点运行。
数据过滤
CloudCanal 数据过滤通过设定 SQL 表达式(MySQL 方言)进行,过滤操作默认在程序里面进行,部分数据源可选择将条件带到源端数据扫描 SQL 中,在数据库中执行。
程序内过滤
程序内进行数据过滤,即将源端数据流式、全量扫描出来,在程序内并行过滤。
此方式优点为:
- 支持所有种类的源端数据源,程序中采用 MySQL 方言的 SQL 引擎进行数据计算
- 可断点续传
- 只要支持的 SQL 表达式,均可稳定进行过滤,不需要考虑数据库执行计划如何
- 全量迁移、增量同步均可有效支持过滤条件
缺点包括:
- 全部数据将被扫出,性能较差,并且会影响源端数据库的索引命中率
- SQL 表达式支持不完整(不支持 JOIN、子查询等)
过滤条件下推
过滤条件下推即将 SQL 条件放入数据扫描的 where 条件中,由数据库自身过滤数据,CloudCanal 收到过滤后的数据。
此方式优点为:
- 只接收过滤后数据,对于结果数据较小,性能较好
- 对于某一源端数据库,可做到过滤条件全兼容,包括做 JOIN、子查询
缺点为:
- 无法做断点续传(任务中断即重做),过滤条件和分页条件组合很难调优
- 过滤条件需要进行执行计划优化
- 各种源端数据库过滤条件方言不一
- 只支持全量迁移数据过滤,增量同步过滤较难
当前过滤条件下推只有 MySQL 和 OceanBase 源端支持。
操作步骤
准备 CloudCanal
- 下载安装 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 定时全量任务和数据过滤条件,实现增量数据迁移。