irpas技术客

数据库同步有哪些方式?【怎么保障目标和源数据一致性】_曲鸟_数据库同步

网络 5853

文章目录 摘要一、几种主流的数据库同步方式二、架构及工作原理三、全量同步和实时增量同步机制四、源和目标五、举例:Oracle 数据实时同步到 Elasticsearch六、目标和源数据一致性七、异构数据类型转换八、总结

摘要

数据库同步有3大难题: 1是如何保障目标和源数据一致性; 2是异构数据库如何做数据类型转换,导致数据同步失败的原因常常是因为数据类型不一样; 3是在数据越实时越有价值的背景下,同步过程中能否做到实时同步。

一、几种主流的数据库同步方式

方式一:基于无侵入的日志模式(如Oracle redo、Mysql binlog) 基于日志的采集方式无需在源库端部署任务代理程序(Agent)及建任何表,对源数据库无侵入和影响压力;

方式二:基于时间戳 同步过程通过特定属性(如时间戳、自增序列)来识别新插入的数据,该方式实现最简单,但无法记录删除和更新,也不具备实时的能力;

方式三:基于触发器 基于数据库的触发器机制,当执行DML相关语句时,执行动作来捕获数据,该方式会降低系统能,因此大多数场景下,生产系统不允许添加触发器。

方式四:基于快照 基于快照的方式,可以通过比较源表和快照表来获得数据变化,但需要消耗大量存储空间和计算资源。

方式五:基于离线批处理 通过jdbc查询来批量获取数据,会进行数据表的大范围扫描和数据提取,会对数据库产生大量开销。

本文主要探讨无侵入的CDC模式,并以运用这种模式的数据库同步云工具 Tapdata Cloud 举例,你要问我为啥用它举例,原因只有一个:永久免费。

二、架构及工作原理

Tapdata Cloud包含两部分:

Tapdata Cloud Manager,TCM是Tapdata Cloud的管理端,负责agent实例的安装,同步任务的配置、分发、任务状态监测。Tapdata agent,是Tapdata Cloud数据同步服务的执行实例,负责从TCM获取任务信息,通过流式技术从源系统获取数据、处理转换数据并发送到目标系统,并在任务执行过程中监测并上报任务状态至TCM。

(Tapdata Cloud 工作原理图)

有朋友可能会担心这个云平台会不会把我要同步的数据泄露出去?

从Tapdata Cloud 工作原理上可以看出:

同步实例节点单向连接管控端运行服务。 Tapdata agent实例节点对外不主动暴露网络信息,只会连接 TCM管理端服务,获取任务信息、上报状态信息。用户部署的Tapdata agent实例节点和 TCM 通信链路采用 HTTPS 协议。自建模式下,所有数据流转均发生在受用户管理的服务器和网络环境。 可见,数据同步过程中数据泄露的问题大可不必担忧。 三、全量同步和实时增量同步机制

Tapdata Cloud 这款云同步工具支持全量同步和实时增量同步,实现的过程如下图所示:


四、源和目标

据 Tapdata Cloud 最新版本,目前支持了:

数据库版本作为源作为目标是否可用mysql5.x,8.x支持支持是oracle9i, 10g, 11g, 12c支持支持是sqlsever2005, 2008, 2012, 2014, 2016, 2017支持支持是mongodb3.2, 3.4, 3.6, 4.0, 4.2支持支持是PostgreSQL9.x, 10.x,11.x,12.x,13.x支持支持是Elastic5.x, 6.x, 7.x暂不支持支持是达梦数据库7,8支持支持是Kafka2.3.x及以上暂不支持支持是Redis2.x, 3.x, 4.x暂不支持支持即将上线DB29.7 LUW版本支持支持即将上线SybaseSybase ASE 15.7 及以上支持支持即将上线Gbase支持支持即将上线

五、举例:Oracle 数据实时同步到 Elasticsearch

一般需要做全文检索的时候,会将 Oracle 数据实时同步到 Elasticsearch。

第一步:配置 Oracle 连接

点击 Tapdata Cloud 操作后台左侧菜单栏的【连接管理】,然后点击右侧区域【连接列表】右上角的【创建连接】按钮,打开连接类型选择页面,然后选择Oracle
在打开的连接信息配置页面依次输入需要的配置信息

【连 接 名 称】:设置连接的名称,多个连接的名称不能重复 【数据库地址】:数据库 IP / Host 【端 口】:数据库端口 【数据库名称】:tapdata 数据库连接是以一个 db 为一个数据源。这里的 db 是指一个数据库实例中的 database,而不是一个 schema。 【账 号】:可以访问数据库的账号 【密 码】:数据库账号对应的密码 【时 间 时 区】:默认使用该数据库的时区;若指定时区,则使用指定后的时区设置

