导航

    数据用户治理组

    • 注册
    • 登录
    • 搜索
    • 版块
    • 最新
    • 话题
    • 热门
    • 用户
    • 群组

    5分钟搞定SQLServer到MySQL数据迁移同步-CloudCanal实战

    技术分享
    sqlserver mysql 同步
    1
    1
    1548
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • junyu-cloudcanal
      junyu-cloudcanal 最后由 junyu-cloudcanal 编辑

      简述

      CloudCanal 2.1.0.x 版本开始支持 SQLServer 作为源端的数据迁移同步能力。

      本文通过 SQLServer 到 MySQL 的数据迁移同步案例简要介绍这个源端的能力。链路特点:

      • 结构迁移、全量迁移、增量同步(数据)、数据校验俱全
      • 流程全自动化

      技术点

      SQLServer开CDC

      SQLServer 开启 CDC (change data capture) 首先需要安装并启动 SQL Server Agent , 通过 agent 异步解析其变更日志写到 [目标db].cdc 的一系列表中。

      安装并启动 Agent 后, 对 目标db 需要开启 CDC 能力。USE [目标db]切换到目标数据库,再执行EXEC sys.sp_cdc_enable_db;打开这个库的 CDC。 执行完毕后会在 [目标db].cdc schema下出现一系列表。

      目标db 开启 CDC 后,还需要开启针对哪些表的 CDC, 命令为

      EXEC sys.sp_cdc_enable_table   
      @source_schema = N'dbo',
      @source_name   = N'worker_stats',
      @role_name     = NULL,
      @supports_net_changes = 0;
      

      默认会生成 source_shema_source_name_CT 的表,当然创建过程中也可以直接指定 capture_instance 指定这个表除 _CT 这个后缀之前部分的命名。

      以上步骤运维稍显繁琐,但是使用 CloudCanal , 创建任务时都会自动准备好,前提是给到足够权限的账号。

      增量 DDL 同步

      DDL 对于数据同步的影响在于两方面,如果没有处理好,可能导致数据同步根本无法成立的致命问题。

      第一,大部分数据库的增量日志都不带字段类型长度等属性,需要依赖从源端数据库独立获取的元数据进行日志解析,DDL 如果更改了解析日志相关元数据,则需要刷新,否则会导致字段不存在、对不齐、类型错误等问题,这个刷新需要严格按照事件变更顺序,一般和位点紧相关。

      其次,对于上下游需要保证结构一致性的同步链路,DDL 变更则需要准确应用到下游数据库中,这中间步骤包括 DDL 获取、转换、执行等多个步骤,a 种源端 * b 种目标端 * c 种 DDL , 导致全数据库相互同步难度相当高,其中还伴随着 DDL 应用导致的链路延迟,应用失败导致位点回溯等棘手问题。

      以上两点,第一点几乎无法回避,第二点可以通过预先做 DDL 执行解决,特别通过平台化方案自动关联执行,相对方便且合理。

      CloudCanal 对 SQLServer DDL 同步解决了第一点,但是对于第二点,暂时没有解决,需要手动到对端进行 DDL 变更。

      操作示例

      前置条件:

      • 登陆 CloudCanal SaaS版,使用参见快速上手文档
      • 准备好 SQLServer 数据库(本例版本为 2016)和 MySQL 数据库(本例版本为 8.0)
      • 在 SQLServer 的准备一些库表和数据(本例使用另外一个 MySQL 迁移同步数据到 SQLServer)

      添加数据源

      • 登录 CloudCanal 平台
      • 数据源管理->新增数据源
      • 将源端SQLServer和目标端MySQL 分别添加
        截屏2021-12-28 上午11.25.43.png

      任务创建

      • 任务管理->任务创建
      • 选择 源 和 目标 数据源
        截屏2021-12-28 下午12.12.48.png
      • 选择 数据同步,勾选 全量数据初始化, 勾选 DDL 不同步
        截屏2021-12-28 下午12.14.38.png
      • 选择需要迁移同步的表
      • 选择列,默认全选
      • 确认创建
        截屏2021-12-28 下午12.15.51.png
      • 查看异步任务,确认创建步骤正常
        截屏2021-12-28 下午12.16.34.png
      • 任务自动运行
        截屏2021-12-28 下午12.17.26.png

      校验数据

      • 持续造增量数据,INSERT & UPDATE & DELETE 比例 2:7:1
        截屏2021-12-28 下午12.18.12.png
      • 停止增量造数据
      • 创建校验任务,并校验任务结果
        截屏2021-12-28 下午12.24.38.png

      常见问题

      是否支持 DDL 同步

      暂时没有支持,不过 cdc schema下存在 ddl_history 表,可能可以结合 lsn 找到具体 DDL 语句,从而支持 DDL 同步。

      是否支持其他目标端

      最近会支持 Kafka , 其他数据源按具体需求逐步进行开放。

      总结

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

      更多精彩

      • 5分钟搞定 MySQL 到 ClickHouse 宽表构建和同步-CloudCanal实战
      • 5分钟搞定 MySQL 到 ElasticSearch 宽表构建和同步-CloudCanal实战
      • 5分钟搞定 MySQL 到 ClickHouse 实时数据同步进阶篇-CloudCanal实战
      • 5分钟搞定 MySQL 到 ElasticSearch 迁移同步-CloudCanal 实战
      • 5分钟搞定 MySQL 到 MySQL 异构在线数据迁移同步-CloudCanal 实战
      • 5分钟搞定 MySQL 到 TiDB 的数据同步 - CloudCanal实战

      社区快讯

      • 我们创建了 CloudCanal 微信交流群,在里面,您可以得到最新版本发布信息和资源链接,您能看到其他用户一手评测、使用情况,您更能得到热情的问题解答,当然您还可以给我们提需求和问题。扫描下方二维码,添加我们小助手微信拉您进群,备注: 加 CloudCanal 群
        wechat.png
      1 条回复 最后回复 回复 引用 0
      • 1 / 1
      • First post
        Last post
      Copyright © 2020 ClouGence, Inc.备案号:浙ICP备20007605号-2