广告
返回顶部
首页 > 资讯 > 数据库 >MySQL案例-奇怪的duplicate primary
  • 699
分享到

MySQL案例-奇怪的duplicate primary

2024-04-02 19:04:59 699人浏览 独家记忆
摘要

-------------------------------------------------------------------------------------------------记录文---

-------------------------------------------------------------------------------------------------记录文---------------------------------------------------------------------------------------------------------------

结论先行: 最终只是解决了这个问题, 没有找到根本的原因, 本文只有针对这个问题的分析和思考;
现象:
在Master-5.0.X与Slave-5.7.17进行同步的时候, slave worker抛出了一个错误, duplicate primary;
错误信息如图:
MySQL案例-奇怪的duplicate primary

分析:
看上去是个很正常的报错, 主键重复, 出现这个这个问题的可能性有不少, 不过这次的问题比较蹊跷,
因为这个slave是用mydumper新做的, 刚开始同步几条数据就报错, 有点奇怪;

看了一眼表的数据, pk=13的记录确实存在, 那么久看看relaylog, 找一下完整的语句;
找到这个语句以后, 发现事情有点不对(ノへ ̄、)
MySQL案例-奇怪的duplicate primary

由于使用了auto_increment作为主键, binlog会在记录这类语句的时候在binlog的statement之前注明主键的具体值;
从binlog的内容来看, 这个语句明显不应该是插入pk=13的记录, 应该是91391才对;

那么如果从Master把这条数据单独导出来, 直接手动导入的话, 跳过这个错误, 也是能解决问题;
看了一眼relaylog, 到导出数据的时候, 都没有再对这条数据进行修改, let's Go~
PS: 因为Master的写入很少, 所以才能这么干, 繁重业务的话, 就跳过这种办法吧...

为了保险起见, 新建了一个测试库, 先试一下这么导数据会不会有问题;
MySQL案例-奇怪的duplicate primary

把数据导进去看看;
MySQL案例-奇怪的duplicate primary

导入没有问题, 而且数据内容也ok, 那么把数据往同步的库里面导入试试.......

MySQL案例-奇怪的duplicate primary

(ノへ ̄、)看样子同步报错并不是意外.....

后来还陆陆续续做过以下尝试:
怀疑表有问题, 毕竟从5.0.X的库导入到5.7.17, 所以尝试了: alter表; Mysql_upgrade; 检查auto_increament的值;
怀疑使用了假的relaylogㄟ( ▔, ▔ )ㄏ : 重新做同步;
语句有问题(╯‵□′)╯︵┻━┻  : 从已经有这条数据的测试库直接用insert...select来插入数据; 
MySQL案例-奇怪的duplicate primary

全部都没有用~

最后才把疑点放到这张表的触发器上;
这个触发器是用来做表字符集转换的, 以前在别的数据库中也用到过,这次报错的信息也不是触发器的内容,按道理来说应该是没啥问题的;
不过除了触发器, 好像真没有什么有可能会出问题的地方了, 试着删了这个触发器之后, 发现一切正常了......

最后的解决方法就只能删了所有的触发器;

思考:
首先遇到这个问题的时候, 去查了relaylog, 第一时间的猜测是binlog的问题或者是表的问题,
因为从报错信息里面可以看出来, sql_thread在重演这一条语句的时候, 认为pk=13, 但是binlog里面记录的明显是91391;
那么就有可能是sql_thread在这一块event的时候, 没有认出来这个insert_id=91391的信息, 直接忽略掉了(虽然binlog都是v4, 但是天知道有什么bug不是..),
用了系统自己的auto_increament计数值(因为Master的写入量很少, 考虑到13这个值也不大, 所以产生这种猜测);
所以检查了表的auto_increament值, 也尝试了mysql_upgrade和alter重建表, 但是都没用;

之后发现binlog是statement, 这个语句并没有把所有列的值进行显式的赋值, 而且和后面的另外一条语句组成了一个事务,
如果把完整的信息都列出来, 或者把这个语句拆出来做成一个单独的事务, 是不是就没问题了?
所以之后单独把那一行数据导出来, 再尝试插入到表里面, 不管是source sql文件还是insert...select也不行;
从这几次尝试之后, 基本也能判断不是SQL的问题了;

最后才把注意力放到触发器上面, 这是测试表和业务表唯一的区别, 但是报错里面的信息完全和触发器没关系;
不过在这次出问题的表上, 还是有一些端倪显示出触发器可能有问题, 那就是表自己记录的auto_increament值,
表里面的最大值是91390, 插入失败的数据是91391, 表中记录的auto_increament是91392;
但是发现自己对这方面的了解不多, 也没办法确定这个auto_increament的值是不是查找根本原因的切入点;
路漫漫..... _(:з」∠)_ 

PS: 源库导出结构的时候, 已经确认源库没有触发器和存储过程, 而且也可以确认5.0.X和5.7的binlog都是v4;

PPPPPPPPPS: 毕竟从5.0.X往5.7做同步不是一个常见的场景, 姑且就当做是跨版本的同步问题吧, 如果能换成row模式的话, 好想看看会不会出问题;
您可能感兴趣的文档:

--结束END--

本文标题: MySQL案例-奇怪的duplicate primary