第二步:配置 Elasticsearch 连接

同第一步操作,点击左侧菜单栏的【连接管理】,然后点击右侧区域【连接列表】右上角的【创建连接】按钮,打开连接类型选择页面,然后选择Elasticsearch
在打开的连接信息配置页面依次输入需要的配置信息,配置完成后测试连接保存即可。

第三步:建立同步任务,以全量+增量同步举例 进入Tapdata Cloud 操作后台任务管理页面,点击添加任务按钮进入任务设置流程


根据刚才建好的连接,选定源端与目标端。


根据数据需求,选择需要同步的库、表,如果你对表名有修改需要,可以通过页面中的表名批量修改功能对目标端的表名进行批量设置.


在以上选项设置完毕后,点击下方的全量+增量选项并点击确定按钮即可完成本次全量同步任务的配置,在点击确定后将自动返回任务管理页面,在任务管理页面中,点击右侧的启动按钮即可使Tapdata Agent 开始执行本次任务。在全量任务执行完毕后,Tapdata Agent 会自动进入增量同步状态。在该状态中,Tapdata Agent 会持续监听源端的数据变化(包括:写入、更新、删除),并实时的将这些数据变化写入目标端。


点击任务监控可以打开任务执行详情页面,可以查看任务执行的具体信息。


同理,其他数据库的同步操作也跟上面步骤一致,比如几个常用的场景是: ? 从业务数据库到缓存数据库的实时同步 ? 不停机迁移数据库 ? 将主业务中心的数据实时同步至次业务中心 ? 构建只读实例 ? 构建异地灾备中心 ? 构建异地多活


六、目标和源数据一致性

很多人都担心同步的数据可能没法和源数据一致,Tapdata Cloud 提供了数据校验功能,包括快速count校验、表全字段值校验和关联字段值校验三种校验方式。 ? 快速count:仅对源表和目标表的行数进行count校验,速度极快,但是不会展示差异的具体字段内容。 ? 全表字段值校验:会对源表和目标表的全部字段进行逐行校验,能查出所有字段的差异,但是速度慢。 ? 关联字段值校验:只对源表和目标表的关联字段的值进行比对校验,速度快于全表字段值校验模式。 校验操作步骤 进入数据校验菜单,点击新建校验任务创建数据校验。 【选择任务】:选择一个历史同步任务 【校验类型】:可选 快速count校验、表全字段值校验和关联字段值校验 【校验任务名】:默认与选择的同步任务名字一样 【校验频次】:设置您的校验的执行频次 【单次校验】:只执行一次校验 【重复校验】:设置校验任务重复执行,支持设置校验执行的起止时间和校验间隔 【错误数据保存条数】:当出现校验不一致的数据时,不一致数据保存的最大条数。该数值会影响到差异校验,当错误数据条数超出设置的保存条数时,将无法进行差异校验。 【校验条件】:添加需要进行校验的表。点击自动添加会自动将任务下的所有表全部添加进来。

快速count校验

创建快速count校验时只需要选择到要校验的表,无需设置关联条件。


表全字段值校验

除了要选择待校验表外,还需要针对每一个表设置索引字段。


在进行表全字段值校验时,还支持进行高级校验。通过高级校验可以添加JS校验逻辑,对源和目标的数据进行校验。


完整示例:以MongoDB查询示例

JavaScript

function validate(sourceRow){ // 第1步 var targetRow = target.executeQuery({database: "target",collection: "USER",filter: {USER_ID: sourceRow.USER_ID}}); // 第2步 if(sourceRow.USER_ID === targetRow[0].USER_ID){ // 第3步 return {result: 'passed',message: "",data: ""} }else{ return {result: 'failed',message: "记录不一致",data: targetRow} } }


关联字段值校验

创建关联字段值校验时,除了要选择待校验表外,还需要针对每一个表设置索引字段。

七、异构数据类型转换

在异构数据库之间做同步,类型转换是一大难题,也是导致数据同步失败的重要原因,Tapdata Cloud 类型映射功能,在系统推演的基础上,提供了人工调整的能力,这一点比其他数据同步工具都更方便使用。


八、总结

为了达到数据实时要求,并且不对源库造成干扰,首选 CDC 模式。 现在市面上已经陆续出现了一些数据同步工具,完全没有必要自己撸代码了,免费的用起来不香吗? 希望上文的实操图文,对你的数据库同步有帮助,有数据库相关的问题可以随时跟我交流!


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #数据库同步