记录一个Insert姿势引起的MySQL从库上查不到数据的问题

湖蓝几何球体LinkedIn Banner.png
转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。


问题描述:

某测试环境的MySQL用了两台节点,主从同步结构。忽然有研发同学反映说MySQL的主从不同步了。他在测试代码功能的时候,调用接口在主库insert了一条数据,然后发现在从库上查不到这条数据。于是开始排查。

原因排查:

1、查看主从同步状态

在主库和从库分别执行:show master status\G;show slave status\G;

发现从库同步的binlog的Position跟主库查询到的不一致,以为是同步延迟了。然后手动在主库创建了一个测试database,发现从库立即同步了,主从同步的点也是一致的。

2、根据数据字段排查

于是再次查看表数据,发现主从的这张表数据量是一样的,但是根据“id”这个字段去查,主库能找到数据,但是从库就是查不到。
然后换了个关键字“factoryId”去查询,发现主从库都有数据,但是两个库查询出来的数据id是不一致的:
在这里插入图片描述
在这里插入图片描述

将两条数据删掉,重新调用代码接口插入数据,结果还是一样的,两条数据的id就是不一样。

然后尝试手动insert一条语句,发现不存在这个问题:
在这里插入图片描述
在这里插入图片描述

3、排查insert语句代码

最后,研发给出的结论是这样的:
这张表的数据包含id、factoryId和appTag三个字段。
当使用代码调接口执行insert语句时,代码并没有生成id这个字段固定的id号,只有生成了factoryId和appTag这两个字段的内容。
所以写入数据的时候,只有factoryId和appTag这两个字段的内容的固定的,id号是在数据库里面自己随机生成的。而且在主库生成了id号之后,并没有让从库将主库生成的id直接inert到从库,而是在从库也随机生成一个自己的id。
所以就导致这样一种情况:同一条insert插入的数据,在主库insert的时候会随机生成一个id;在从库也会随机生成一个自己的id。当两个库都随机生成自己的id的时候,就会很高概率导致主从库上这条数据的id字段不一致,只有factoryId和appTag这两个字段是一致的。
因此,当根据id去查询数据,就会发现从库可能无法查询到该数据。因为之前很少用id这个关键字去进行数据库操作,因此没有注意到这个问题。

补充:
数据库随机生成id的两种方式:
1、随机生成uuid(uuid是根据时间戳来生成的)
2、auto_increment属性生成id

故障的大致情形如下图:
在这里插入图片描述

解决方法:

需要开发修改接口代码,修改insert语句的插入方式,将主库随机生成的id直接insert到从库,从库不再单独生成id。问题就解决了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/315995.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据分析实战丨基于flask+pygal可视化分析sqlite中的数据

文章目录 写在前面实验目标项目框架实验内容1.配置实验环境2.查看sqlite3数据库的数据3.创建项目文件4.编写代码5.运行项目 运行结果写在后面 写在前面 本期内容: 基于FlaskPygal可视化分析Sqlite3中的数据 实验环境: pythonpygalflask 项目下载地址…

浅析链表结构

一、单向链表 C语言中数组是常用的一种数据类型,但可惜数组长度是固定大小的,不能动态扩展,使用起来有时不是很方便。然后就有了自定义的动态数组结构,动态数组就比较好用了,长度可以任意扩展,但还有一个问…

2024阿里云服务器ECS介绍_全方位解析_CPU性能详解

阿里云服务器ECS英文全程Elastic Compute Service,云服务器ECS是一种安全可靠、弹性可伸缩的云计算服务,阿里云提供多种云服务器ECS实例规格,如经济型e实例、通用算力型u1、ECS计算型c7、通用型g7、GPU实例等,阿里云百科aliyunbai…

Ubuntu 在线Swap扩容

1. 查看本机swap空间 free -h 2. 找一个较大的高速盘,创建swap的空间 mkdir /swap cd /swap sudo dd if/dev/zero ofswapfile bs50M count1k3.建swapfile,大小为bs*count 50M * 1k 50G 4.标记为Swap文件,让系统能识别交换文件。 sudo mk…

C1-3.2 关于‘神经网络’

C1-3.2 关于‘神经网络’ 【注释】 彩色图像(RGB)由三原色构成,二维图像在任意一个点像素为立体三层结构,分别是红色、绿色、蓝色值,该值的范围在0∽255之间 1、全连接神经网络——整体架构 【注释】: …

科技顶天,市场立地 。璞华科技“顶天立地”的成长之路

科技顶天,市场立地。 几十年来,我们越来越深刻地认识到,这就是真理,质朴而深刻。尤其在当前特殊的国际国内商业环境中,这一理念不但没有过时,反而恰逢其时。有这么一家企业,一直践行“科技顶天…

分类预测 | Matlab实现RP-LSTM-Attention递归图优化长短期记忆神经网络注意力机制的数据分类预测【24年新算法】

