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

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 数据库同步有哪些方式?【怎么保障目标和源数据一致性】

摘要

数据库同步有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。


9688e55b6b7043128398f942aabddbbb.png


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


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


同步实例节点单向连接管控端运行服务。 Tapdata agent实例节点对外不主动暴露网络信息,只会连接 TCM管理端服务,获取任务信息、上报状态信息。

用户部署的Tapdata agent实例节点和 TCM 通信链路采用 HTTPS 协议。

自建模式下,所有数据流转均发生在受用户管理的服务器和网络环境。

可见,数据同步过程中数据泄露的问题大可不必担忧。


三、全量同步和实时增量同步机制


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


7ea6e5d5446843b9bd58e077c057ff37.png


四、源和目标

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


image.png


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

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


第一步:配置 Oracle 连接


点击 Tapdata Cloud 操作后台左侧菜单栏的【连接管理】,然后点击右侧区域【连接列表】右上角的【创建连接】按钮,打开连接类型选择页面,然后选择Oracle

76be2ff6316e470daf88ce2d7bd73a05.png

在打开的连接信息配置页面依次输入需要的配置信息


c918e064282c46e493c9ca165ebbe339.png



【连 接 名 称】:设置连接的名称,多个连接的名称不能重复

【数据库地址】:数据库 IP / Host

【端 口】:数据库端口

【数据库名称】:tapdata 数据库连接是以一个 db 为一个数据源。这里的 db 是指一个数据库实例中的 database,而不是一个 schema。

【账 号】:可以访问数据库的账号

【密 码】:数据库账号对应的密码

【时 间 时 区】:默认使用该数据库的时区;若指定时区,则使用指定后的时区设置


第二步:配置 Elasticsearch 连接


同第一步操作,点击左侧菜单栏的【连接管理】,然后点击右侧区域【连接列表】右上角的【创建连接】按钮,打开连接类型选择页面,然后选择Elasticsearch

10f19b0056dc4948a8bc65512f5a04ba.png


在打开的连接信息配置页面依次输入需要的配置信息,配置完成后测试连接保存即可。


e7ed762bc31a40bf8c05d10095c0f7db.png


第三步:建立同步任务,以全量+增量同步举例

进入Tapdata Cloud 操作后台任务管理页面,点击添加任务按钮进入任务设置流程

d921b4503f2e41eb98b85b914356ddcb.png


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

271dcd1e2e414888965f8fc1bcf5797f.png




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


62fade17b81c4dc7a2f1cf3b99145c2a.png


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

be3179b0cd0847a3b7332a6262f4adc6.png

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

f0b40d75595c41509e1edb658cd59258.png


同理,其他数据库的同步操作也跟上面步骤一致,比如几个常用的场景是:

• 从业务数据库到缓存数据库的实时同步

• 不停机迁移数据库

• 将主业务中心的数据实时同步至次业务中心

• 构建只读实例

• 构建异地灾备中心

• 构建异地多活


六、目标和源数据一致性


很多人都担心同步的数据可能没法和源数据一致,Tapdata Cloud 提供了数据校验功能,包括快速count校验、表全字段值校验和关联字段值校验三种校验方式。

• 快速count:仅对源表和目标表的行数进行count校验,速度极快,但是不会展示差异的具体字段内容。

• 全表字段值校验:会对源表和目标表的全部字段进行逐行校验,能查出所有字段的差异,但是速度慢。

• 关联字段值校验:只对源表和目标表的关联字段的值进行比对校验,速度快于全表字段值校验模式。

校验操作步骤

进入数据校验菜单,点击新建校验任务创建数据校验。

【选择任务】:选择一个历史同步任务

【校验类型】:可选 快速count校验、表全字段值校验和关联字段值校验

【校验任务名】:默认与选择的同步任务名字一样

【校验频次】:设置您的校验的执行频次

【单次校验】:只执行一次校验

【重复校验】:设置校验任务重复执行,支持设置校验执行的起止时间和校验间隔

【错误数据保存条数】:当出现校验不一致的数据时,不一致数据保存的最大条数。该数值会影响到差异校验,当错误数据条数超出设置的保存条数时,将无法进行差异校验。

【校验条件】:添加需要进行校验的表。点击自动添加会自动将任务下的所有表全部添加进来。


快速count校验


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


dccbe4ab167442c38bab4c44b85697dd.png


表全字段值校验

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

d4e5439b12f54553a8737dfdd5f864e4.png

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

ba21a3cc90dc43f495e8fdc1485ba6b3.png

完整示例:以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}
    }
}

78608353dcb14977971a7c2120e4fa59.png


关联字段值校验

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

01f25e1be6684d31913ed8f8d54dd033.png

七、异构数据类型转换


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

86a211daa36343e5a2a77b61eefe3098.png


八、总结

为了达到数据实时要求,并且不对源库造成干扰,首选 CDC 模式。

现在市面上已经陆续出现了一些数据同步工具,完全没有必要自己撸代码了,免费的用起来不香吗?

希望上文的实操图文,对你的数据库同步有帮助,有数据库相关的问题可以随时跟我交流!

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
9天前
|
SQL 数据库 开发工具
实时计算 Flink版产品使用合集之数据库中有新增索引,同步任务没有报错,索引的变动是否有影响
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
9天前
|
SQL 数据处理 数据库
实时计算 Flink版产品使用合集之同步数据库时,库名称变了,route只能到表级别,怎么解决
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
17天前
|
关系型数据库 数据库 数据安全/隐私保护
关系型数据库的数据完整性保障
【5月更文挑战第9天】关系型数据库的数据完整性保障
20 1
|
4天前
|
存储 缓存 NoSQL
Redis与数据库同步指南:订阅Binlog实现数据一致性
本文由开发者小米分享,探讨分布式系统中的一致性问题,尤其是数据库和Redis一致性。文章介绍了全量缓存策略的优势,如高效读取和稳定性,但也指出其一致性挑战。为解决此问题,提出了通过订阅数据库的Binlog实现数据同步的方法,详细解释了工作原理和步骤,并分析了优缺点。此外,还提到了异步校准方案作为补充,以进一步保证数据一致性。最后,提醒在实际线上环境中需注意日志记录、逐步优化和监控报警。
31 3
|
9天前
|
SQL 资源调度 关系型数据库
实时计算 Flink版产品使用合集之源表的数据被删除后,目标数据库在重启服务后没有进行相应的删除操作,是什么原因
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
9天前
|
SQL Oracle 关系型数据库
实时计算 Flink版产品使用合集之从Oracle数据库同步数据时,checkpoint恢复后无法捕获到任务暂停期间的变更日志,如何处理
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
9天前
|
SQL Oracle 关系型数据库
实时计算 Flink版产品使用合集之如何SQL同步数据到Oracle数据库中
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
9天前
|
关系型数据库 数据处理 数据库
实时计算 Flink版产品使用合集之支持哪些数据库的整库同步
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
9天前
|
消息中间件 关系型数据库 Kafka
实时计算 Flink版产品使用合集之使用DTS从RDSMySQL数据库同步数据到云Kafka,增量同步数据延迟时间超过1秒。如何诊断问题并降低延迟
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
16天前
|
监控 安全 关系型数据库
关系型数据库数据完整性保障
【5月更文挑战第10天】关系型数据库数据完整性保障
29 4