tencent cloud

数据传输服务

动态与公告
产品动态
公告
产品简介
产品概述
数据迁移功能描述
数据同步功能描述
数据订阅(Kafka 版)功能描述
产品优势
支持的地域
规格说明
购买指南
计费概述
变更配置说明
欠费说明
退费说明
快速入门
数据迁移操作指导
数据同步操作指导
数据订阅操作指导(Kafka 版)
准备工作
业务评估
网络准备
添加 DTS IP 地址至对接数据库白名单
DTS 服务权限准备
数据库及权限准备
配置自建 MySQL 系的 Binlog
数据迁移
数据迁移支持的数据库
云数据库跨账号实例间迁移
迁移至 MySQL 系列
迁移至 PostgreSQL
迁移至 MongoDB
迁移至 SQL Server
迁移至腾讯云分布式缓存数据库
任务管理
数据同步
数据同步支持的数据库
云数据库跨账号实例间同步
同步至 MySQL 系列
同步至 PostgreSQL
同步至 MongoDB
同步至 Kafka
任务管理
数据订阅(Kafka 版)
数据订阅支持的数据库
MySQL 系列数据订阅
TDSQL PostgreSQL 数据订阅
MongoDB 数据订阅
任务管理
消费管理
前置校验不通过处理方法
检查项汇总
割接说明
监控与告警
支持的监控指标
告警通知功能
通过控制台配置指标告警和事件告警
通过 API 配置指标告警和事件告警
运维管理
配置系统维护时间
任务状态扭转说明
实践教程
本地数据库同步上云
构建双向同步数据结构
构建多对一同步数据结构
构建多活数据中心
数据同步冲突策略如何选择
使用 CLB 代理将其他账号下的数据库迁移至本账号下
通过云联网方式迁移自建数据库至腾讯云数据库
DTS 性能调优最佳实践
常见问题
数据迁移
数据同步
数据订阅 Kafka 版常见问题
数据订阅正则表达式
错误处理
常见错误处理
连通性测试不通过
校验项结果不通过或者出现警告
云联网接入配置源数据时无法选择子网
迁移慢或者进度卡住
数据同步有延时
数据订阅延迟过高
数据消费异常
API 文档
History
Introduction
API Category
Making API Requests
(NewDTS) Data Migration APIs
Data Sync APIs
Data Consistency Check APIs
(NewDTS) Data Subscription APIs
Data Types
Error Codes
DTS API 2018-03-30
相关协议
服务等级协议

创建数据一致性校验

PDF
聚焦模式
字号
最后更新时间: 2023-03-02 11:40:31

操作场景

数据一致性校验,即 DTS 对数据同步的源库和目标库的表数据进行对比,并给出对比结果和不一致详情,方便用户快速对不一致数据进行处理。数据一致性校验任务是独立进行的,不会影响源数据库的正常业务,也不会影响 DTS 的任务。
说明
当前支持数据一致性校验的同步链路如下:
MySQL/MariaDB/Percona/TDSQL-C MySQL > MySQL
MySQL/MariaDB/Percona > MariaDB
MySQL/MariaDB/TDSQL-C MySQL > TDSQL-C MySQL

注意事项

数据一致性校验的范围,仅对比源数据库选择的库表对象、和同步到目标数据库的库表对象,如果用户在同步任务过程中向目标库进行数据写入,则这部分数据不包含在校验范围内,也不包括其他高级对象(如存储过程、函数)、视图等。
数据一致性校验任务可能会增加源数据库实例的负载,因此请在业务低峰期进行操作。
数据一致性校验的任务可以重复执行,但一个 DTS 实例在同一时刻只能发起一个数据一致性校验任务。
需要校验的表必须具有主键或唯一键,否则 DTS 将跳过,不进行校验。
如果在数据一致性校验任务还未结束时,用户选择结束同步任务,则数据一致性校验任务会失败。
因为一致性校验需要在源数据库中创建新库 __tencentdb__,并在该库下写入 CheckSum 表,所以源数据库为只读时将会跳过一致性校验。

约束限制

