本文介绍如何使用乱码数据检测工具,对AnalyticDB MySQL版集群中可能存在的乱码数据进行洞察检测。

工具介绍

乱码数据检测工具通过解析数据库备份集中的Redo Log,能够检测出所有由REPLACE、INSERT或UPDATE语句导致变更的数据。检测结果以文本文件(文件中将包含被存在乱码数据的库名、表名以及列相关的信息)的形式呈现。

注意事项

  • 仅当您的AnalyticDB MySQL版集群中存在未删除或未修复的乱码数据时,才需要使用该工具进行检测。
  • 使用乱码数据检测工具需要您进行授权,授权协议请参见乱码数据检测授权协议
  • 使用检测工具进行数据检测过程中,不会影响数据库的读写操作,也不会影响线上业务。

检测乱码数据

  1. 使用阿里云账号登录云原生数据仓库AnalyticDB MySQL控制台
  2. 在页面左上角,选择集群所在地域。
  3. 在左侧导航栏,单击集群列表
  4. 3.0集群列表页签下,单击目标集群ID
  5. 在左侧导航栏中,单击乱码数据检测工具
  6. 功能授权页面,阅读并在右下角选中授权协议书,单击下一步
  7. 启动检测乱码数据页面,单击启动检测乱码数据
  8. 在弹出的对话框中单击确认

    检测开始后,您可以在检测结果页面查看检测状态,其中:

    • 检测中

      表示检测正在进行。检测时间受备份集中日志数量的影响,可能持续几分钟或者几小时。检测期间,您无需停留在该页面,可以正常进行数据库读写操作或控制台上的其它操作。

    • 检测成功
      检测成功后,系统会生成一个名为result.txt的结果文件。您可以在检测结果页看到结果文件的访问地址。更多关于结果文件的详情,请参见修复乱码数据4
      注意
      • 获取的结果文件访问地址有效期为1小时,请在有效期结束前完成下载。若访问地址已过期,您可以刷新该页面来获取最新地址。
      • 文件访问地址中包含访问密钥等敏感信息,请谨慎分享文件访问地址。
    • 检测失败

      若检测失败,您可以单击重新检测,并在弹出的对话框中单击确认重新进行检测。

      说明 若重新检测后仍然提示失败,请提交工单联系技术支持进行检测。

修复乱码数据

  1. 获取结果文件

    检测成功后,检测结果页会提供结果文件的访问地址。您可以直接单击该地址进行下载,也可以复制访问地址后使用OSS工具进行下载。使用OSS工具进行下载的方法,请参见OSS常用工具汇总

    注意
    • 获取的结果文件访问地址有效期为1小时,请在有效期结束前完成下载。若访问地址已过期,您可以刷新该页面来获取最新地址。
    • 文件访问地址中包含访问密钥等敏感信息,请谨慎分享文件访问地址。
  2. 查看结果文件
    下载并解压结果文件后,您会得到一个名为result.txt的结果文件,根据检测结果文件中展示如下信息:
    • 未检测到任何乱码数据,表示当前AnalyticDB MySQL版集群中不存在乱码数据。您无需进行后续步骤来修复数据。
    • 以JSON数据格式展示存在乱码数据的数据库名、表名,以及存在或可能存在乱码数据的列信息。示例如下:
      {"{"schema_name":"db1","table_name":"tname1","need_confirm":"true/false","column":[{"column_name":"col1","column_type":"varchar/binary","is_drop":"true/false","is_primary":"true/false"},{"column_name":"col2","column_type":"varchar/binary","is_drop":"true/false","is_primary":"true/false"}]}":"false"}]}
      表 1. 字段说明
      字段 说明
      schema_name 存在或可能存在乱码数据的数据库名,例如db1
      table_name 存在或可能存在乱码数据的表名,例如infotable
      need_confirm 是否需要对目标表进行二次检测,来确认是否存在乱码数据。取值如下:
      • true:目标表中可能存在乱码数据,需要进行二次检测进行确认。
        您可以通过如下语句进行二次检测:1
        说明 执行上述语句进行二次检测时可能会引发全表扫描,建议在业务低峰期执行检测。
      • false:目标表中一定存在乱码数据,无需进行二次检测,您可以直接根据结果文件对乱码数据进行修复。
      column 若干存在或可能存在乱码数据的列信息,包括:
      • column_name:目标列的列名,例如comment
      • column_type:目标列的列数据类型,取值为varcharbinary
      • is_drop:备份集中目标列现在是否已被删除,取值为true(即目标列已被删除)或false(即目标列未被删除)。
      • is_primary:目标列是否为主键列,取值为true(即目标列为主键列)或false(即目标列为非主键列)。
  3. 根据结果文件对乱码数据进行修复
    若检测结果文件中展示了包含乱码数据的详细信息,您就可以根据结果文件中的信息进行数据修复。例如,结果文件中包含如下信息:
    {"schema_name":"db1","table_name":"infotable","column":[{"column_name":"comment","column_type":"varchar","is_drop":"false","is_primary":"false"},{"column_name":"msg","column_type":"varchar","is_drop":"false","is_primary":"false"}]}
    那么您可以使用如下语句中的任意一种先删除存在乱码的数据:
    • 直接删除列中存在乱码的行
      语句示例如下:2
    • 删除存在乱码数据表中在指定时间段内更新的全部数据
      例如,您可以删除目标表中在2021-07-15 13:30:002021-07-15 14:00:00间更新的所有数据,而无需考虑有多少列存在乱码数据,语句示例如下:3

      数据删除成功后,您可以重新写入对应的数据完成乱码数据的修复。

      语句示例如下:5

常见问题

Q:文件太大,下载失败怎么办?

A:如果结果文件较大导致下载失败,您可以使用OSS工具进行下载。使用OSS工具进行下载的方法,请参见OSS常用工具汇总

附录

您可以从SQL DEMO.zip中下载查看本文所用的SQL语句示例。