首页/数据/数据库速查/SQL 线程报 1062(主键/唯一键冲突)
主从复制与高可用53 条

SQL 线程报 1062(主键/唯一键冲突)

重放时插入撞唯一键:多因从库被写入、双向复制冲突或人工拼接数据;处理先定位冲突行判断保留哪份,再决定跳过或用重复键策略重放。

数据库速查数据更新于 2026-10-13

复制报 1062 是什么

从库重放主库日志时插入记录撞上已有主键或唯一键,复制线程停止并报错 1062(重复条目)。常见原因是有人直接写从库、双向复制产生冲突,或人工拼接数据留下重复记录。处理原则是先判断该保留哪一份数据,跳过事务只是最后手段。

基本信息

错误码1062,Duplicate entry,主键或唯一键冲突
查看位置SHOW REPLICA STATUS 里的最后错误字段
线程影响复制处理线程停止,拉取线程仍在运行
前置动作先停止处理线程,避免错误持续累积
恢复方式修正数据后重启线程,或在事务模式下跳过该事务

典型使用场景

  • 从库被误写:运维直接在从库执行了插入,主库重放时撞键
  • 双向或多源复制冲突:两个写入源同时插入同一业务键
  • 数据导入留下重复:人工修复数据后与主库变更产生冲突
  • 分库合并:多库合并到同一套表时出现重复主键
  • 演练与测试:在测试环境复现冲突并验证跳过流程是否安全

定位与处理

定位与处理
-- 看具体冲突的键与语句
SHOW REPLICA STATUS\G
-- 查冲突数据,判断保留哪一份
SELECT * FROM appdb.users WHERE id = 12345;
-- 先停处理线程,避免错误持续累积
STOP REPLICA SQL_THREAD;
-- 修正数据后重启
START REPLICA SQL_THREAD;
-- 确实需要跳过该事务(GTID 环境):
SET GTID_NEXT = '3a7f1e3b-1111-1111-1111-111111111111:4711';
BEGIN; COMMIT;
SET GTID_NEXT = 'AUTOMATIC';
START REPLICA SQL_THREAD;

处理方式对照

方式适用代价
修正从库数据后重试能判断主库版本正确改动小,推荐优先
跳过该事务冲突数据来自误写且影响可评估从库永久缺少这次变更
重建从库冲突反复出现或数据已漂移耗时较长但结果干净
改造为幂等写入业务侧可控制需发版,长期收益最大
冲突反复出现说明拓扑中存在第二个写入点:先把写入源找出来并关掉,比反复跳过有效得多。
每次跳过都会让从库永久少一次变更,若后续需要以从库为准做切换,会暴露数据缺失。

易错点

  • 无脑跳过事务:冲突行永久不同步,直到做数据校验才发现数据洞
  • 从库只读配置被改回:写入漂移的常见开端,冲突随后反复出现
  • 不记录跳过的事务编号:事后无法盘点缺失范围
  • 处理完不校验数据一致性:表面复制恢复,实际两张表已经对不上

数据来源与参考

  • MySQL 8.0 Reference Manual: Error 1062
  • MySQL 8.0 Reference Manual: GTID_NEXT

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