Login
网站首页 > 文章中心 > 其它

MySQL 5.6主从报错的实战记录

作者:小编 更新时间:2023-08-25 10:17:08 浏览量:272人看过

问题描述


Error 'Duplicate entry '12345' for key 'PRIMARY'' on query...

问题分析

这个错误提示的含义是,由于从库上已经存在一条与主库上相同的记录,从而导致主从同步失败.查看数据库表的结构和数据,发现从库上的表确实存在主键相同的记录.这可能是由于以下原因导致的:

从库上手动改写了记录,并将主键改为了与主库相同的值.

从库上的同步线程发生了错误,导致主键冲突.

我们需要进一步分析错误日志,查找导致主从同步失败的具体原因.

解决方案

首先需要通过 show slave status\G 命令查看从库的同步状态,确认同步是否正常.

(...)
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
(...)

如果以上两个状态都为 Yes,则表示从库同步正常,在解决主从同步问题时需要考虑其他方面的问题.

如果同步状态正常,需要进一步查看错误日志,找到导致主从同步失败的具体 SQL 语句.

在从库上运行 show slave status\G 命令,查看 Last_Error 项的内容.

(...)
Last_Errno: 1062
Last_Error: Error 'Duplicate entry '12345' for key 'PRIMARY'' on query...
(...)

可以看到,报错信息中包含了具体的 SQL 语句.根据这个 SQL 语句,可以确认是从库上手动修改记录导致的冲突.

解决主从同步问题的方法是,删除从库上的重复记录.在删除记录前,需要先停止同步线程,否则删除操作可能会在主库和从库上都执行,导致再次出现冲突.

停止同步线程的命令为:

stop slave;

然后,可以通过以下命令,在从库上删除重复记录:

delete from 表名 where 主键=12345;

删除完成后,重新启动同步线程:

start slave;

等待一段时间后,可以通过 show slave status\G 命令查看同步状态,确认同步是否恢复正常.

示例说明

示例一

在从库上手动改写了记录,并将主键改为了与主库相同的值.在这种情况下,可以通过删除从库上的冲突记录解决主从同步问题.

stop slave;
delete from user where id=12345;
start slave;

示例二

从库上的同步线程发生了错误,导致主键冲突.在这种情况下,需要查找导致同步失败的具体原因,并解决问题.

例如,从库上的 Last_Error 项中包含的错误信息如下:

Last_Errno: 1213
Last_Error: Error 'Deadlock found when trying to get lock; try restarting transaction' on query...

这说明同步线程在执行 SQL 语句时发生了死锁,需要进一步分析原因并解决问题.可以通过查看 Last_SQL_Error 和 Last_IO_Error 项的内容,进一步定位问题并解决.

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章