阿里云DTS踩坑经验分享系列|数据不一致修复大法

本文涉及的产品
数据管理 DMS,安全协同 3个实例 3个月
推荐场景:
学生管理系统数据库
数据传输服务 DTS,数据迁移 small 3个月
推荐场景:
MySQL数据库上云
数据传输服务 DTS,数据同步 1个月
简介: 阿里云数据传输服务DTS在帮助用户迁移数据、同步数据时,在某些复杂场景下会出现源库与目标库数据不一致的问题,造成数据错误,给用户带来困扰。由于数据不一致的问题很难完全避免,为了及时修复不一致的数据,DTS产品推出数据订正功能,保障用户在同步\迁移数据时的数据一致性。本文介绍了产生数据不一致的一些典型场景,并重点阐述了如何使用DTS数据订正功能来修复不一致的数据。

阿里云DTS作为数据世界高速传输通道的建造者,每周为您分享一个避坑技巧,助力数据之旅更加快捷、便利、安全。

点击立即体验MySQL->ClickHouse同步链路


1、导读

阿里云数据传输服务DTS在帮助用户迁移数据、同步数据时,在某些复杂场景下会出现源库与目标库数据不一致的问题,造成数据错误,给用户带来困扰。由于数据不一致的问题很难完全避免,为了及时修复不一致的数据,DTS产品推出数据订正功能,保障用户在同步\迁移数据时的数据一致性。本文介绍了产生数据不一致的一些典型场景,并重点阐述了如何使用DTS数据订正功能来修复不一致的数据。

2、DTS数据不一致场景

在同步\迁移数据过程中产生数据不一致场景的原因很复杂,我们可以通过下面的三个典型例子来看下为什么会出现数据不一致的情况。

2.1 字段类型不一致

例如用户在源库中有表A,表结构定义如下,其中 id 为自增主键,user_id 表示用户id,words表示用户的评论

CREATE TABLE `Example`.`A` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
  `user_id` int DEFAULT NULL COMMENt 'user_id', 
  `words` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT 'words',
  Primary Key (`id`)
) ENGINE=InnoDB

在目标库中,用户已经创建了一张需要同步的表A,表结构定义如下

CREATE TABLE `Example`.`A` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
  `user_id` int DEFAULT NULL COMMENt 'user_id',
  `words` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT 'words',
  Primary Key (`id`)
) ENGINE=InnoDB

如果此时在源端插入一条数据,id = 1, user_id = 123456, words = 'Welcome to use data transmission service!' 如下所示:

INSERT INTO `Example`.`A` (`id`, `user_id`, `words`) VALUES (1, 123456, 'Welcome to use data transmission service!')

在源端这条数据能够被正确地写入,但是在目标端,由于detail字段的类型设置为varchar(20),写入时会产生截断,最终在目标端写入的数据就会变成:

id = 1, user_id = 123456, words = 'Welcome to use data '

显然,此种情况下目标端的words字段与源端的words字段不一致了。

2.2 业务双写场景

再比如,(接着上面的例子)假设用户在使用DTS进行数据同步的过程中,由于某些原因将部分业务流量切换到了目标端,导致目标端删除了 user_id = 123456 的数据,如下所示:

DELETE FROM `Example`.`A` WHERE `user_id` = 123456

此时目标端的该记录显然会被删除,但由于这是一条单向同步链路两端业务双写导致源端 user_id = 123456 的记录依然存在,因此产生了数据不一致的情况。

2.3 用户侧非标准操作

DTS无法限制用户的行为,这在一些场景中也会造成数据不一致。例如,DTS支持从自建MySQL数据库同步到RDS MySQL数据库,并支持RENAME TABLE的操作。但如果用户配置任务时选择了仅同步表A,却在同步过程中执行了以下语句:

RENAME TABLE A TO B

此时数据库中实际存在的表为表B,但用户的同步任务配置的却是表A,那么在RENAME TABLE后所有对表B进行的数据变更都不会同步到目标端,造成了数据不一致。(正确操作是配置库级别同步~)

