我写了一个查询,这在我的本地服务器上运行正确,它有更少的数据,
但是当我在生产服务器上运行它时会出错 - (这有更多的数据在6GB左右)
Incorrect key file for table '/tmp/#sql_3c51_0.MYI'; try to repair it
Run Code Online (Sandbox Code Playgroud)
这是我的查询
SELECT
`j25_virtuemart_products`.`virtuemart_product_id`,
`product_name`,
`product_unit`,
`product_s_desc`,
`file_url_thumb`,
`virtuemart_custom_id`,
`custom_value`
FROM
`j25_virtuemart_product_customfields`,
`j25_virtuemart_products`,
`j25_virtuemart_products_en_gb`,
`j25_virtuemart_product_medias`,
`j25_virtuemart_medias`
WHERE
(
`j25_virtuemart_products`.`virtuemart_product_id`=`j25_virtuemart_products_en_gb`.`virtuemart_product_id`
AND
`j25_virtuemart_products`.`virtuemart_product_id`=`j25_virtuemart_product_customfields`.`virtuemart_product_id`)
AND
`j25_virtuemart_products`.`virtuemart_product_id`=`j25_virtuemart_product_medias`.`virtuemart_product_id`
AND
`j25_virtuemart_product_medias`.`virtuemart_media_id`=`j25_virtuemart_medias`.`virtuemart_media_id`
GROUP BY `j25_virtuemart_products`.`virtuemart_product_id`
LIMIT 0, 1000;
Run Code Online (Sandbox Code Playgroud)
任何人都知道如何从该错误中恢复 - 比如otimize这个查询或任何其他方式谢谢你
Mir*_*ici 55
问题是由/ tmp文件夹中缺少磁盘空间引起的./ tmp卷用于需要创建临时表的查询中.即使查询仅使用InnoDB表,这些临时表也是MyISAM格式.
以下是一些解决方案:
TMPDIR在mysqld启动之前设置环境变量,通过mysql更改临时文件夹用户.指向TMPDIR磁盘卷上具有更多可用空间的文件夹.您还可以使用tmpdir在选项/etc/my.cnf或--tmpdir在mysqld服务的命令行.请参阅:B.5.3.5 MySQL存储临时文件的位置上面有很多答案,问题所有者已经得到了@Hawili建议的解决方案,并且自问题提出以来已经过了很长时间.但由于这是一个常见的问题,我想分享我的经验,以便如果有人因为不同的原因再次得到这个问题,那么可以从这里得到解决方案.
情况1:
最常见的原因是查询正在获取大于/ tmp分区大小的数据.在查询期间遇到此问题时,请查看/ tmp文件夹大小.临时表是自动创建和删除的,如果此查询期间可用空间下降到0,则表示您需要优化查询或需要增加/ tmp的分区大小.
注意:有时它不是一个单独的查询:如果重组查询的组合在同一服务器上同时执行此操作,那么您可以解决此问题,通常单个查询将执行而没有任何错误.
案例2:
如果您需要修复损坏的myisam表,则错误消息中的目录路径将与/ tmp不同.
案例3 :(罕见情况)
有时由于表连接不正确,您可能会收到此错误.这是一个语法错误,但mysql可以抛出此错误.您可以在以下链接查看详细信息 -
表'/tmp /#sql_18b4_0.MYI'的密钥文件不正确; 尝试修复它
| 归档时间: |
|
| 查看次数: |
64190 次 |
| 最近记录: |