跳转至

MY 001062ER DUP ENTRY

错误描述

[ERROR] [MY-010584] [Repl] Slave SQL for channel '': Worker 1 failed executing transaction 'ANONYMOUS' at master log mysql-bin.000021, end_log_pos 532718034; Could not execute Write_rows event on table bigai.kbb__bill; Duplicate entry '9e8eda45-78bb-4905-b3fa-5179f9467659' for key 'kbb__bill.PRIMARY', Error_code: 1062; handler error HA_ERR_FOUND_DUPP_KEY; the event's master log FIRST, end_log_pos 532718034, Error_code: MY-001062

[ERROR] [MY-010586] [Repl] Error running query, slave SQL thread aborted. Fix the problem, and restart the slave SQL thread with "SLAVE START". We stopped at log 'mysql-bin.000021' position 532716780

MySQL错误1062(23000)是指在插入或更新数据时,违反了唯一性约束条件,即试图插入或更新的数据已经存在于表中

要解决此问题,需要检查表结构和数据,确保没有重复的值,并且唯一性约束条件得到了正确的应用

检查唯一性约束

在 SQL 中,可以使用以下语句来检查唯一性约束:

SELECT COUNT(*) FROM table_name WHERE column_name = 'value';

其中,table_name是你要查询的表名,column_name是你要检查唯一性的列名,value是你要检查的值。

如果返回的结果为1,则表示该值在该列中是唯一的,否则不是。你也可以在创建表时定义唯一性约束,在插入数据时如果违反唯一性约束将会抛出异常

以上述问题为例

SELECT COUNT(*) FROM kbb__bill WHERE id = '9e8eda45-78bb-4905-b3fa-5179f9467659';

修复主从

如果这个问题是在主从复制环境下出现的,可以尝试重新启动从服务器的SQL线程。在MySQL中,你可以使用以下命令来重新启动从服务器的SQL线程:

START SLAVE;

这将重新启动从服务器的SQL线程,并继续从主服务器同步数据

查看同步状态

SHOW SLAVE STATUS\G

跳过指定数量的事务

mysql>slave stop;
mysql>SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1        #跳过一个事务
mysql>slave start

或者修改 mysql 的配置文件;通过slave_skip_errors参数来跳所有错误或指定类型的错误

# 注意:在[mysqld]下面加入以下内容
# slave-skip-errors=1062,1053,1146 # 跳过指定 error no 类型的错误
slave-skip-errors=all #跳过所有错误