功能概述
数据同步功能指两个数据源之间的数据实时同步,可应用于云上云下多活、异地多活、跨境数据同步,及实时数据仓库等业务场景。
数据同步不同于数据迁移,数据迁移是以整体数据库搬迁为目的,它属于一次性的短期任务,迁移完成后用户一般需要进行手动割接操作,将业务对接到新的数据库上,而数据同步属于持续性任务,任务创建后会一直同步数据(几乎实时同步),保持源库和目标库的数据一致性。
腾讯云 DTS 支持将自建数据库、云数据库、第三方云厂商数据库等同步到腾讯云数据库。
云上云下同步:如将本地 IDC 自建数据库同步到腾讯云数据库实例,并且支持建立反向同步,实现云上云下双向同步。
多云厂商间同步:将第三方云厂商数据库同步到腾讯云数据库实例,实现双云同步。
腾讯云数据库实例间同步:如异地多活,跨境数据库同步,不同腾讯云账号下的数据库实例同步等。
实现原理
如下以 MySQL 同步为例进行介绍。整体流程为,数据从源实例中导出并导入到目标实例中,关键步骤包括结构初始化、全量数据初始化及增量数据处理。
结构初始化
结构初始化即在目标实例中创建与源实例相同的库表结构信息。同步任务配置时,用户可以选择是否同步库表结构,如果目标实例中已经创建了与源实例相同的结构信息,则不需要同步库表结构信息,只需要同步数据即可,否则需要同步库表结构信息。
全量数据初始化
结构初始化完成后,DTS 会进行存量数据初始化,即将源实例中的全部存量数据导出并导入到目标实例中。
增量数据处理
增量数据处理通过源实例 Binlog 持续获取增量数据,进行一系列过滤转换操作后,将增量数据持久化到中间存储。在全量数据导入完成后,开始在目标实例上持续回放中间存储上的增量变更数据,从而实现目标实例与源实例数据保持一致。 数据冲突处理
DTS 同步任务中,源库和目标库的数据可能存在冲突,DTS 支持进行同名表冲突和主键冲突检测。
同名表冲突
目标库与源库存在同名表时,支持选择任务报错提醒用户(前置校验并报错),或者将源库的数据追加到目标库的同名表中(忽略并继续执行)。
主键冲突
冲突报错:同步任务中,源库插入(INSERT)主键数据与目标库存在冲突时,任务报错并暂停,需要用户手动处理后才能继续。
冲突忽略:同步任务中检测到源库的主键插入(INSERT)数据与目标库发生冲突时,忽略源库的主键插入数据,以目标库的内容为准。
冲突覆盖:同步任务中检测到源库的主键更新(INSERT 和 UPDATE)数据与目标库发生冲突时,用源库的主键数据覆盖目标的主键数据。
支持的拓扑结构
同步服务的基本单元为单向同步,配置时可以选择对 DDL(Data Definition Language)、DML(Data Manipulation Language)进行同步。通过对单向同步进行组合,可以定制各种复杂的拓扑。
在复杂拓扑中,对于 DML 操作,我们会通过技术手段来避免数据循环的发生。而对于 DDL,数据同步服务会在配置时进行循环检测,避免形成 DDL 循环。
双向同步
级联双向同步
典型应用场景
通过腾讯云数据同步服务在多地域间的 MySQL 数据库实例间建立数据同步,可实现异地多活。其中各个地域的数据库实例可以运行在云上,也可以运行在企业自建数据中心。
约束限制
通过对单向同步的组合,从而实现的双向同步,存在以下限制:
数据一致性的保持需要用户业务配合,不要在两个节点上对同一个主键数据进行更新,避免主键冲突或相互覆盖。例如 A 节点更新1,3,5的主键数据,B 节点更新2,4,6的主键数据。
如果发生数据同步冲突,DTS 会严格按照用户选择的冲突策略对数据进行处理,请在配置时确认对应的冲突处理符合业务预期。
DML 语句支持双向同步,DDL 语句只支持单向同步。构建双向同步,请确保其中一个单向实例禁止 DDL 同步。
支持的数据库类型
支持的高级功能
|
| 支持复杂的同步拓扑结构,双向同步、环形同步、多对一同步等。 | |
| | |
| 目标库版本大于等于源库即可,如5.5.x版本支持同步到5.5.x、5.6.x及更高版本,最后一位属于小版本,小版本不限制。 | |
| | |
| 支持如下三种主键冲突处理策略: 冲突报错:在同步时发现表主键冲突,报错并暂停数据同步任务。 冲突忽略:在同步时发现表主键冲突,保留目标库主键记录。 冲突覆盖:在同步时发现表主键冲突,用源库主键记录覆盖目标库主键记录。 | |
| 支持选择同步数据类型,包括 Insert、Update、Delete。 支持选择具体的 DDL 操作,如 CREATE TABLE、CREATE VIEW、 DROP INDEX 等。 | |
| | |
| 支持同步视图、存储过程、函数。 | |
| | |
| 支持对数据同步的各项指标进行监控。 支持对数据同步事件的监控进行默认配置,事件异常时自动通知用户。 | |
| 同步增量过程中,支持源实例和目标实例重启或者升级。 | |
| 开启 GTID 的前提下,支持源实例 HA 切换。 支持目标实例 HA 切换。 | |
本页内容是否解决了您的问题?