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

这篇具有很好参考价值的文章主要介绍了记录一个Insert姿势引起的MySQL从库上查不到数据的问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

记录一个Insert姿势引起的MySQL从库上查不到数据的问题,数据库,问题集,mysql,数据库,数据不一致,数据丢失
转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。


问题描述:

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

原因排查:

1、查看主从同步状态

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

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

2、根据数据字段排查

于是再次查看表数据,发现主从的这张表数据量是一样的,但是根据“id”这个字段去查,主库能找到数据,但是从库就是查不到。
然后换了个关键字“factoryId”去查询,发现主从库都有数据,但是两个库查询出来的数据id是不一致的:
记录一个Insert姿势引起的MySQL从库上查不到数据的问题,数据库,问题集,mysql,数据库,数据不一致,数据丢失
记录一个Insert姿势引起的MySQL从库上查不到数据的问题,数据库,问题集,mysql,数据库,数据不一致,数据丢失

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

然后尝试手动insert一条语句,发现不存在这个问题:
记录一个Insert姿势引起的MySQL从库上查不到数据的问题,数据库,问题集,mysql,数据库,数据不一致,数据丢失
记录一个Insert姿势引起的MySQL从库上查不到数据的问题,数据库,问题集,mysql,数据库,数据不一致,数据丢失

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姿势引起的MySQL从库上查不到数据的问题,数据库,问题集,mysql,数据库,数据不一致,数据丢失

解决方法:

需要开发修改接口代码,修改insert语句的插入方式,将主库随机生成的id直接insert到从库,从库不再单独生成id。问题就解决了。文章来源地址https://www.toymoban.com/news/detail-813453.html

到了这里,关于记录一个Insert姿势引起的MySQL从库上查不到数据的问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Android】一个contentResolver引起的内存泄漏问题分析

    长时间的压力测试后,系统发生了重启,报错log如下 JNI ERROR (app bug): global reference table overflow (max=51200) global reference table overflow的log 08-08 04:11:53.052912   973  3243 F zygote64: indirect_reference_table.cc:256] JNI ERROR (app bug): global reference table overflow (max=51200) 08-08 04:11:53.053014   973  3243 F z

    2024年02月08日
    浏览(38)
  • 关于shell中的一个命名引起的问题,局部变量

    以下脚本并不完整,只是抽取的部分进行 问题讲解。。 片段分析 主要留意idd_serial,实际这是一个全局变量,在函数外依然可以被正常访问。 上述逻辑主要是通过udevadm来提取 /dev/srN对应的 ID_SERIAL, PC端共存在/dev/sr0和/dev/sr1两个光驱驱动。 首先,我们删除/dev/sr0和/dev/sr1,,

    2024年02月12日
    浏览(47)
  • 由一个项目引起智能工厂及数字工厂的灵魂拷问

           介绍一下背景,这是工信部直管的项目,一个新建厂区,规模不小,一直与用户保持着联系,在老厂区调研了2周,前后交流了4次。用户对本项目的定位和要求都比较高,同时也比较务实。        前期与用户进行交流后,用户问: 你们介绍的东西,其他公司也是这

    2024年02月09日
    浏览(34)
  • mysql批量插入insert语句

    在MySQL中批量插入数据有几种方法,下面我将介绍其中两种常用的方法: 这是一种简单的方式,可以一次性插入多个值。以下是一个示例: 在上面的示例中,你需要替换your_table_name为你的表名,列名和相应的值。你可以一次性插入多行数据。 另一种批量插入数据的方法是使

    2024年02月06日
    浏览(42)
  • MySQL(62)MySQL INSERT:插入数据(添加数据)

    数据库与表创建成功以后,需要向数据库的表中插入数据。在 MySQL 中可以使用 INSERT 语句向数据库已有的表中插入一行或者多行元组数据。 INSERT 语句有两种语法形式,分别是 INSERT…VALUES 语句和 INSERT…SET 语句。 1) INSERT…VALUES语句 INSERT VALUES 的语法格式为: 语法说明如下。

    2024年02月08日
    浏览(39)
  • SQL INSERT INTO 语句详解:插入新记录、多行插入和自增字段

    SQL INSERT INTO 语句用于在表中插入新记录。 INSERT INTO 语法 可以以两种方式编写INSERT INTO语句: 指定要插入的列名和值: 如果要为表的所有列添加值,则无需在SQL查询中指定列名。但是,请确保值的顺序与表中的列顺序相同。在这种情况下,INSERT INTO 语法如下: 演示数据库 以

    2024年02月05日
    浏览(60)
  • MySQL数据库——MySQL INSERT:插入数据(添加数据)

    数据库与表创建成功以后,需要向数据库的表中插入数据。在 MySQL 中可以使用 INSERT 语句向数据库已有的表中插入一行或者多行元组数据。 INSERT 语句有两种语法形式,分别是 INSERT…VALUES 语句和 INSERT…SET 语句。 1) INSERT…VALUES语句 INSERT VALUES 的语法格式为: 语法说明如下:

    2024年02月08日
    浏览(70)
  • oracle 同一张表同时insert多条数据 mysql 同一张表同时insert多条数据

    在Oracle数据库中,你可以使用INSERT ALL语句同时向同一张表插入多条数据。INSERT ALL语句允许你一次执行多个插入操作,可以提高插入的效率和速度。 以下是使用INSERT ALL语句插入多条数据的示例: 在上面的示例中,我们使用INSERT ALL语句向\\\"employees\\\"表插入了三条数据。每个INSE

    2024年02月03日
    浏览(40)
  • MySQL 中 INSERT INTO 的使用详解

    MySQL 是一个非常流行的关系型数据库管理系统,具有高效和可扩展性等特点。在 MySQL 数据库中,INSERT INTO 是一种用于将新行插入表中的 SQL 命令。它是 MySQL 最基本、最常用的语句之一,也是许多应用程序的核心功能之一。本文将介绍如何正确地使用 INSERT INTO,以及如何处理异

    2024年02月15日
    浏览(57)
  • 【趟坑记录】d3.zoom()的正确使用姿势 @d3.v7

    在开发一个D3应用的时候遇到了一个 zoom 相关的问题,记录解决思路与方案 问题重现 最近在开发一个D3应用的时候遇到了一个 zoom 相关的问题,应用里有一个功能叫 全景聚焦 。我们都知道画布由两个标签组成(见实现autoZoom(),画布自适应放缩并居中@D3.js-v5),最外层的是固定

    2024年02月16日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包