mysql - 什么可能导致 MySQL 间歇性地无法返回一行?
问题描述
我有一个 MySQL 数据库,作为 webapp 的一部分,我正在运行非常简单的查询。我从今天开始收到用户的报告,他们收到一个错误,说他们的帐户不存在,当他们再次登录时,它确实存在(这种情况只发生在少数人身上,每个人只发生一次,所以很明显稀有的)。根据我的后端代码,只有当同一个查询第一次返回 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();
推荐阅读
- android - Android R – 使用范围存储 (MediaStore.Downloads) 在下载文件夹中创建一个文本文件
- reactjs - 什么时候应该使用像 Angular 或 React 这样的前端框架,什么时候只使用纯 HTML/CSS/JS?
- javascript - 哪个是更好的 Firestore 架构方案?
- c++ - 用 C++ 设计一个简单的任务调度器
- flutter - 如何更新未来建设者的未来
- javascript - 无法正确映射数据
- telegram - 如何为免费电报制作和创建动画贴纸?
- css - 为背景图像填充颜色的 SVG 图标
- python - sqlite3.OperationalError:没有这样的表:django_site__old
- python - 将包含 void* 指针的结构转换为其等效的 Ctype