tencent cloud

文档反馈

创建数据一致性校验

最后更新时间: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. 对比目标和源的数据差距。
    
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持