对于经常出现的#126-表'的键文件不正确,有什么解决方案/tmp/#sql_4a05_0.MYI';;尝试在mysql中修复它吗?

对于经常出现的#126-表'的键文件不正确,有什么解决方案/tmp/#sql_4a05_0.MYI';;尝试在mysql中修复它吗?,mysql,database,phpmyadmin,xampp,Mysql,Database,Phpmyadmin,Xampp,我有一个名为answer的数据库表,当我向其中插入数据时,数据会被插入,但它会给另一个表带来以下问题 “#126-表'/tmp/#sql_4a05_0.MYI'的密钥文件不正确”;试着把它修好 然后,我用本文给出的解来解决这个问题 但是,当我再次向应答表插入数据时,就会出现这个问题 另一件事是,当我从A处导出数据库并使用某处(B处)时,它再次起作用,所以我从A处删除数据库,从B处(我在B处插入了更多数据)将数据库导入A处。但在导入数据以放置A时,它不会导入表“answer”的所有数据,并给出以下

我有一个名为answer的数据库表,当我向其中插入数据时,数据会被插入,但它会给另一个表带来以下问题 “#126-表'/tmp/#sql_4a05_0.MYI'的密钥文件不正确”;试着把它修好 然后,我用本文给出的解来解决这个问题 但是,当我再次向应答表插入数据时,就会出现这个问题

另一件事是,当我从A处导出数据库并使用某处(B处)时,它再次起作用,所以我从A处删除数据库,从B处(我在B处插入了更多数据)将数据库导入A处。但在导入数据以放置A时,它不会导入表“answer”的所有数据,并给出以下错误 错误1114(HY000):表格已满 我在下面使用了解决方案
但我无法解决这个问题。任何人都可以找到这个问题的解决方案。

您检查过服务器的可用磁盘空间了吗?特别是临时目录。您会注意到,您链接的问题的答案提到了磁盘空间。

此错误可能不是由表引起的,而是在文件排序或其他查询操作期间创建的临时表。这些临时表以MyISAM格式存储在
tmpdir
中。如果
tmpdir
中没有足够的空间容纳临时表,则可能会出现此错误

因为太大的临时表(而不是永久表)有问题,所以对永久表运行修复表并不能解决问题

解决方案是将
tmpdir
更改为具有更多可用空间的位置。还请注意,如果有许多查询同时运行,并且所有查询都使用了
tmpdir
中的部分空间,则可用空间仍可能耗尽


您还可以尝试改进查询优化,以减少使用文件排序或其他临时表的查询。或者您可以重新设计查询,以便它们处理更少的数据行。

DBD::mysql::st execute失败:表'/tmp/#sql4091_0.MYI'的密钥文件不正确;尝试修复它[用于语句“…

有人建议需要在临时表上运行修复的想法应该会引起人们的注意。这没有多大意义:它表明它在某种程度上被破坏了,但由于它是临时的,并且是由MySQL新创建的,因此不应该需要它。更不用说实现起来很棘手

根据我的经验,尽管它是有限的,但看到此错误消息的主要原因是因为您的tmpdir空间不足。与我一样,您将检查您有多少可用空间:1Gb、2Gb、4Gb。这可能不够。原因如下:MySQL可以在几秒钟内创建比这更大的临时表,快速填满所有可用空间。这取决于查询的性质和数据库的大小

以今晚为例:我创建了一个临时表,其大小约为3.6Gb,来自一个总共只有5.4Gb的数据库,而我只有1.8Gb的可用空间。想象一下,两个这种性质的查询并行运行

一旦空间被填满,上面的错误就会被抛出,磁盘上的临时文件也会被删除,而你将一无所获。结论


也许MySQL实例可以更好地配置-但这不是重点-错误消息最多是倾斜的。请确保您有足够的临时空间,您可能需要比您想象的更多的空间。

非常感谢@BillKarwin。这非常有帮助:)