操作场景
数据一致性校验,即 DTS 对数据同步的源库和目标库的表数据进行对比,并给出对比结果和不一致详情,辅助用户快速对同步结果进行验证。数据一致性校验任务是独立进行的,不会影响源数据库的正常业务,也不会影响 DTS 的任务。
说明:
一致性校验仅作为辅助的数据验证手段。因此还需要用户自行进行数据验证,以确保同步结果满足要求。
独立校验和内置校验区别
一致性校验分为独立校验和内置校验两种校验方式,用户可以根据实际诉求选择。
对比项 | 内置校验 | 独立校验 |
定义 | 校验服务内置于 DTS 任务中,需要在任务运行中时发起一致性校验,DTS 任务结束后,不支持发起校验。 | 校验服务独立于 DTS 任务外,选择源端和目标端相同的数据块进行对比。DTS 任务结束后,不支持发起校验。 |
对比范围 | 仅对比 DTS 任务勾选的同步对象,源库中未勾选的同步对象不在校验范围内。 仅对比由 DTS 写入到目标端的数据,用户自己在目标端写入的数据不在校验范围内。 | 可对比 DTS 任务中未勾选的其他同步对象。 可对比用户自行在目标端写入的数据。 |
校验过程中要求 | 源端可以有 DML 数据写入,不能有 DDL 数据写入,否则校验可能不准确。 | 建议在静态数据状态下发起校验,即源端和目标端都无数据写入,否则校验结果不准确。 |
适用场景
当前支持数据一致性校验的同步链路如下:
MySQL/MariaDB/Percona/TDSQL-C MySQL/TDSQL MySQL > MySQL
MySQL/MariaDB/Percona/TDSQL-C MySQL/TDSQL MySQL > MariaDB
MySQL/MariaDB/Percona/TDSQL-C MySQL > TDSQL-C MySQL
MySQL/MariaDB/Percona/TDSQL-C MySQL/TDSQL MySQL > TDSQL MySQL
MySQL/MariaDB/Percona/TDSQL-C MySQL/TDSQL MySQL > TDSQL TDStore
注意事项及约束
1. 数据一致性校验任务可能会增加源数据库实例的负载,因此请在业务低峰期进行操作。
2. 对比校验约束:
完整校验、抽样校验:对于无主键/无唯一键的表,行数小于5万行时支持校验,大于5万行的表会跳过校验。
行数校验:不要求有主键或者唯一键。
3. 当前校验任务对 DDL 操作不感知,如果在同步过程中,用户对源库做了 DDL 操作,会出现校验结果不一致,需要用户重新发起校验任务才能得到准确的对比结果。
4. 一致性校验任务中,DTS 单次查询源或者目标端数据的超时限制为10min,单次查询指每个分块校验会查询一次,行校验会查询一次等。如果单次查询时间超出10min(例如源端查询的表为大表时),则会导致校验任务失败。
5. 仅支持单向同步、双向同步的数据校验;不支持多到一、一到多、环形、星形同步等复杂拓扑结构的数据校验。
6. 同步任务配置中如果勾选了部分 DML、DDL,或者进行 Where 条件过滤,会造成源与目标库的数据不一致,一致性校验时不支持内置校验。
7. 同步任务进行如下配置,可能导致数据校验的结果不一致,请在创建校验任务时知晓。
数据初始化类型未勾选“全量数据初始化”,则可能存在源和目标的数据不一致,并最终导致数据校验的结果不一致。
主键冲突勾选了“冲突忽略”,勾选后发生冲突后可能会导致源和目标的数据不一致,并最终导致数据校验的结果不一致。
8. 在同步一致性校验功能发布之前(MySQL/MariaDB/TDSQL-C MySQL 为2023年1月12日,TDSQL MySQL 到 TDSQL MySQL 为2023年7月30日,MySQL/MariaDB/Percona 与 TDSQL MySQL 相互之间的链路为2023年10月20日)已经存在的存量任务,因 DTS 版本过低,暂不支持直接创建校验任务,需要 提交工单 先升级版本后才能创建。
9. TDSQL MySQL 相关的链路进行数据一致性校验时,还需注意以下内容:
9.1 源端或者目标端为分布式 TDSQL MySQL 时,请在业务低峰进行数据一致性校验,否则可能会出现校验结果不一致。
9.2 不支持校验有虚拟列的表,如果遇到该类表,校验任务可能会报错。
10. 内置校验注意事项。
10.1 内置校验的范围,仅对比源数据库选择的库表对象、和同步到目标数据库的库表对象。如果用户在同步任务过程中向目标库进行数据写入,则这部分数据不包含在校验范围内,也不包括其他高级对象(如存储过程、函数)、视图等。如果同步任务配置中未选择“结构初始化”(表示不同步表结构),则进行一致性校验时也不校验表结构。
10.2 内置校验需要在同步任务运行中发起,如果在内置校验任务还未结束时,用户选择结束同步任务,则内置校验任务会失败。
10.3 因为内置校验需要在源数据库中创建新库
__tencentdb__
,并在该库下写入 CheckSum 表,所以源数据库为只读时将会跳过一致性校验。11. 独立校验约束限制。
如果在数据同步的任务中已经对表进行了列重命名、列过滤、表重命名操作,在后续创建独立校验时,存在如下交互限制。
11.1 同步链路中配置了列重命名和列过滤:在进行独立校验时,校验对象选择“全部对象”,进行过列重命名和列过滤的表可以校验。
11.2 同步链路中配置了列重命名和列过滤:在进行独立校验时,校验对象选择“自定义对象”,校验对象所选列必须为同步对象过滤后列的子集,否则进行过列重命名和列过滤的表将会被跳过校验。
11.3 同步链路中配置了表的重命名:在进行独立校验时,若校验对象选择“自定义对象”,选择校验对象时需要依次勾表对象,不能勾选整库,否则之前进行过重命名的表,会被跳过校验。
实现原理
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. 配置数据一致性校验参数后,单击创建并启动一致性校验。

