当前位置: 首页 > 面试题库 >

进行多个连接时,tmp表的MySQL错误密钥文件

胡桐
2023-03-14
问题内容

我不经常来这里寻求帮助,但是对此我感到非常沮丧,我希望有人以前遇到过它。

每当我尝试使用多个联接从表中获取记录时,都会出现此错误:

#126 - Incorrect key file for table '/tmp/#sql_64d_0.MYI'; try to repair it

因此,此查询将产生错误:

SELECT * FROM `core_username`
INNER JOIN `core_person` ON (`core_username`.`person_id` = `core_person`.`id`)
INNER JOIN `core_site` ON (`core_username`.`site_id` = `core_site`.`id`)
ORDER BY `core_username`.`name` ASC LIMIT 1

但这不会:

SELECT * FROM `core_username`
INNER JOIN `core_person` ON (`core_username`.`person_id` = `core_person`.`id`)
ORDER BY `core_username`.`name` ASC LIMIT 1

而且这个也不会:

SELECT * FROM `core_username`
INNER JOIN `core_site` ON (`core_username`.`site_id` = `core_site`.`id`)
ORDER BY `core_username`.`name` ASC LIMIT 1

是什么原因造成的?我真的不知道如何修复tmp表,但是我真的不认为这是问题所在,因为每次都是新的tmp表。用户名表相当大(目前有233,718条记录),但我怀疑这与它有关。

任何帮助将非常感激。

更新 :经过一些进一步的测试后,似乎该错误仅在我尝试订购结果时发生。也就是说,此查询将给我我期望的结果:

SELECT * FROM `core_username`
INNER JOIN `core_person` ON (`core_username`.`person_id` = `core_person`.`id`)
INNER JOIN `core_site` ON (`core_username`.`site_id` = `core_site`.`id`)
LIMIT 1

但是,如果我添加:

ORDER BY `core_username`.`name` ASC

错误被触发。这仅在我当前正在使用的特定Web服务器上发生。如果我下载数据库并在本地主机和其他服务器上尝试相同的操作,它将运行良好。MySQL版本是5.0.77。

知道这一点,我相当有信心正在发生的事情就是正在创建的tmp表太大而MySQL阻塞了,如本博客文章中所述。我仍然不确定解决方案是什么,但是…


问题答案:

有时当临时表发生此错误时:

#126 - Incorrect key file for table '/tmp/#sql_64d_0.MYI'; try to repair it

可能是因为/tmp文件夹空间不足。在某些Linux安装中,/tmp它位于自己的分区中,并且没有太多空间-大的MySQL查询将填满它。

您可以df -h用来检查是否\tmp在其自己的分区中,以及为其分配了多少空间。

如果它在自己的分区中并且空间不足,则可以:

(a)修改/ tmp,使其分区具有更大的空间(通过重新分配或将其移动到主分区-
例如,请参见此处)
(b)更改MySql配置,以便它在不同分区上使用不同的临时文件夹,例如/var/tmp



 类似资料:
  • 问题内容: 我阅读了以下具有相关性的问题,但答复并未使我满意:MySQL:#126-表的密钥文件不正确 问题 运行查询时出现此错误 错误126(HY000):表的密钥文件不正确` 问题 当我试图找到问题时,我找不到问题,所以我不知道如何使用repair命令修复它。在我已经尝试过之后,是否有其他任何方法可以指示我如何找到导致此问题的问题呢? 查询 mysqlcheck 计算行 更新资料 磁盘使用情况

  • 我有以下两个类(和他们的pk类)与这些注释。我删除了setters/getters/hashcode/equals来压缩示例 我最终得到了这个错误 我的猜测是,因为“年”是在联接表中共享的,所以我弄乱了一些关联实体的语法。请注意,这些视图的实体之间存在隐式关系,我正试图在注释中对其建模。我尝试了一些JPA建模工具,这些工具在建模后给了我同样的错误。我已尝试将联接列设置为,并将设置为。 我当然可以只

  • 问题内容: 我将MySQL 5.0用于GoDaddy(linux)托管的网站。 我在Web应用程序上进行了一些测试,突然我发现页面刷新非常缓慢。最终,经过漫长的等待,我到达了一个页面,上面写着“ MySQL错误,连接过多…”,它指向我的连接数据库的config.php文件。 只是我连接到数据库,没有其他用户。在每个页面上,我都在顶部包含config.php文件,并在页面末尾关闭mysql连接。中间

  • 问题内容: 我从来没有做过这样的PHP / MYSQL技巧来加入多表。请具有该领域经验的人员帮助: TICKETS 表中的字段: 表 RECEPTS中的 字段: 表 PAYMENTS中的 字段: 表 CUSTOMERS中的 字段: 表之间的关系很容易理解: 我希望达到的最终结果: 我试图做这样的事情,但在某个地方出错: 问题答案: 您应该可以使用以下方法获得结果: 参见带有演示的SQL Fiddl

  • 下面的代码片段是从JoinedStreams的javadoc复制的 这两个流仅基于一个键(通过< code>t =计算)进行连接 我会问我如何基于多个键进行连接,例如,one.a = two.a和

  • 我正在使用Symfony 3和教义2.5。总共有三张表: 给定公司id 2,最终结果应该是这样,但就我个人而言,我无法为它编写一个有效的原则QueryBuilder方法 我有三个可以工作的MySQL查询,它们为我带来了想要的结果。但就我的一生而言,我无法将任何一个问题转换成至少一个工作原理问题。 使用MySQL查询(这实际上可能会帮助这里的一些用户): 我在Doctrine的QueryBuilde