当前校验任务对 DDL 操作不感知,如果在同步过程中,用户对源库做了 DDL 操作,会出现校验结果不一致,需要用户重新发起校验任务才能得到准确的对比结果。
仅支持单向同步、双向同步的数据校验;不支持多到一、一到多、环形、星形同步等复杂拓扑结构的数据校验。
同步任务配置中如果勾选了部分 DML、DDL,或者进行 Where 条件过滤,会造成源与目标库的数据不一致,所以不支持一致性校验,需要勾选全部的 DML、DDL 才可以进行一致性校验。
同步任务进行如下配置,可能导致数据校验的结果不一致,请在创建校验任务时知晓。
数据初始化类型未勾选“全量数据初始化”,未勾选则可能存在源和目标的数据不一致,并最终导致数据校验的结果不一致。
主键冲突勾选了“冲突忽略”,勾选后发生冲突后可能会导致源和目标的数据不一致,并最终导致数据校验的结果不一致。
在同步一致性校验功能发布之前(2023年1月12日之前)已经存在的存量任务,因 DTS 版本过低,暂不支持直接创建校验任务,需要提交工单先升级版本后才能创建。

实现原理

DTS 对 MySQL 系数据库的一致性校验是基于 row 模式(binlog_format=row),row 模式可以实现 master 和 slave 的正确复制,保障数据的安全性。
1. 在源库创建校验库__tencentdb__.Checksums,用于存储同步任务过程中的数据对比信息。
2. 选择待校验表的非空唯一键作为校验固定字段。
3. 计算源数据库的校验值 crc1 和行数 count1,并写入到源库的__tencentdb__.Checksums中。
crc 的计算方法类似于分块校验,根据校验固定字段,选取一个固定的范围(例如选取A表中,主键从1-1000的数据),将这些数据按行拼接起来计算出一个 crc,这样每个分块数据得到一个 crc,同时计算源库总的数据得到 crc1。
4. DTS 解析 binlog 中的 row 模式数据,还原出在源库写入校验值的 SQL,然后将这个 SQL 在目标库上重放。
目标库上使用与源库相同的变量计算校验值和行数,得到目标库的 crc2 和 count2。
5. 对比源和目标库的校验值和行数,显示对比结果。

创建数据一致性校验

1. 登录 DTS 控制台
2. 数据同步页面,选择需要校验的同步任务,选择 操作 > 更多,然后单击创建数据一致性校验
3. 单击创建数据一致性校验
说明
一致性校验需要在“目标与源库数据差距”小于100MB时,才可以创建。如果界面按钮呈灰色,则同步任务状态不满足条件,如任务配置中勾选了部分 DML 或DDL、设置了 Where 条件过滤、任务失败、源和目标的数据差距大于100MB、同步拓扑结构为复杂拓扑等。
4. 在弹出的对话框中,单击确定
5. 配置数据一致性校验参数后,单击创建并启动一致性校验
参数
说明
校验对象
全部同步对象:校验范围为同步任务勾选的全部对象。
自定义选择:在勾选的同步对象中,选择进行校验的对象。
对比类型
完整对比:对所选检验对象的完整数据进行校验。
抽样对比:对所选检验对象抽选一定的比例进行校验,抽样比例支持10%,20%,30%……90%。
行数对比:对所选校验对象,仅对比数据行数。
线程数选择
设置范围为1~5,请根据实际情况选择,提高线程数可加快一致性校验速度,但也会对源和目标库造成负载。

查看数据一致性校验结果

1. 数据同步页面,选择需要查看的同步任务,选择 操作 > 更多,然后单击创建数据一致性校验
2. 在操作列单击查看,即可查看校验结果。
校验一致的结果示例:
可以查看预估表总数、已检查表数量、不一致表数量、不一致分块数。其中预估表总数,为预计校验的表总数的估算值,与最终实际校验表总数会有少许差异,因为准确提供预计校验表总数会影响整体校验性能。
未检查表原因为:无主键或者非空唯一键、空表、不支持的引擎类型、表不存在。
针对不一致性的结果,需要用户手动对比源数据库和目标数据库的对应内容。请按照界面提示的数据库数据表索引名称索引上边界索引下边界这些参数定位到具体位置进行对比。
参考操作如下:
1. 登录源数据库,查询提示的索引范围。
select * from table_name where col_index >=1 and <=5;
2. 登录目标数据库,查询提示的索引范围。
3. 对比目标和源的数据差距。


帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