更新时间:2024-04-09 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),有无主键表隐藏主键的特性,请参考以下步骤处理:
- 使用有process权限的账号,在源端执行以下SQL语句查询表信息,其中database/table为无主键表的库名与表名(如果是分区表需要用like查询)。
select * from information_schema.INNODB_SYS_TABLES where name = 'database/table';
- 根据1中获得的TABLE_ID,执行以下SQL查询该无主键表的列信息。
select * from information_schema.INNODB_SYS_COLUMNS where TABLE_ID = 44;
- 根据查询结果,可以看出pos为2的第三列是隐藏自增主键列。如果binlog中隐藏主键列不在最后一列,会导致DRS任务同步失败。
- 登录RDS控制台,参考升级内核小版本或联系RDS客服,升级RDS任务版本。
- 重新创建DRS任务完成灾备。
- 使用有process权限的账号,在源端执行以下SQL语句查询表信息,其中database/table为无主键表的库名与表名(如果是分区表需要用like查询)。
父主题: MySQL为源实时灾备