5分钟搞定 MySQL 到 MySQL "异构"数据在线迁移同步

2021/8/3 8:35:53

本文主要是介绍5分钟搞定 MySQL 到 MySQL "异构"数据在线迁移同步,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

简述

MySQL 到 MySQL 在线同步不是一个新鲜话题了,但是面对数据源异构、高度产品化创建、并且稳定运行于在线严苛场景,需要做的工作会比一个单纯工具或者脚本多得多。本篇文章仅从功能角度介绍 CloudCanal 如何快速创建并运行此种数据链路。

技术点

“异构” 和面临的问题

通常所说的数据库异构在于三个维度,相互可以组合,包括 两端数据库类型不同表结构约束不一致 和 **数据差异。**后两者工作更多在于传统 ETL 领域的 Transform 范畴,在如今大数据 ODS 构建过程中被弱化(所谓 ELT),但是在在线业务领域仍然存在较多严苛需求(Streaming)。而前者对系统的架构和核心数据结构设计有诸多要求,这些要求来自于 增量数据获取方式多样SQL 方言差异约束差异元数据差异、**部署形态(如分布式)**等问题的处理。

增量数据获取方式 如 ORACLE 的 redo 日志、物化视图,MySQL binlog 、Postgres WAL、MongoDB oplog等千差万别,如何快速增加源端数据库支持需要系统级设计和抽象,也是一个比较漫长的过程。

SQL 方言差异 如 RDB 分页差异(数据扫描)、写入冲突处理、大小写、表结构定义差异等。约束差异 如索引 owner 归属偏差、partition key/sharding key 和 PK/UK 的关系差异(如 GreenPlum 对唯一键的要求) 等。上述两个差异,对于纯粹数据迁移、同步影响较小,但是对于 DDL 同步、结构迁移存在巨大挑战(如 MySQL 到 Greenplum 需要对索引重命名、裁剪和 partition key 无关的 UK 等),在库、表、列映射、裁剪等情况下,更加复杂。

元数据差异 包括数据类型转换、db/schema/table/topic/tablespace/index(ES) 层次差异、partition key / sharding key 等结构支持、分布式数据库分片差异(如 MongoDB shard/replication set 结构和分布式数据库中间件 shard 的迁移同步架构统一),以及 big evil 以分布式数据中间件为源端的 DDL 同步。

但是今天,我们并不展开介绍 数据库类型不同 的数据迁移同步功能,而是介绍 MySQL 到 MySQL 在线数据迁移同步所面临的异构问题,更多是业务需求所产生的 表结构不一致数据差异 ,其中包括库、表、列映射、裁剪 和 数据过滤。希望此篇文章能够让你在 5 分钟内搞定这个事情(环境 ready 的情况下)。

举个"栗子"

数据库准备

我们有3个 MySQL 数据库,源实例上的库叫 drds_1drds_2 ,目标实例上有 drds_merge 库, 其中源库里面有若干张表,并且存在一些测试数据,有些表正常迁移(worker_stats表), 有些表需要汇聚(shard_x表),有些表需要结构迁移(kbs_question),有些表有映射(shard_x表),有些表不同步(kbs_article表),有些表字段需要映射和裁剪(data_job)。接下来我们花 5 分钟时间来搞定这个事情,并且做一次数据校验。

造些数据

  • 启动源端造增量数据程序,IUD 比例 30:50:20

img

创建任务

  • 选择源数据库和目标数据库,做好库映射。操作完毕点击下一步。

img

  • 选择数据同步,并默认勾选数据初始化、DDL 同步,此处勾选做一次性数据校验,在主任务增量追上阶段,自动进行数据校验。当然我们也可以随时随地创建单独的数据校验任务。操作完毕点击下一步。

img

  • 选择表,并做好表映射,以及去除不想迁移同步的表。操作完毕点击下一步。

img

  • 选择列,并做好列映射、裁剪掉某些不需要表的列。

img

  • 批量设置唯一键为主键。

img

  • 设置数据过滤,如图中 id < 3000。操作完毕点击下一步。

img

  • 确认创建任务。确认完毕点击创建任务。
    img

任务运行

  • 如果选择的库、表、列在对端不存在,则进行结构迁移

  • 结构迁移完成后自动进行数据初始化,映射、裁剪、数据过滤按照设定运行。目前 CloudCanal 数据初始化都是逻辑初始化,速度可能没有某些物理初始化快,但是灵活度高。

  • 数据初始化完毕,开始进行增量同步。增量同步会自动从数据初始化位点拉取 MySQL binlog 进行回放,同样会执行映射、裁剪、以及数据过滤等操作。
    img

数据校验

  • 按相同逻辑创建一个增量任务。(暂未推出创建相似任务)

  • 校验任务跑完,获取差异数据,并抽样对比,数据一致。校验的差异主要是数据多次更新、同步延迟等造成,一般非大规模不一致或丢失,则数据正常。

  • 数据差异数据目前需要到任务日志目录获取,暂时未提供日志下载能力。
    img

总结

异构数据源的在线迁移和同步,此篇文章主要简单介绍了下功能,对于在线严苛场景而言,后续的监控告警、容灾、特殊数据处理、抗峰值、问题排查等都是重要工作。



这篇关于5分钟搞定 MySQL 到 MySQL "异构"数据在线迁移同步的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程