当我将数据插入其中时,我有一个名为answer的数据库表,数据被插入但它给另一个表带来了以下问题 '#126 - 表'/tmp/#sql_4a05_0.MYI'的密钥文件不正确;试着修复它' 然后我通过使用此中给出的解决方案解决了这个问题 link 但是当我再次将数据插入答案表时会出现此问题。
另一件事是当我导出该数据库并从地点A使用某个地方(地点B)时,它再次起作用我将数据库从地方A中删除并将数据库从地点B导入到地点A(其中有一些我插入的更多数据B)。但是在将数据导入到位置A时,它不会导入表“回答”的所有数据并给出以下错误 ERROR 1114(HY000):桌子已满 我在下面使用了溶剂 link但我无法解决这个问题。任何人都可以解决这个问题。
答案 0 :(得分:7)
错误可能不是由您的表引起的,而是由filesort或其他查询操作期间创建的临时表引起的。这些临时表以MyISAM格式存储在tmpdir
中。如果tmpdir
中没有足够的空间来容纳临时表,则可能会出现此错误。
由于临时表太大而不是永久表是一个问题,因此对永久表运行REPAIR TABLE并不能解决问题。
解决方案是将tmpdir
更改为具有更多可用空间的位置。另请注意,如果您有许多同时运行的查询,并且所有查询都在tmpdir
中使用了部分空间,则可用空间可能仍然耗尽。
您还可以尝试改进查询优化,因此使用 filesort 或其他临时表使用的查询更少。或者您可以重新设计查询,以便处理更少的数据行。
答案 1 :(得分:3)
您是否检查过服务器的可用磁盘空间?特别是对于临时目录。您会注意到您链接的问题的答案提到了磁盘空间。
答案 2 :(得分:2)
DBD :: mysql :: st执行失败:表'/tmp/#sql_4091_0.MYI'的密钥文件不正确;尝试修复它[对于声明“......
有人建议人们需要在临时桌子上进行维修,这应该引起人们的注意。它只是没有多大意义:它表明它已经被某种程度上破坏了,但由于它是短暂的并且刚刚由MySQL新创建,所以永远不需要它。更不用说实施起来很棘手了。
根据我的经验,虽然有限,但看到此错误消息的主要原因是因为您的tmpdir空间不足。像我一样,你会检查你有多少可用空间:1Gb,2Gb,4Gb。这可能还不够。这就是原因:MySQL可以在几秒钟内创建比这更大的临时表,快速填满任何可用空间。具体取决于查询的性质和数据库的大小。
以今晚为例:我创建了一个大约3.6Gb的临时表,来自一个总共只有5.4Gb的数据库,而我只有1.8Gb的可用空间。想象一下这种性质的几个问题并行运行。
当空间被填满时,将抛出上述错误,磁盘上的临时文件将被删除,您将更加明智。结论
也许MySQL实例可以更好地配置 - 但这不是重点 - 错误信息最多是倾斜的。确保你有足够的临时空间,你可能需要比你想象的更多