开发者社区> 问答> 正文

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

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

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

#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阻塞了,如本博客文章中所述。我仍然不确定解决方案是什么,但是...

展开
收起
保持可爱mmm 2020-05-17 19:29:19 560 0
1 条回答
写回答
取消 提交回答
  • 有时当临时表发生此错误时:

    #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来源:stack overflow

    2020-05-17 19:33:39
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像