什么可能导致 MySQL 间歇性地无法返回一行?

问题描述

我有一个 MySQL 数据库,作为 web 应用程序的一部分,我正在对它运行非常简单的查询。我从今天开始收到用户的报告,他们收到错误消息,说他们的帐户不存在,当他们再次登录时,它确实存在(这种情况只发生在少数人身上,而且每个人只发生一次,所以很明显是稀有的)。根据我的后端代码,只有在同一查询第一次返回 0 行,第二次返回 1 行时才会发生此错误。我的查询基本上是 SELECT * FROM users WHERE username="..."。这怎么可能?我怀疑是硬盘出现 I/O 故障,但我不确定,因为我不希望 MySQL 在这种情况下静默失败。也就是说,我不知道还能是什么。

解决方法

这可能是您的 mysql 客户端的错误(虽然我不确定您的代码结构如何,但它可能只是错误的查询)。但是,让我们假设您的查询到目前为止一直运行良好,之前没有出现任何问题,因此我们将排除错误代码。

考虑到这一点,我假设它要么是您的 mysql 客户端中的错误,要么是您达到了最大连接数(我以前的主机 - Hostinger 有此问题)。

假设您的问题是 mysql 客户端中的错误,请通过运行此命令将会话设置为每个会话

SET SESSION optimizer_switch="index_merge_intersection=off";

或者在你的 my.cnf 中你可以全局设置它

[mysqld] optimizer_switch=index_merge_intersection=off

至于最大连接,您可以增加 max_connection 值(取决于您的主机是否允许),或者您必须制定一个逻辑来在查询执行后关闭 mysql 连接。

$mysqli->close();

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...