本文链接: https://www.lsjlt.com/news/48505.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL案例-奇怪的duplicate primary
    -------------------------------------------------------------------------------------------------记录文---...
    99+
    2022-10-18
  • MySQL复制的奇怪问题
    最近机房那边中毒,网络经常不正常,经常导致MySQL的复制中断,前几次都是报Got fatal error 1236: 'error reading log entry' from master when ...
    99+
    2022-10-18
  • MySql命令报错:Duplicate entry ‘10‘ for key ‘PRIMARY‘解决方案
    MySql命令报错:Duplicate entry ‘10‘ for key ‘PRIMARY‘解决方案 翻译错误先正常制作表格错一遍(体验报错)找到报错原因,并改正其他可能造成报错的情况总结...
    99+
    2023-09-08
    mysql 数据库 java 开发语言
  • MySQL mvcc奇怪的现象分析
    这篇文章主要讲解了“MySQL mvcc奇怪的现象分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL mvcc奇怪的现象分析”吧! 奇怪的现象1...
    99+
    2022-10-19
  • Mysql出现问题:ERROR 1062 (23000): Duplicate entry ‘‘ for key ‘PRIMARY‘解决方案
    回城传送–》《数据库问题解决方案》 ❤️作者主页:小虚竹 ❤️作者简介:大家好,我是小虚竹。Java领域优质创作者🏆,CSDN博客专家🏆,华为云享专家🏆,掘金年度人气作者🏆,阿里云专家博主🏆,51CTO专家博主🏆 ❤️技术活,该赏 ...
    99+
    2023-08-16
    mysql java 数据库 原力计划
  • 分析MySQL中FTWRL一个奇怪的堵塞现象
    本篇内容介绍了“分析MySQL中FTWRL一个奇怪的堵塞现象”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!...
    99+
    2022-10-18
  • 如何理解MySQL主从复制中关于AUTO_INCREMENT的奇怪问题
    今天就跟大家聊聊有关如何理解MySQL主从复制中关于AUTO_INCREMENT的奇怪问题,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。 ...
    99+
    2022-10-19
  • duplicate命令中有pfile、logfile、*_file_name_convert、nofilenamecheck的案例
    总结 1、pfile选项说明使用的rman命令执行的那端的一个文件 如果rman在源端开启,则pfile放在源端上,如果ramn在目标端开启,则pfile放在目标端上 2、logfile表示在duplica...
    99+
    2022-10-18
  • python逻辑运算及奇怪的返回值(not,and,or)问题的示例分析
    小编给大家分享一下python逻辑运算及奇怪的返回值(not,and,or)问题的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!首先,and、or和not...
    99+
    2023-06-29
  • MySQL中on duplicate key update的使用方法实例
     mysql的存在就更新不存在就插入实现 先建数据库表,重点要添加主键索引(id列,没有测试)和唯一索引(branch_no列),随便找表测试 INSERT INTO t_...
    99+
    2022-11-13
  • ​MySQL Router的案例分析
    这篇文章主要介绍了MySQL Router的案例分析,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。MySQL Router用于取代MySQL P...
    99+
    2022-10-18
  • MySQL死锁的案例详解
    本篇内容介绍了“MySQL死锁的案例详解”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2022-10-18
  • MySQL死锁的案例分享
    本篇内容介绍了“MySQL死锁的案例分享”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!两个死锁的小例子: ...
    99+
    2022-10-18
  • 记一次MySQL的优化案例
    一  背景       有赞的每个OLTP数据库实例上会设置一个sql-killer进程用于kill 掉执行时间超过一定阈值的sql。下午开发接收到sql被kill的报错,一起...
    99+
    2022-05-16
    MySQL 优化 MySQL 优化案例
  • MySQL 实现lastInfdexOf的功能案例
    MySQL有的时候需要用到类似lastIndexOf的功能,然而它没有现成直接可用的函数,就需要自己来琢磨了。 首先,MySQL提供了以下3个函数: instr(str:varchar, substr:varch...
    99+
    2022-05-14
    MySQL lastInfdexOf
  • MySQL中索引的案例分析
    小编给大家分享一下MySQL中索引的案例分析,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!1. 索引种类在 MySQL 中,从索引的逻辑或者说字段特性来区分,索引大致分为以下几个种类:普通索引...
    99+
    2022-10-18
  • mysql 5.7.20 修改密码的案例
    这篇文章给大家分享的是有关mysql 5.7.20 修改密码的案例的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。mysql 5.7.20改密码的方法:首先以系统管理员身份登录系统...
    99+
    2022-10-18
  • redis比mysql快的案例分析
    这篇文章给大家分享的是有关redis比mysql快的案例分析的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。Redis将所有数据放在内存中,非数据同步正常工作中,是不需要从磁盘读取...
    99+
    2022-10-18
  • mysql查询时间段的案例
    这篇文章给大家分享的是有关mysql查询时间段的案例的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。mysql查询时间段的方法:1、传统方式,即指定开始时间和结束时间;2、UNIX...
    99+
    2022-10-18
  • MySQL中注释的使用案例
    这篇文章主要介绍MySQL中注释的使用案例,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!每一种语言都有自己的注释方式,代码量越多,代码注释的重要性也就越明显。一般情况下,注释可以出现...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作