更新时间:2025-08-07 GMT+08:00

数据对比(对比迁移项)

对比迁移项可以清晰反馈出源数据库和目标数据库的数据是否存在差异。为了尽可能减少业务的影响和业务中断时间,数据库实时迁移场景提供了完整的迁移对比流程,帮助您确定合适的业务割接时机。

对比使用场景

迁移对比功能支持以下几种对比方式:

  • 对象级对比:支持对数据库、索引、表、视图、存储过程和函数、表的排序规则等对象进行对比,建议在全量迁移完成后进行对比。
  • 数据级对比分为行对比和内容对比。
    • 行对比:对比迁移的表的行数是否一致,只查询表的行数,对比速度较快,建议优先使用。
    • 内容对比:对比迁移的表内数据是否一致,需要查询每条数据进行对比,相较于行对比,内容对比较慢。
  • 周期性对比:定时对源数据库与目标数据库表的行数或对象进行对比并展示结果,需要用户开启并设置对比策略

在使用对比功能查看数据一致性时,建议优先使用行数对比,确定行数是否一致。如果出现行数不一致的情况,可以针对不一致的表,使用内容对比,来确定具体有哪些数据不一致。

对比约束限制

  • 对比需要在任务处于增量阶段才能手动创建。
  • 对比是大小写敏感的,如果源数据库或目标数据库一端为非大小写敏感,一端为大小写敏感,对比结果可能出现不一致的情况。
  • 对于单全量,在任务结束的时候,DRS会自动创建对象对比和行对比。对比时如果源库有数据操作,可能会导致对比结果不一致。
  • 如果在对比时源库进行DDL操作,为保证对比结果的准确性,需重新进行内容对比。
  • 如果单独对目标库进行数据修改操作,可能会导致对比结果不一致。
  • 如果源数据库字符类型存在编码异常的情况,通过DRS迁移或对比时会因数据库驱动转码转换为异常码点,最终可能导致内容对比一致,实际字节不一致。
  • 内容对比功能目前只部分支持无主键的表,对于不支持内容对比的表可以使用行数对比功能。所以数据级对比功能需要结合业务场景,选用行数对比或者内容对比。
  • DRS生成的不一致数据查询SQL中,时间类型是基于UTC时间的,如果表中存在时间字段,查询不一致数据前需要先将会话时区设置为0时区。
  • 无主键表内容对比仅支持静态内容对比,不支持动态内容对比。
  • DRS进行内容比对期间不能暂停DRS任务,否则可能导致比对任务失败。
  • 为避免占用资源,DRS限制对比任务的时长,超过限制时长,对比任务自动停止。
    • 对于单全量任务结束时自动创建的对比任务,超时限制时长30分钟,超过后行对比和对象对比任务自动停止,DRS单全量任务结束。
    • 对于增量阶段用户手动创建的行对比任务,当源库是关系型数据库时,行对比限制时长为60分钟;源库为非关系数据库,行对比限制时长为30分钟。
  • 为避免占用资源,DRS任务的对比结果限制保留60天,60天后自动清除。
  • MySQL为源链路,源数据库中的虚拟列不支持内容对比,对比时会过滤虚拟列。
  • 当内容对比过程中表出现表DDL变化时,可能会引起任务失败,此时需要用户重新进行对比,建议对比过程中尽量减少对表的DDL变更。

对数据库影响

  • 对象对比:会查询源库及目标库的系统表,占用10个左右的session的连接数,正常情况不会对数据库产生影响。但是如果对象数量巨大(比如几十万张表),可能会对数据库产生一定的查询压力。
  • 行数对比:会查询源库及目标库的表行数,占用10个左右的session的连接数,正常的select count语句基本不会对数据库产生影响。但是如果表数据量巨大(亿级)会对数据库产生一定的查询压力,返回查询结果会比较慢。
  • 内容对比:会查询源库及目标库的全部数据,涉及每个字段都会对比,所以会对数据库产生一定的查询压力,主要体现在IO上,查询速度受限于源库和目标库的IO和网络带宽。占用1-2个CPU,占用10个左右的session的连接数。

对比耗时预估

  • 对象对比:根据源库查询性能,一般会在几分钟内返回结果,如果对象数据量特别巨大,对比时长可能达到几十分钟。
  • 行数对比:使用select count方式,查询速度跟数据库性能相关。
  • 内容对比:在数据库没有压力并且网络正常的情况下,对比速度大概是5MB/s。

前提条件

  • 已登录数据复制服务控制台。
  • 已启动迁移任务。

