Tapdata 技术博客
Tapdata 技术博客

Tapdata Connector 实用指南:3 分钟开启 MySQL 到 MongoDB 的数据同步任务

2023-12-29 14:55 Tapdata Cloud

作为中国的 “Fivetran/Airbyte”, Tapdata 是一个以低延迟数据移动为核心优势构建的现代数据平台,内置 100+ 数据连接器,拥有稳定的实时采集和传输能力、秒级响应的数据实时计算能力、稳定易用的数据实时服务能力,以及低代码可视化操作等。典型用例包括数据库到数据库的复制、将数据引入数据仓库或数据湖,以及通用 ETL 处理等。本期《Tapdata Connector 实用指南》将为您讲解如何实现零停机的 MySQL → MongoDB 数据同步。


在企业不断追寻数字化转型的道路上,数据库无疑是一大关键要素。随着每个组织都在以前所未有的速度生成数据,企业开始纷纷向非关系型数据库迁移。作为一种非常流行的开源非关系型数据库,MongoDB 能够高效存储大型数据集。本文将以分步教程的形式,帮助您轻松将数据

从 MySQL 同步至 MongoDB。


MySQL 是全球应用最广泛的开源关系数据库管理系统(RDMS)之一。其设计初衷是以规范化的方式存储和管理表格格式的关系型数据。然而,由于关系数据库需要大量内存和计算资源,它们在扩展方面面临一些困难。


与此同时,非关系型数据库是为存储数百 PB 的数据和每秒运行数百万次查询而开发的。而 MongoDB 的 schema 设计方法,能够高效存储大量非结构化和半结构化数据。在深入讨论如何将 MySQL 向 MongoDB 同步之前,让我们简单了解一下 MySQL 和 MongoDB。


一、MySQL 是什么?


MySQL 是使用最为广泛的关系数据库管理系统之一,用于处理关系型数据库。它采用结构化查询语言(SQL)来定义、更新和查询数据库,而 SQL 是关系数据库访问和管理记录的最常用语言。MySQL 由甲骨文提供支持,是基于 GNU 许可的开源免费数据库软件,通常与 PHP 编程和其他 Web 应用程序一起使用。


相较于 Microsoft SQL Server 和 Oracle,MySQL 速度更快、可扩展性更强,并且是一种易于使用的数据库管理系统。它基于客户端-服务器模型,即数据库通常运行在服务器上,并通过网络从客户端和工作站访问数据。服务器通过网络向客户端返回所需的输出,以响应客户端发出的 GUI 请求。MySQL 支持多种操作系统,并与多种编程语言兼容,如 PHP、PERL、JAVA、C++、C 等。



借助 Tapdata 稳定、无代码、内置 100+ 数据连接器的自动化数据管道,解决您的一切全量、增量数据复制问题。

>>> 立即免费试用


MySQL 的主要特性


以下是 MySQL 广受欢迎的主要原因:

  • 开源: MySQL 是一款开源的关系型数据库,支持免费使用。

  • 基于 SQL 语言: MySQL 基于使用最广泛的 SQL 语言,支持对表、行、列和索引执行查询。

  • 表格存储: MySQL 将数据以表格形式存储,也称为关系,由行和列组成。

  • 处理大数据集: MySQL 在处理大规模数据集时表现出色,能够支持多达 5000 万行甚至更多的数据。

  • 高度可定制: MySQL 具有高度可定制性,其开源的 GPL 许可证允许开发人员或程序员根据需要轻松修改 SQL 软件。

二、MongoDB 是什么?


MongoDB 是一款由 MongoDB Inc 于 2009 年开发的开源、跨平台的非关系型数据库管理系统。它采用文档导向的数据库模型,以无模式的方式存储信息,将数据组织成文档和集合,而非传统的表格形式。这使得 MongoDB 能够存储各种类型的数据。支持多种编程语言,拥有卓越的功能,提供卓越的性能。


MongoDB 是一种备受欢迎的 NoSQL 数据库,支持灵活的模式方法,能够高效地存储大规模数据集。它使用多种编程语言编写,包括 JavaScript、Python、Java、PHP、C++、C、Ruby 和 Perl。此外,MongoDB 采用服务器端公共许可证(SSPL)发布,支持存储和检索大容量数据的独特机制。MongoDB 程序简单、易于配置,但具有高性能、自动可扩展性和高可用性。


MongoDB 的主要特点