说明:
若需要在一致性校验时设置 Where 条件过滤,请按照如下步骤进行操作:
1. 对比类型选择独立校验,校验对象选择自定义选择,并在已选校验对象右侧单击
。


2. 在弹出的对话框中按照要求输入过滤条件,单击确定。
校验是否成功页面右侧会弹窗展示。

参数 | 说明 |
对比类型 | 内置校验:校验服务内置于 DTS 任务中,仅对比同步对象数据。 独立校验:校验服务独立于 DTS 任务外,可对比同步对象外的其他数据。 |
校验对象 | 全部同步对象:校验范围为同步任务勾选的全部对象。 自定义选择:在勾选的同步对象中,选择进行校验的对象。 |
对比类型 | 完整校验:对所选检验对象的完整数据进行校验。 抽样校验:对所选检验对象抽选一定的比例进行校验,抽样比例支持10%,20%,30%……90%。 行数校验:对所选校验对象,仅对比数据行数。 |
线程数选择 | 设置范围为1~8,请根据实际情况选择,提高线程数可加快一致性校验速度,但也会增加源和目标库的负载。 |
查看数据一致性校验结果
1. 在数据同步页面,选择需要查看的同步任务,选择操作 > 更多,然后单击创建数据一致性校验。
2. 在操作列单击查看,即可查看校验结果。

3. 查看预估表总数、已检查表数量、不一致表数量、不一致分块数。
预估表总数:预计校验的表总数的估算值,与最终实际校验表总数会有少许差异,因为准确提供预计校验表总数会影响整体校验性能。
未检查表原因:无主键或者非空唯一键、空表、不支持的引擎类型、表不存在。

4. 查看不一致数据详情。
“内置校验”场景,针对不一致性的结果,需要用户手动对比源数据库和目标数据库的对应内容。
请按照界面提示的数据库、数据表、索引名称、索引上边界、索引下边界这些参数定位到具体位置进行对比。
参考操作如下:
1. 登录源数据库,查询提示的索引范围。select * from table_name where col_index >=1 and col_index <=5;2. 登录目标数据库,查询提示的索引范围。3. 对比目标和源的数据差距。
“独立校验”场景
查看不一致数据详情
4.1.1.1 在不一致详情区域单击对应表后的查看,可查看不一致的数据详情。

4.1.1.2 在弹出的对话框中查看不一致详情。

4.1.1.3 在操作列单击订正语句。

查看完整的订正语句。

4.1.1.4 在查看列表上方单击
,下载不一致详情。


可下载不一致信息及订正语句或仅下载订正语句。

下载不一致数据详情
在不一致详情区域单击
,下载对比结果详情。


可下载所有不一致信息及订正语句、仅下载搜索结果及订正语句,或仅下载订正语句。