分类预测 | Matlab实现RP-LSTM-Attention递归图优化长短期记忆神经网络注意力机制的数据分类预测【24年新算法】 目录 分类预测 | Matlab实现RP-LSTM-Attention递归图优化长短期记忆神经网络注意力机制的数据分类预测【24年新算法】分类效果基本描述模型描述程序设计参考资料 分…

2023极客大挑战web小记

拿到题目提示post传参还以为是道签到题 刚开始直接把自己极客大挑战的username以及password怼上去,但是不对。看看F12,有提示。 当一个搜索蜘蛛访问一个站点时,它会首先检查该站点根目录下是否存在robots.txt,如果存在&#xff0c…

近视的孩子用什么灯?学生考研护眼台灯推荐

随着时代快速发展,2022年我国近视人数达到了7亿,呈现低龄化趋势,儿童及青少年人数占了53.8%。现在学业负担都很重,每个家长都不希望自己的孩子近视或加深近视了,都会想尽一切办法保护视力。而护眼台灯就成了家长购买台…

智能路由器中的 dns.he.net可使用自定义域名的免费 DDNS 服务配置方法

今天介绍的这个是可以使用自定义域名同时支持使用二级域名的免费DDNS服务 dns.he.net的动态DDNS服务的配置方法, 这个服务相对还是比较稳定的, 其配置也和其他的DDNS服务有些不太一样, 首先他的主机名: 这里需要设置为登录后分配的区域域名: ipv6.he.net 然后就是 DDNS 用户…

Git新手?这篇文章带你飞!基础操作一网打尽!

推荐阅读 智能化校园:深入探讨云端管理系统设计与实现(一) 智能化校园:深入探讨云端管理系统设计与实现(二) 文章目录 推荐阅读Git初识Git啥是版本控制系统??集中式VS分布式 git使用…

录屏怎么打开?看这里,录制视频不费事!

随着科技的快速发展,录屏已经成为人们日常生活中经常使用的功能。无论是录制游戏视频、教程讲解,还是录制在线会议,录屏软件都发挥着重要作用。然而,很多用户并不知道录屏怎么打开,以及如何使用它们。本文将介绍两种常…

【书生·浦语】大模型实战营——第四课作业

教程文档:https://github.com/InternLM/tutorial/blob/main/xtuner/self.md 基础作业需要构建数据集,微调模型,让其明白自己的弟位(OvO!) 微调环境准备 进入开发机后,先bash,再创…

uniapp微信小程序投票系统实战 (SpringBoot2+vue3.2+element plus ) -投票帖子明细实现

锋哥原创的uniapp微信小程序投票系统实战: uniapp微信小程序投票系统实战课程 (SpringBoot2vue3.2element plus ) ( 火爆连载更新中... )_哔哩哔哩_bilibiliuniapp微信小程序投票系统实战课程 (SpringBoot2vue3.2element plus ) ( 火爆连载更新中... )共计21条视频…

应急管理蓝皮书 |《应急预案数字化建设现状和发展建议》下篇

导读 《应急预案数字化建设现状和发展建议》:297-313页 《中国应急管理发展报告》系列蓝皮书由中央党校(国家行政学院)应急管理培训中心(中欧应急管理学院)联合社会科学文献出版社研创出版,本着“权威前沿…

RT-Thread I/O设备模型

I/O设备模型 绝大部分的嵌入式系统都包括一些I/O(Input/Output,输入/输出)设备,例如仪器上的数据显示屏、工业设备上的串口通信、数据采集设备上用于保存数据的Flash或SD卡,以及网络设备的以太网接口等,都…

Linux 内核学习 3a - 如何查看虚拟内存和物理内存,以及虚拟内存和物理内存之间转换

/proc/iomem, ioremap(), mmap() The kernel manages device resources like registers as physical addresses(物理地址). These are the addresses in /proc/iomem. The physical address is not directly useful to a driver; it must use ioremap() to map the space and …

linux安装MySQL5.7(安装、开机自启、定时备份)

一、安装步骤 我喜欢安装在/usr/local/mysql目录下 #切换目录 cd /usr/local/ #下载文件 wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz #解压文件 tar -zxvf mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz -C /usr/local …

【电路电子学】7天速通攻略+笔记

7天是 看视频记笔记刷题的总时长,时间紧迫的同学可以看情况进行缩减。个人认为做题,尤其是解析齐全的题最重要! 我校所用教材 《电路与电子学基础》唐胜安 复习总流程 所用材料(都可自行找到免费资源) 视频知识点讲…

机器人持续学习基准LIBERO系列5——获取显示深度图

0.前置 机器人持续学习基准LIBERO系列1——基本介绍与安装测试机器人持续学习基准LIBERO系列2——路径与基准基本信息机器人持续学习基准LIBERO系列3——相机画面可视化及单步移动更新机器人持续学习基准LIBERO系列4——robosuite最基本demo 1.更改环境设置 LIBERO-master/l…