以下是令 MongoDB 不断赢得青睐的关键特性:

  • 无模式设计: MongoDB 是一款非关系型数据库,采用文档和集合存储和检索数据,无需创建表格或预定义模式。

  • 可扩展性: 与其他 SQL 数据库不同,MongoDB 水平可扩展,允许用户创建具有实时复制功能的集群。支持分片过程,轻松实现数据在多台服务器之间的横向扩展。

  • 本地代码数据访问: MongoDB 将所有采集的数据存储在类似 JSON 的文档中,支持随时间的灵活修改。这让开发人员可以使用任何编程语言轻松检索数据结构中的信息。

  • 经济高效: MongoDB 是一款免费、开源的非关系型数据库管理系统,能够以经济高效的方式存储大规模数据集。

  • 高性能: 因其 NoSQL 的特性,MongoDB 速度极快且易于使用。能够在不损害数据完整性的前提下快速存储、操作和检索数据。

三、为什么要从 MySQL 同步到 MongoDB?


自 1995 年诞生起,MySQL 一直在为先进的 Web、电子商务和企业数据管理应用等提供支持。但如今, 数据处理、分析以及应用的需求正在变得愈加复杂。


随着各种来源的数据不断涌入,企业发现使用 MySQL 等传统关系型数据库很难管理日益复杂的用户负载。而这正是一些企业选择将数据从 MySQL 同步到 MongoDB 的重要原因。


如今的工程应用程序需要持久保存复杂和动态的数据,以匹配现阶段软件开发所使用的高度灵活和功能强大的语言。作为首屈一指的 NoSQL 数据库,MongoDB 很好地解决了上述问题,为用户提供了与现代应用程序需求匹配的灵活可扩展的解决方案。


与关系数据库相比,MongoDB 的无模式和非结构化设计允许用户存储具有不同数据集的文档。而完成 MySQL 到 MongoDB 的同步后,企业将收获:

  • 文档数据模型支持以最有效的方式处理数据。

  • 分布式系统设计能够智能地将数据存入想要的任何地方。

  • 统一的 MongoDB 体验帮助企业避免与供应商深度绑定,得以自由地开展面向未来的工作

至此,我们已经对 MySQL 和 MongoDB 的特性有了基本的了解,下面让我们直接进入 MySQL 到 MongoDB 的数据复制教程。


四、解锁 MySQL → MongoDB 的数据同步任务


将数据从 MySQL 向 MongoDB 同步时,搭建有效的数据管道对于顺利同步至关重要。本节将探讨实现这一任务的两种主要方法。一是借助 Tapdata 这样的平台化工具,二是利用 Python 的脚本方法。


方法一:Tapdata Real-Time Data Pipeline


版本指路:

>>> 点击登录 Tapdata Cloud

>>> 申请试用 Tapdata 本地部署版

*本节以 Tapdata Cloud 作为演示版本


① 登录 Tapdata Cloud

01.png

* 默认已完成 Tapdata Cloud 账号注册及 Agent 部署


② 创建数据源 MySQL 的连接

02.png03.png


进入 Tapdata Cloud 【连接管理】页面,点击【创建连接】按钮, 在弹出的窗口中选择 MySQL 数据库。


参考右侧连接配置帮助,通过连接测试并完成连接创建(*如提示连接测试失败,可根据页面提示进行修复):

04.png



③ 创建数据目标 MongoDB 的连接

重复上述环节,创建 MongoDB 为数据目标:

05.png



④ 新建并运行 MySQL 到 MongoDB 的同步任务

06.png


方法二:Python 脚本


① 安装所需的模块

第一步需要安装所需的模块,以连接到 MySQL 和 MongoDB 数据库实例。为此,您可以使用 mysql.connector 官方模块连接到 MySQL 数据库。同样,您可以使用 pymongo 模块从 Python 连接到 MongoDB。


运行以下示例中的 PIP 命令,安装从 MySQL 迁移到 MongoDB 所需的模块:

代码-1.png


PIP 是 Python 模块/包的包管理器


② 从 MySQL 表中读取数据

迁移的下一步需要您从源 MySQL 表中读取数据。然后将这些数据准备成 MongoDB 支持的格式。MongoDB 是一种 NoSQL 数据库,它将数据存储为 JSON 文档。因此,在将数据加载到目标 MongoDB 数据库之前,建议将 MySQL 数据转换为 JSON 格式。


由于 Python 具有强大的数据处理能力,因此很容易生成 JSON 格式的 MySQL 数据。执行以下脚本以生成 JSON 格式的数据:

02.png



在没有任何错误的情况下编译该脚本将返回以下输出:

03.png


