首页 > 解决方案 > 什么可能导致 MySQL 间歇性地无法返回一行?

问题描述

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

标签: mysqlsqllinuxdiskdisk-io

解决方案


这可能是您的 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();

推荐阅读