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 的情况下)。

举个"栗子"

准备 CloudCanal

SAAS 版参考 自建机器客户端安装 文章

社区版参考文章 docker安装 文章

数据库准备

我们有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

总结

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

在文末,贴一下我们社区版下载帖,欢迎下载并尝试我们的产品,快来构建属于你自己的在线数据任务吧。

CloudCanal-免费好用的企业级数据同步工具。
CloudCanal官方地址:https://www.clougence.com
CloudCanal官方社区地址:https://www.askcug.com/
CloudCanal粉丝群(添加我们小助手suhuayue001拉你进群)

mysql异构数据迁移是指将数据从一个MySQL数据库迁移到另一个MySQL数据库,但两个数据库可能存在一些异构问题,例如表结构不一致和数据差异等。解决这些异构问题的方法有以下几种: 1. 在登录mysq客户端时加上local-infile参数,例如:$ mysql -u root -p --local-infile。这个参数允许在数据迁移过程中使用LOAD DATA INFILE命令导入数据,从而解决了数据差异的问题。 2. 使用source命令导入SQL文件。例如:mysql> source /opt/sequoiasql/mysql/test/test.sql。这样可以自动创建表结构,解决了表结构不一致的问题。 需要注意的是,异构数据库迁移还可能涉及到其他问题,如库、表、列映射、裁剪和数据过滤等。在解决这些问题时,可以根据具体的业务需求进行相应的处理。例如,可以使用CloudCanal等工具来简化数据迁移的过程。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [MySQL数据迁移](https://blog.csdn.net/baidu_16083471/article/details/89644396)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [5分钟搞定 MySQLMySQL异构数据在线迁移同步](https://blog.csdn.net/u012604101/article/details/119324714)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值