
# 灾备阶段失败报错，关键词"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';
     ```
     ![](https://support.huaweicloud.com/trouble-drs/figure/zh-cn_image_0000001676214813.png "点击放大")
     
  
  2. 根据[1]中获得的TABLE_ID，执行以下SQL查询该无主键表的列信息。
     ```
     select * from information_schema.INNODB_SYS_COLUMNS where TABLE_ID = 44;
     ```
     ![](https://support.huaweicloud.com/trouble-drs/figure/zh-cn_image_0000001627215162.png "点击放大")
     
  
  3. 根据查询结果，可以看出pos为2的第三列是隐藏自增主键列。如果binlog中隐藏主键列不在最后一列，会导致DRS任务同步失败。
  
  4. 登录RDS控制台，参考[升级内核小版本](https://support.huaweicloud.com/usermanual-rds-mysql/rds_05_0003.html)或联系RDS客服，升级RDS任务版本。
  
  5. 重新创建DRS任务完成灾备。
   
 