结果是一个 JSON 数组,因为在游标中传递了 dictionary=True 参数。现在,您已经将 MySQL 源数据转换为 JSON 格式,让我们继续将其写入 MongoDB 集合。


③ 写入 MongoDB 集合

下一步需要您将 JSON 格式的源数据加载到 MongoDB 集合中。MongoDB 集合基本上是 MySQL 表的 NoSQL 等效部分,由一组文档组成。


您可以使用集合类的 insert_many() 方法返回插入文档的 Object IDs 列表。但是,在调用此方法之前,需要进行长度检查,因为当将空列表作为参数传递时,它会抛出异常。执行以下脚本将数据加载到 MongoDB 集合中。

04.png


在成功执行此脚本后,您可以检查 MongoDB 数据库实例,以验证文档是否已插入集合中。


由于 MongoDB 是无模式的,您无需预定义模式来插入文档。MongoDB 会自动创建数据库、集合和模式。


④ 完整脚本

只需将上述脚本组合起来,读取 MySQL 表并将其插入 MongoDB 集合。

05.png


06.png


⑤ 优化脚本以加载 MySQL 模式中的所有表

MySQL 到 MongoDB 数据复制的下一步需要遍历 MySQL 数据库中所有表的列表,并将结果插入新集合。可以使用 information_schema.tables 元数据表执行此 MySQ L到 MongoDB 查询。它返回给定模式中所有表的列表。之后,您可以遍历这些表并调用上述脚本,移动每个表的数据。


07.png


可以通过将迁移逻辑抽象为一个函数来实现此目标。

08.png


您可以使用打印语句来跟踪脚本的执行进度。可以参考完整的脚本以更好地理解。


就是这样,凭借对 Python 编程的基本了解,您就可以轻松地将数据从 MySQL 迁移到 MongoDB。然而,这种方法最适合具有技术经验的专业人士。如果您不想花费大量时间编写定制脚本并解决数据问题,仍然建议选择 Tapdata 这样专业的第三方解决方案。


五、Why Tapdata


借助 Tapdata 出色的实时数据能力和广泛的数据源支持,可以在几分钟内完成从源库到 ClickHouse 包括全量、增量等在内的多重数据同步任务。


在 Any Source → ClickHouse 的数据同步任务中,Tapdata 展现出如下优势:

  • 内置 60+ 数据连接器,稳定的实时采集和传输能力

    以实时的方式从各个数据来源,包括数据库、API、队列、物联网等数据提供者采集或同步最新的数据变化。支持多源异构数据双向同步,自动映射关系型到非关系型。一键实现实时捕获,毫秒内更新。已内置 60+连接器且不断拓展中,覆盖大部分主流的数据库和类型,并支持您自定义数据源。

  • 具有强可扩展性的 PDK 架构

    4 小时快速对接 SaaS API 系统;16 小时快速对接数据库系统。

  • 对源库几乎无影响

    基于自研的 CDC 日志解析技术,0入侵实时采集数据,对源库几乎无影响。

  • 全链路实时

    基于 Pipeline 流式数据处理,以应对基于单条数据记录的即时处理需求,如数据库 CDC、消息、IoT 事件等。不同于传统 ETL,每一条新产生并进入到平台的数据,会在秒级范围被响应,计算,处理并写入到目标表中。同时提供了基于时间窗的统计分析能力,适用于实时分析场景。

  • 数据一致性保障

    通过多种自研技术,保障目标端数据与源数据的高一致性,并支持通过多种方式完成一致性校验,保障生产要求。

  • 可视化任务运行监控和告警

    包含 20+ 可观测性指标,包括全量同步进度、增量同步延迟等,能够实时监控在运行任务的最新运行状态、日志信息等,支持任务告警。

结论

当今世界应用程序的构建和运行方式推动 MySQl 这样的关系数据库能力行至天花板。这就是为什么像 MongoDB 这样的 NoSQL 数据库近年来在流行度上迅速崛起的原因。MongoDB 将数据存储为自包含的 JSON 文档集合。由于其动态模式、高可扩展性和更快的访问速度,MongoDB 已经广泛被认可为一种领先的数据库。


本文向您介绍了 MySQL 和 MongoDB,并提供了从 MySQL 向 MongoDB 同步的逐步指南。然而,将 MySQL、MongoDB 和其他数据源的数据整合到一个单一的存储系统中以获取对业务绩效的完整概览是很重要的。使用 Tapdata 等数据集成工具将 MySQL 和 MongoDB 连接到数据仓库(如BigQuery、ClickHouse)可以节省大量时间和精力。

推荐阅读