在现代企业中,数据无处不在,贯穿于各个业务环节和系统之间。无论是跨系统的数据集成、多地域的数据协同,还是实时应用的数据同步,数据的一致性和及时性都至关重要。在数字化转型的过程中,如何确保不同系统、地域、设备之间的数据同步,成为了企业面临的重要挑战。
本专题将基于实践经验,从常见需求入手,为大家介绍热门数据源与数据目标之间的数据同步(全量/增量)如何实现?了解如何快速搭建数据管道,实现数据的高效迁移与无缝同步。
>>> 本文教程为:MySQL → MongoDB 的数据同步任务。
在实际应用中,数据同步涉及诸多场景,如容灾备份、应用改造/替代、数据库版本升级/回退、数据库替代、业务分流等,不同的场景在数据流向、同步需求、数据处理等方面会有不同的需求,需要针对性地选择迁移工具和方案。
以 MySQL 到 MongoDB 的数据同步需求为例,这样从关系型数据库到非关系型数据库的数据移动需要考虑数据结构的差异和转换规则。MySQL 基于表结构,而 MongoDB 是文档型数据库,数据格式更为灵活。同步过程中,需要将 MySQL 中的表结构映射到 MongoDB 的文档结构,并确保数据类型兼容。此外,还需考虑数据一致性、实时性要求,以及增量同步机制的实现。
一、什么是 MySQL?
MySQL 是一个流行的开源关系型数据库管理系统(RDBMS),其特点是高性能、可靠性和易用性,广泛应用于 Web 应用、企业应用和数据仓库。基于 SQL(结构化查询语言),MySQL 适用于各种规模的应用、具有跨平台特性、提供多种存储引擎、支持事务和外键。其中,MySQL 的高性能和可靠性在实际应用中尤为重要,因为它能够处理大量的数据和高并发的请求,而不会显著降低系统的响应速度。MySQL 的易用性也是一个关键优势,用户可以通过图形化界面或者命令行进行数据库管理,相对简单易学。
优势
二、什么是 MongoDB?
MongoDB 是一款面向文档的、分布式数据库系统,用于存储和管理大量结构化和非结构化数据。其核心概念包括文档存储和分布式,主要特性有动态模式、索引、聚集、映射-归约和复制。它广泛应用于内容管理系统、电子商务平台、社交媒体网站、物联网应用和移动应用开发等领域。MongoDB 利用灵活的文档取代表和行来处理和存储各种形式的数据。作为 NoSQL 数据库解决方案,MongoDB 提供了一个弹性数据存储模型,可以让用户轻松地存储和查询多元数据类型。不仅简化了数据库管理,而且为跨平台应用程序和服务创建了高度可扩展的环境。MongoDB 的设计理念是为了应对大数据量、高性能和灵活性需求,它以 JSON-like 的格式存储数据,使得数据结构更加灵活和丰富。
优势
三、方案选择:如何实现 MySQL → MongoDB 的数据同步?
实现 MySQL 到 MongoDB 的数据同步的常见方式包括,手动构建数据管道或使用自动化工具: 手动构建数据管道
例如编写 Python 脚本来处理数据的提取、转换和加载(ETL)。这里可以借助 Apache Airflow 等工具来调度和管理这些任务。然而,这种手动方法需要开发者具备深厚的编程和数据工程知识,通常需要花费一周甚至更长时间来完成整个开发流程。此外,手动构建的数据管道需要持续的维护和监控,以确保数据的准确性和实时性。
自动化工具
例如选择使用 TapData 这样的自动化数据集成平台,只需三步就可以在几分钟内开启所需的数据同步任务:
TapData 内置 100+ 数据连接器,提供了友好的用户界面和强大的实时同步功能,无需编写复杂的代码即可轻松实现数据的迁移和同步。这样不仅节省了大量的时间和人力成本,还能保障数据同步过程的稳定性和可靠性。对于那些希望快速、高效地完成 MySQL 到 MongoDB 数据同步的企业和开发者来说,这样的便捷工具无疑是一个理想的选择。
四、TapData 高效同步完整教程
完成 TapData Agent 部署后,即可跟随以下教程在 TapData 中添加源与目标的数据连接(支持版本:MySQL 5.0、5.1、5.5、5.6、5.7、8.x;MongoDB 3.4、3.6、4.0+),并快速构建数据管道。(*涉及工具版本为 TapData 本地部署版)
版本指路:
>>> 点击登录 Tapdata Cloud >>> 申请试用 Tapdata 本地部署版
① 准备工作(作为源库)
数据源:MySQL
为保障任务的顺利执行,您需要为 MySQL 数据库开启 Binlog(可实现增量数据同步),然后为数据复制/开发任务创建一个数据库账号。
1. 登录 MySQL 数据库,执行下述格式的命令,创建用于数据同步/开发任务的账号。
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
示例:创建一个名为 tapdata 的账号。
CREATE USER 'tapdata'@'%' IDENTIFIED BY 'Tap@123456';
2. 为刚创建的账号授予权限,简易示例如下,推荐基于业务需求设置更精细化的权限控制。
授予指定库权限
授予所有库权限
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON . TO 'username' IDENTIFIED BY 'password';
GRANT SELECT ON database_name.* TO 'username' IDENTIFIED BY 'password';
3. 为保障读取 MySQL 数据库的增量数据,您需要跟随下述步骤开启 Binlog。
server_id = 223344
log_bin = mysql-bin
expire_logs_days = 1
binlog_format = row
binlog_row_image = full
修改完成后,执行下述命令重启 MySQL 进程。
/etc/inint.d/mysqld restart
(可选)登录 MySQL 数据库,执行下述命令确认配置已生效,即输出的结果中,format 的值为 ROW。
SHOW VARIABLES LIKE 'binlog_format';
输出示例如下:
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | ROW |
+---------------+-------+
1 row in set (0.00 sec)
数据目标:MongoDB
基本配置
账户权限
如果目标 MongoDB 启用了安全身份验证,则 Tapdata 使用的用户帐户必须具有以下角色 / 权限:
use admin
db.createUser({
"user" : "johndoe",
"pwd" : "my_password",
"roles" : [
{
"role" : "clusterMonitor",
"db" : "admin"
},
{
"role" : "readWrite",
"db" : "my_db"
},
{
"role" : "read",
"db" : "local"
}
]
}
*注意:只有 MongoDB 版本 3.2 需要 local 数据库的读取权限。
② 创建 MySQL 的连接
1. 进入 TapData 控制台,在左侧导航栏,单击连接管理。
2. 单击页面右侧的创建,在弹框中,搜索并选择 MySQL。 3. 在跳转到的页面,根据下述说明填写 MySQL 连接信息:
4. 单击连接测试,测试通过后单击保存:
*提示:如提示连接测试失败,请根据页面提示进行修复。
③ 创建 MongoDB 的连接
1. 参照 MySQL 连接创建流程,完成 MongoDB 连接配置信息填写,添加数据目标:
2. 测试 MongoDB 的连接:
④ 创建数据复制/开发任务
1. 左侧导航栏点击数据复制,并点击右侧创建:
2. 进入 DAG 页面,构建数据复制任务,通过拖拉拽的方式添加源与目标节点,并连接源与目标:
3. 单击源与目标节点,即可按需对二者进行设置:
4. 保存任务
⑤ 任务启动与监控
1. 启动任务,任务全量同步正常运行:
2. 增量同步开启
以上,便是借助 TapData 快速实现数据库 MySQL 到 MongoDB 的全、增量同步的模拟教程。