暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

五分钟搞定SQLServer数据迁移同步到StarRocks

ClouGence 2023-01-13
105

简述

本篇文章主要介绍如何使用 CloudCanal 构建一条 SQL Server 到 StarRocks 的数据同步链路。

技术点

源端SQLServer基于CDC代理

当数据库启用 CDC 能力后,SQL Server 代理上会生成一个专门分析ldf文件的作业,再将具体的表启用 CDC, 则该作业开始持续分析文件中的变更事件到指定的表中。

写入StarRocks采用StreamLoad导入方式

CloudCanal 采用了 StarRocks StreamLoad 方式进行导入,源端数据和变更转成字节流,以通过 HTTP 协议批量写入 StarRocks。

基于 StreamLoad 方式,写入对端的操作均为 INSERT,CloudCanal 自动将 INSERT UPDATE DELETE 转成 INSERT 语句,并填入 __op 值(删除标识符),StarRocks 将自动进行数据合并。

准备工作

SQL Server源端准备工作

  • • 源库需要启用 CDC 执行命令

    • • 建议使用 sa 账号,启用 CDC 需要 sysadmin 权限

    • • 切换数据库

    • • 执行启用 CDC 功能 可以执行如下命令

exec sys.sp_cdc_enable_db
  • • 准备一个 CloudCanal 同步账号,并为这个账号授权。下面以“lowpower”用户为例:

    • • 授权建立数据库链接


  • • 授权 db_owner 和 public 权限


  • • 确认 SQL SERVER 代理是启用状态

  • • 源端 SQL Server 实例中待同步的表需具备主键(CloudCanal 在创建同步任务的时候会帮你自动选择有主键的表)

StarRocks 对端准备工作

  • • StarRocks 最高支持版本为:2.4.0

  • • Cloudcanal 添加StarRocks 数据源


  • • Client地址:为StarRocks提供给MySQL Client的服务端口,CloudCanal主要用其查询库表的元数据信息,对应StarRocks的QueryPort,默认为IP:9030

  • • Http地址:Http地址主要用于接收stream load的http请求,对应StarRocks的HttpPort,默认为IP:8030

  • • Cloudcanal创建任务添加StarRocks时,结构迁移默认只支持PK模型,创建任务的时候高级设置允许设置bucket number等参数,可以结构迁移建表时自动生效


注意事项

  • • CloudCanal 在执行全量数据迁移时将占用源库和目标库一定的读写资源,可能会导致数据库的负载上升,如果数据库性能较差您需要在执行数据迁移前评估源库和目标库的性能,同时建议您在业务低峰期执行数据迁移。

  • • SQL SERVER 作为源端结构迁移仅支持 Schema、Table 迁移。

SQL Server -> StarRocks 的数据类型支持

CloudCanal结构迁移和数据迁移同步时会自动进行数据类型映射,类型映射见下表:

SQL ServerStarRocks
BIGINTBIGINT
BINARYNot Supported
BITTINYINT
CHARCHAR
DATEDATE
DATETIMEDATETIME
DATETIME2DATETIME
DATETIMEOFFSETDATETIME
DECIMALDECIMAL
FLOATFLOAT
GEOGRAPHYSTRING
GEOMETRYSTRING
HIERARCHYIDNot Supported
IMAGENot Supported
INTINT
MONEYFLOAT
NCHARCHAR
NTEXTSTRING
NUMERICDECIMAL
NVARCHARVARCHAR
REALDOUBLE
ROWVERSIONLARGEINT
SMALLDATETIMEDATETIME
SMALLINTSMALLINT
SMALLMONEYFLOAT
SQL_VARIANTNot Supported
TEXTSTRING
TIMESTRING
TIMESTAMPLARGEINT
TINYINTSMALLINT
UNIQUEIDENTIFIERVARCHAR
VARBINARYNot Supported
VARCHARVARCHAR
XMLSTRING
sysnameVARCHAR

操作示例

前置条件

  • • 登入ClouGence官网下载私有部署版,使用参见快速上手文档

  • • 准备一个 SQL Server 数据库,和 StarRocks 实例(本例分别使用自建 SQL Server 2016 和 StarRocks 2.4.0)

  • • 登录 CloudCanal 平台 ,添加 SQL Server 和 StarRocks


  • • 创建一条 SQL Server -> StarRocks 链路作为增量数据来源

任务创建

  • • 任务管理 -> 任务创建

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

  • • 点击下一步


  • • 选择 增量同步,其它默认


  • • 此时如果 SQL Server 上数据库还没有启用 CDC 功能,则会在点击下一步的时候提示如何启用 CDC。只要按照提示的参考语句执行即可。


  • • 选择需要迁移同步的



  • • 确认创建任务


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


常见问题


数据不同步了都有哪些情况?

  • • SQL Server CDC 需要依赖 SQL Server 代理,首先要确定 SQL Server 代理服务是否启动

  • • 表在启动 CDC 的时候会确定要捕获的列清单,此时如果修改列的类型可能会导致 CDC 中断。目前解决办法只能重建任务。

  • • 增/减 同一个列名的列,对一个列删除后再增加。虽然 CDC 表中字段依然存在但是也会导致整个 CDC 中断。

什么情况下会影响稳定的数据同步?

  • • 如果任务在同步期间出现了异常导致任务延迟。这时候需要格外注意,如果过长时间的延迟,即便是修复了延迟的问题(比如对端数据库长时间出现不可用)在后续数据同步上也可能存在丢失数据的风险。

  • • SQL Server 为了防止 CDC 表数据无限膨胀 SQL Server 会每天定时执行清理作业,清理超过 3天的数据。

  • • 为了增加延迟的容忍度可以执行这条 SQL 来增加 CDC 数据的保存时间,代价是这些数据需要存放到数据库表中,如果每日数据变更很多对磁盘开销会有额外的要求。

    • • execute sys.sp_cdc_change_job @job_type = n'cleanup', @retention = 4320

    • • msdb.dbo.cdc_jobs 表中保存了具体 捕获任务的数据保存时间。

总结

本文简单介绍了如何使用 CloudCanal 进行 SQL Server -> StarRocks 数据迁移同步。各位读者朋友,如果你觉得还不错,请点赞、评论加转发吧。


文章转载自ClouGence,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论