其实对于类似有风险的行为,DTS会在文档中进行说明,用户在配置任务前需要确认这些风险点。详细内容请参考:配置数据同步任务

2.4 小结

实际生产中,产生数据不一致的场景还有很多,尤其是在源端和目标端数据库异构的情况下,DTS研发同学难以在文档中列举出所有可能导致数据不一致的场景,只能在日常运维中 case by case 地分析定位原因。为了及时修复不一致数据,DTS推出了数据订正功能,最大限度确保数据最终一致性。

3、DTS数据订正功能原理

DTS数据订正功能采用校验+订正的模式,即:先校验出不一致的数据,然后将这些不一致的数据进行订正。具体流程如下图所示:

image.png

需要指出的是,由于数据订正过程中迁移/同步任务可能还在继续,这有可能导致订正结束之后仍然存在数据不一致,因此在订正的最后会复检订正的数据是否已经完全一致了,DTS也会根据复检的结果来判断是否需要二次订正,直至订正结果显示所有订正的数据在源端和目的端均已保持一致。

此外,由于数据订正是一个高危的操作,为了保证出现问题时的数据可恢复性,DTS会保存所有执行的Insert/Delete/Update等数据操作用于回滚数据。

4、如何使用数据订正功能

4.1 检查数据一致性

检查数据是否一致通常有两种方式:

用户自行检查:通过业务逻辑来判断数据同步是否成功,或者随机地抽取一些数据进行检查。

DTS数据校验:目前DTS的数据校验包括全量校验和增量校验,能精准判断出在数据迁移/同步过程中是否出现了数据不一致,并且能够提供不一致数据的具体内容。

如果用户发现了数据不一致,需要联系DTS的运维同学,排查出数据不一致的原因并进行数据订正。由于数据订正功能属于高危操作,会对用户数据直接进行修改,因此该功能并不直接开放给用户,而是在用户授权的情况下,由研发同学结合实际情况,在后台使用数据订正功能来帮助用户订正数据。

4.2 确认数据订正条件

找到DTS同学之后,DTS同学会及时帮助用户分析数据不一致的原因,并在需要的情况下帮用户订正数据。在数据订正之前需要说明的是,数据订正是有风险的,为了避免造成用户损失,DTS通常会根据过往经验总结一些数据订正条件让用户确认(以下仅为举例说明,以DTS实际提出的订正条件为准)

image.png

如果不满足上述订正前置条件,为了避免出现数据订正失败且无法回滚的情况,DTS不会帮助用户进行数据订正。

在满足上述条件之后,用户还需要向DTS同学口头授权同意订正,这样一来DTS同学才可以进行数据订正操作。

4.3 验证订正结果

订正的过程完全由DTS负责,因此用户在发出订正需求之后就不需要进行其它操作了。但在数据订正之后,DTS通常建议用户自己再进行一次全量校验以检查数据是否一致,避免后续产生纠纷。

如果用户对订正的数据有疑问,DTS也可以提供进行数据订正的全部SQL语句。

5、总结

阿里云DTS提供了完整的数据校验+数据订正能力,确保用户在进行数据迁移/同步过程中出现数据不一致时,能够快速发现问题并解决问题,最大限度确保数据最终一致性。

6、快来关注

  1. 数据传输服务(Data Transmission Service,简称DTS)支持关系型数据库、NoSQL、大数据(OLAP)等数据源,集数据迁移、订阅、实时同步、校验功能于一体,能够解决公共云、混合云场景下,远距离、秒级异步数据传输难题。其底层基础设施采用阿里双11异地多活架构,为数千下游应用提供实时数据流,已在线上稳定运行7年之久,是一款沉淀了丰富实践经验的可靠产品。点击了解更多DTS相关信息

  1. 欢迎加入钉群讨论交流:

相关文章
|
11天前
|
存储 负载均衡 安全
使用阿里云解决云上数据保存的挑战
在数字化时代,数据成为企业重要资产,但快速增长的数据管理变得复杂。为此,作者选择了阿里云作为云上数据存储解决方案。阿里云凭借其高性能、高可靠和高安全的云存储服务,如对象存储OSS、文件存储NAS等,解决了数据保存问题。此外,阿里云的多副本和多机房策略确保了数据的可靠性和安全性,同时,丰富的存储产品线满足了不同场景的需求,帮助企业降低存储成本并提高数据访问效率。通过实施数据迁移、访问和备份恢复,作者成功优化了数据管理并期待未来与阿里云的更多合作。
42 8
|
12天前
|
存储 数据采集 NoSQL
DTS在迁移大数据量的MongoDB数据库时如何保证数据的准确性和完整性?
【6月更文挑战第4天】DTS在迁移大数据量的MongoDB数据库时如何保证数据的准确性和完整性?
81 1
|
12天前
|
NoSQL 关系型数据库 MongoDB
DTS支持哪些非关系型数据库的数据交互?
【6月更文挑战第4天】DTS支持哪些非关系型数据库的数据交互?
18 1
|
19天前
|
OLAP 数据处理 Apache
众安保险 CDP 平台:借助阿里云数据库 SelectDB 版内核 Apache Doris 打破数据孤岛,人群圈选提速4倍
众安保险在CDP(Customer Data Platform,客户数据平台)建设中,通过引入阿里云数据库SelectDB版内核Apache Doris,成功打破了数据孤岛,并显著提升了人群圈选的速度
184 1
|
19天前
|
运维 数据挖掘 Serverless
阿里云Elasticsearch Serverless助力某电商平台公司实现商品订单数据的实时写入查询
某电商平台公司采用阿里云Elasticsearch Serverless解决方案,实现商品、订单和其他关键信息的写入和查询的实时响应。
165 1
|
19天前
|
存储 安全 数据挖掘
性能30%↑|阿里云AnalyticDB*AMD EPYC,数据分析步入Next Level
第4代 AMD EPYC加持,云原生数仓AnalyticDB分析轻松提速。
性能30%↑|阿里云AnalyticDB*AMD EPYC,数据分析步入Next Level
|
19天前
|
存储 安全 数据挖掘
性能30%↑|阿里云AnalyticDB X AMD EPYC,数据分析步入Next Level
阿里云原生数仓 AnalyticDB for PostgreSQL 与 AMD 新一代硬件深度优化,结合全自研计算引擎及行列混合存储实现性能升级,综合性能提升30%。结合丰富的企业级能力帮助企业构建离在线一体、流批一体综合数据分析平台,采用同一引擎即可满足离线批处理、流式加工,交互式分析三种场景,在开发运维、时效性及成本上具备更高的性价比。
437 0
|
24天前
|
消息中间件 关系型数据库 Kafka
实时计算 Flink版产品使用合集之使用DTS从RDSMySQL数据库同步数据到云Kafka,增量同步数据延迟时间超过1秒。如何诊断问题并降低延迟
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
1月前
|
SQL 分布式计算 监控
在数据传输服务(DTS)中,要查看每个小时源端产生了多少条数据
【2月更文挑战第32天】在数据传输服务(DTS)中,要查看每个小时源端产生了多少条数据
24 6
|
1月前
|
关系型数据库 MySQL 数据挖掘
阿里云 SelectDB 携手 DTS ,一键实现 TP 数据实时入仓
DTS 作为阿里云核心的数据交互引擎,以其高效的实时数据流处理能力和广泛的数据源兼容性,为用户构建了一个安全可靠、可扩展、高可用的数据架构桥梁。阿里云数据库 SelectDB 通过与 DTS 联合,为用户提供了简单、实时、极速且低成本的事务数据分析方案。用户可以通过 DTS 数据传输服务,一键将自建 MySQL / RDS MySQL / PolarDB for MySQL 数据库,迁移或同步至阿里云数据库 SelectDB 的实例中,帮助企业在短时间内完成数据迁移或同步,并即时获得深度洞察。
阿里云 SelectDB 携手 DTS ,一键实现 TP 数据实时入仓

热门文章

最新文章