创建对比任务

在进行迁移项数据对比时,您可以按照迁移对比须知模块推荐的流程操作,也可以根据业务场景选用对比方式。以下操作将按照迁移对比须知模块的推荐方案详细介绍各功能的使用方法。

  1. 实时迁移管理”界面,选中指定迁移任务,单击任务名称,进入“基本信息”页签。
  2. 单击“迁移对比”页签,进入“迁移对比”信息页面,对源数据库和目标数据库的数据进行对比分析。

    • 创建对象级对比:通过对象对比,先对数据库对象完整性进行检查。

      单击“对象级对比”,进入“对象级对比”页签,查看各个对比项的对比结果。

      如果需要查看对比项的对比结果详情,可单击指定对比项操作列的“详情”。

    • 创建数据级对比(行数、内容对比):数据库对象检查完成后,进行迁移数据行数及内容的对比。
      1. 单击迁移对比须知处的“全面检查”,进入“创建对比任务”页面。
      2. “创建对比任务”页面,分别选择“对比类型”、“对比时间”和“对象选择”后,单击“是”,提交对比任务。
        • 对比类型:分为行数对比和内容对比。
        • 对比时间:可设置为“立即启动”“稍后启动”。由于同步具有轻微的时差,在数据持续操作过程中进行对比任务,可能会出现符合实际情况的少量数据不一致对比结果,推荐结合对比定时功能,选择在业务低峰期进行对比,得到更为具有参考性的对比结果。
        • 流速模式:目前部分对比功能支持流速控制,开启流速控制后,可选择“全天限流”的“流速大小”或“时段限流”的“时间范围”与“流速大小”。
        • 仅对比增量数据:目前部分对比功能支持仅对比增量数据,选择“动态对比”时,部分对比功能支持“仅对比增量数据”,此时对比会忽略全量静态部分的数据,并根据指定的“增量数据起始时间”,对比增量部分的数据。
        • 进行数据过滤:开启后,可根据配置的过滤条件进行对象比对。

          目前实时迁移仅支持MySQL->MySQL设置数据过滤对比。

          选择开启数据过滤后,需要为选择对比的表对象添加过滤条件。

          在过滤条件区域,填写过滤条件后,单击“校验规则”
          • 过滤表达式不支持使用某种数据库引擎特有的package、函数、变量、常量等写法,须使用通用SQL标准。
          • 请直接输入SQL语句中WHERE之后的部分(不包含WHERE和分号,例如:sid > 3 and sname like "G %")。
          • 过滤条件不支持使用隐式转换规则,请填写正确的数据类型条件。例如Oracle的c列是字符类型varchar2,过滤条件应该设置为 c > '10',而不是c > 10。
          • 不支持对LOB字段设置过滤条件,如CLOB、BLOB、BYTEA等大字段类型。
          • 建议不要对非精确类型字段设置过滤条件,如FLOAT、DECIMAL、DOUBLE等。
          • 建议不要对带有特殊字符的字段设置过滤条件。
          • 暂不支持对库名、shema名、表名大小写混用的对象进行过滤比对。
          • 暂不支持单库超过5万张表情况下进行条件过滤。

          校验通过后,单击“生成加工规则”,即可在加工规则表格中看到该规则。

          检查无误后,单击“确定”,创建对比任务。

        • 对象选择:可根据具体的业务场景选择需要进行对比的对象。
      3. 对比任务提交成功后,返回“数据级对比”页签,单击刷新列表,可以查看到所选对比类型的对比结果。

        若需要查看对比类型详情,可单击指定对比类型操作列的“查看对比报表”,然后选择需要进行对比的数据库,单击操作列的“查看详情”,查看指定源数据库和目标数据库的对比结果详情。

        • 支持限速的对比中的对比任务,列表界面支持查看“源库抽取速率”和“增量时延”(仅“动态对比”)信息。

          • 注意:上述统计信息默认每10秒刷新一次。
        • 支持限速的运行中的对比任务,单击“查看报表”支持查看全量对比进度、全量抽取速率、差异待复查行数、以及各个源库和目标库对应表的详细进度信息,同时如果任务包括动态对比,支持查看增量对比时延、增量速率、增量位点、差异待复查行数、每秒对比行数信息。

          • 注意:上述统计信息默认每10秒刷新一次。
        • 运行中的任务可以随时取消,已取消的对比任务也支持查看对比报表。
        • 行对比结果可按照“源库表行数”或“目标库表行数”,对当前页面显示的结果进行升序或者降序排列,方便进行筛选。
        • 行对比差异显示为负数时,代表目标库表行数比源库表行数多;显示为正数时,代表源库表行数比目标库表行数多。
    • 业务割接前,进行割接复查。

      单击“割接复查”,进入创建对比任务页面,单击“创建对比任务”,选择“对比类型”、“对比时间”和“对象选择”,单击“确定”,提交对比任务。

      查看对比详情的方法请参考2.c

    • 结束任务。

      业务系统和数据库切换成功后,为了防止源数据库的操作继续同步到目标数据库,造成数据覆盖问题,此时您可选择结束迁移任务。该操作仅删除了迁移实例,迁移任务仍显示在任务列表中,您可以进行查看或删除。

      一般情况下,结束任务功能可以确保特殊对象迁移的完整性(触发器、事件在结束阶段迁移),罕见情况下(例如网络异常)可能结束任务失败。当遇到多次任务结束失败时,可以勾选“强制结束任务”优先结束任务,以减少等待时间。强制结束任务,极端场景下可能会导致触发器、事件迁移不完整,请手工迁移触发器、事件。

