文档首页> 数据复制服务 DRS> 故障排除> 失败案例> MySQL为源实时灾备> 灾备阶段失败报错,关键词“A dml without pk write target db fail”
更新时间:2024-07-11 GMT+08:00

灾备阶段失败报错,关键词“A dml without pk write target db fail”

场景描述

MySQL为源灾备任务报错,日志界面提示:A dml without pk write target db fail。

可能原因

  • 无主键表由于缺乏行的唯一性标志,在网络不稳定情况下,无主键表数据写入时与源数据库数据不一致。
  • 源端为RDS for MySQL老版本(5-5.7.23),有无主键表隐藏主键的特性,导致DRS任务报错update/delete没有命中。

解决方案

  • 如果是无主键表原因,需要将无主键表修改为主键表,并重新创建DRS任务完成灾备。
  • 如果源端为RDS for MySQL老版本(5-5.7.23),有无主键表隐藏主键的特性,请参考以下步骤处理:
    1. 使用有process权限的账号,在源端执行以下SQL语句查询表信息,其中database/table为无主键表的库名与表名(如果是分区表需要用like查询)。
      select * from information_schema.INNODB_SYS_TABLES  where name = 'database/table'; 

    2. 根据1中获得的TABLE_ID,执行以下SQL查询该无主键表的列信息。
      select * from information_schema.INNODB_SYS_COLUMNS where TABLE_ID = 44;

    3. 根据查询结果,可以看出pos为2的第三列是隐藏自增主键列。如果binlog中隐藏主键列不在最后一列,会导致DRS任务同步失败。
    4. 登录RDS控制台,参考升级内核小版本或联系RDS客服,升级RDS任务版本。
    5. 重新创建DRS任务完成灾备。