什么会导致 MySQL 间歇性地连续 return 失败?

What could cause MySQL to intermittently fail to return a row?

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

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

考虑到这一点,我假设这是您的 mysql 客户端中的一个错误,或者您的最大连接数已达到(我之前的主机 - Hostinger 是否存在此问题)。

假设您的问题是 mysql 客户端中的错误,通过 运行 this

将您的会话设置为每个会话的基础
SET SESSION optimizer_switch="index_merge_intersection=off";

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

[mysqld] optimizer_switch=index_merge_intersection=off

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

$mysqli->close();