周期性对比

周期性对比是DRS定时对源数据库与目标数据库表的行数或对象进行对比,并展示结果。

  1. “实时迁移管理”界面,选中指定迁移任务,单击任务名称,进入“基本信息”页签。
  2. 单击“迁移对比”页签,进入“迁移对比”信息页面。
  3. 选择“周期性对比”页签,单击“修改对比策略”
  4. 在“修改对比策略”对话框中,开启周期性对比并设置对比频率、时间等策略,单击“是”完成设置。

    • 开启后,DRS会按照设置的定时策略进行行数或对象对比,对比结果需要在对应的数据级对比或对象级对比页签中查看。
    • 关闭周期性对比后,下一次的周期性对比将不会再进行,历史对比结果仍可正常查看。
    • 修改检查设置不会影响当前在进行的周期性对比任务,修改后的设置下次生效。
    • 周期性对比会在源和目标端执行一定的读取操作,请选择无业务期时间点进行对比。
    • 周期性对比自动剔除超大表(行数超过一亿行),该类大表建议采用数据级对比功能进行抽查,不建议作为周期性对比表。

创建快捷对比

为了加快割接过程,简化对比的操作步骤,提升操作效率,DRS提供快捷对比的功能,无需进入具体实例,在迁移管理界面即可进入对比界面。该功能只支持对比所有迁移对象,且只有增量迁移中的任务才可以使用该功能。

  1. 在“实时迁移管理”页面,选择指定的实时迁移任务,单击“操作”列的“数据对比”
  2. “创建对比任务”页面,根据业务需要,选择“立即启动”“稍后启动”后,单击“是”启动对比任务。

查看对比任务

  1. 在“实时迁移管理”页面,选择指定的实时迁移任务,单击“操作”列的“查看对比”
  2. “迁移对比”页签,可查看数据对比结果。

数据修复

当静态内容对比结果中存在不一致数据时,可在对比报表的明细页中选取不一致的表进行数据修复。数据修复结果为可在目标库执行的修复SQL。修复完成后可在对比报表的修复进度明细页查看不一致行的修复SQL生成详情,也可导出和下载针对本次对比所有已生成的不一致SQL,并结合实际情况在目标库手动执行修复SQL。数据修复具有如下约束。

  1. 数据修复功能为受限使用阶段,当前仅支持MYSQL-MYSQL链路。
  2. 对于修复SQL为INSERT或UPDATE语句的场景,修复SQL中将展示不一致行的所有列内容,列值为对应列在源库的当前值。
  3. 历史的比对任务可能由于缺少修复信息而修复失败,需要重新比对后再进行修复。
  4. 每个迁移任务仅保留最新一次数据修复的修复进度明细信息页面。
  5. 单个不一致行的数据大小最大支持4M,超过时对应的修复SQL将生成失败。
  6. DRS生成的修复SQL中,时间类型字段的内容是基于UTC时间的,如果表中存在时间字段,目标库执行修复SQL前需先将会话时区设置为0时区。各数据库类型对应的会话时区设置SQL示例如下表。
  7. 请谨慎执行修复SQL中的DELETE语句。
  8. 数据修复功能无法使用在无主键表的对比结果中。
表1 各数据库类型设置会话时区为0时区的SQL示例

数据库类型

时区设置SQL

MYSQL

SET session time_zone='+00:00';