DTS两个数据库同步实验

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 数据同步,数据迁移

预置条件

A:数据库 Mysql01

B:数据库 Mysql02

通过 DTS 中的“数据同步”实现 Mysql01 到 Mysql02 的数据及数据结构的修改(DML+DDL)的同步。

此处 DTS 上的操作步骤不再详述.

实验步骤

1、数据表tbuser,在两个数据库环境中结构相同,但数据的初始状态如下:

Mysql01中

id

user_name

age

1001

user1

10

1002

user2

20

Mysql02中

id

user_name

age

1001

user1

10

1003

user3

30

2、向 Mysql01 的 tbuser 中插入一条数据:

insertinto tbuser(id,user_name,age)values('1004','user4','40');


此时 Mysql01 中的 binlog :

### INSERTINTO `db01`.`tbuser`
### SET###   @1=1004###   @2='user4'###   @3=40


结束后,我们到 Mysql02 中查看数据,发现多了一条相同的数据。

3、更新 Mysql01 中的tbuser:

update tbuser set user_name='user3'where id =1002;


此时 Mysql01 中的 binlog 为:

### UPDATE `db01`.`tbuser`
### WHERE###   @1=1002###   @2='user3'###   @3='30'


此时去 Mysql02中查看数据,结果如下:

select*from tbuser;


id

user_name

age

1001

user1

10

1003

user3

30

1004

user4

40

也就是在 Mysql02 中没有任何的数据改变,这说明在进行更新操作时,只会更新 id 存在于 Mysql02 中的数据。那么如果我们换成条件更新呢?

在刚刚的基础上,我们继续在 Mysql01 中进行以下 sql 操作:

update tbuser set user_name='user3-01'where user_name ='user3';


此时,Mysql01 中数据为:

id

user_name

age

1001

user1

10

1002

user3-01

30

Mysql02 中的数据为:

id

user_name

age

1001

user1

10

1003

user3

30

1004

user4

40

4、操作两张表中都有的数据 1004

先将 Mysql02 中的数据进行更新:

update tbuser set age='45'where id =1004;


再进行 Mysql01 中的数据更新:

update tbuser set user_name='user4-01'where user_name ='user4';


也就是,我们在进行源库更新时,不采用主键为条件的更新,同时更新的目标字段与第一次在目标库更新的字段不同,那么此时目标库 Mysql02 中的数据会时如何呢?结果如下:

id

user_name

age

1001

user1

10

1003

user3

30

1004

user4-01

40

可以看出,目标库的age又被更新成了 “40”,原因都在 binlog 中,我们可以查看 Mysql01 中的更新:

### UPDATE `db01`.`tbuser`
### WHERE###   @1=1004###   @2='user4-01'###   @3='40'


可见 binlog 中记录的过程都是将表中每个字段都记录下来的,这也就是为什么目标库 Mysql02 中的age也被更新的原因。所以我们在使用DMS进行数据追踪和备份时,发现导出的 sql 都是包含了所有的字段,而不是只有你做了更新的字段的原因。

总结

由此可知当在更新同步时,是通过根据源库的主键 id 进行的目标数据库的更新。后续实现 delete操作,效果相同。同理可推断出,当在源库进行 insert 操作时,要想后续实现这些数据对应的 update 和 delete 操作,那么定然是将源库带 id 的 insert sql进行目标库插入,也就是必须保证源库的主键 id 和目标库的主键 id 相同(具体可见上面的 binlog)。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
canal 缓存 NoSQL
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
根据对一致性的要求程度,提出多种解决方案:同步删除、同步删除+可靠消息、延时双删、异步监听+可靠消息、多重保障方案
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
|
3月前
|
运维 监控 NoSQL
【MongoDB 复制集秘籍】Secondary 同步慢怎么办?深度解析与实战指南,让你的数据库飞速同步!
【8月更文挑战第24天】本文通过一个具体案例探讨了MongoDB复制集中Secondary成员同步缓慢的问题。现象表现为数据延迟增加,影响业务运行。经分析,可能的原因包括硬件资源不足、网络状况不佳、复制日志错误等。解决策略涵盖优化硬件(如增加内存、升级CPU)、调整网络配置以减少延迟以及优化MongoDB配置(例如调整`oplogSize`、启用压缩)。通过这些方法可有效提升同步效率,保证系统的稳定性和性能。
91 4
|
14天前
|
缓存 关系型数据库 MySQL
高并发架构系列:数据库主从同步的 3 种方案
本文详解高并发场景下数据库主从同步的三种解决方案:数据主从同步、数据库半同步复制、数据库中间件同步和缓存记录写key同步,旨在帮助解决数据一致性问题。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
高并发架构系列:数据库主从同步的 3 种方案
|
23天前
|
算法 大数据 数据库
云计算与大数据平台的数据库迁移与同步
本文详细介绍了云计算与大数据平台的数据库迁移与同步的核心概念、算法原理、具体操作步骤、数学模型公式、代码实例及未来发展趋势与挑战。涵盖全量与增量迁移、一致性与异步复制等内容,旨在帮助读者全面了解并应对相关技术挑战。
33 3
|
1月前
|
关系型数据库 MySQL Java
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
这篇文章是关于如何使用Django框架配置MySQL数据库,创建模型实例,并自动或手动创建数据库表,以及对这些表进行操作的详细教程。
61 0
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
|
2月前
|
NoSQL 安全 容灾
阿里云DTS踩坑经验分享系列|Redis迁移、同步
阿里云数据传输服务DTS在帮助用户迁移Redis数据、同步数据时,在某些复杂场景下会出现报错,或者源库与目标库数据不一致的问题,给用户带来困扰。本文介绍了DTS Redis到Redis迁移、同步过程中的典型问题,以帮助用户更好地使用DTS。
199 2
|
3月前
|
C# 开发者 Windows
全面指南:WPF无障碍设计从入门到精通——让每一个用户都能无障碍地享受你的应用,从自动化属性到焦点导航的最佳实践
【8月更文挑战第31天】为了确保Windows Presentation Foundation (WPF) 应用程序对所有用户都具备无障碍性,开发者需关注无障碍设计原则。这不仅是法律要求,更是社会责任,旨在让技术更人性化,惠及包括视障、听障及行动受限等用户群体。
81 0
|
3月前
|
SQL DataWorks 关系型数据库
DataWorks操作报错合集之如何处理在DI节点同步到OceanBase数据库时,出现SQLException: Not supported feature or function
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
4月前
|
消息中间件 关系型数据库 数据库
实时计算 Flink版操作报错合集之在使用RDS数据库作为源端,遇到只能同步21个任务,是什么导致的
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
4月前
|
消息中间件 关系型数据库 MySQL
实时计算 Flink版产品使用问题之从MySQL数据库中捕获变更数据并进行实时处理如何按天分表同步CDC数据
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。