我阅读了以下与之相关的问题,但回复并没有让我满意:MySQL: #126 - Incorrect key file for table
运行查询时出现此错误
错误126(HY000):表格
的密钥文件不正确
当我试图找到问题时,我找不到一个,所以我不知道如何用修复命令修复它。 是否有任何指示我如何以任何其他方式找到导致此问题的问题然后我已经尝试过了?
mysql> SELECT
-> Process.processId,
-> Domain.id AS domainId,
-> Domain.host,
-> Process.started,
-> COUNT(DISTINCT Joppli.id) AS countedObjects,
-> COUNT(DISTINCT Page.id) AS countedPages,
-> COUNT(DISTINCT Rule.id) AS countedRules
-> FROM Domain
-> JOIN CustomScrapingRule
-> AS Rule
-> ON Rule.Domain_id = Domain.id
-> LEFT JOIN StructuredData_Joppli
-> AS Joppli
-> ON Joppli.CustomScrapingRule_id = Rule.id
-> LEFT JOIN Domain_Page
-> AS Page
-> ON Page.Domain_id = Domain.id
-> LEFT JOIN Domain_Process
-> AS Process
-> ON Process.Domain_id = Domain.id
-> WHERE Rule.CustomScrapingRule_id IS NULL
-> GROUP BY Domain.id
-> ORDER BY Domain.host;
ERROR 126 (HY000): Incorrect key file for table '/tmp/#sql_2b5_4.MYI'; try to repair it
root@scraper:~# mysqlcheck -p scraper
Enter password:
scraper.CustomScrapingRule OK
scraper.Domain OK
scraper.Domain_Page OK
scraper.Domain_Page_Rank OK
scraper.Domain_Process OK
scraper.Log OK
scraper.StructuredData_Joppli OK
scraper.StructuredData_Joppli_Product OK
mysql> select count(*) from CustomScrapingRule;
+----------+
| count(*) |
+----------+
| 26 |
+----------+
1 row in set (0.04 sec)
mysql> select count(*) from Domain;
+----------+
| count(*) |
+----------+
| 2 |
+----------+
1 row in set (0.01 sec)
mysql> select count(*) from Domain_Page;
+----------+
| count(*) |
+----------+
| 134288 |
+----------+
1 row in set (0.17 sec)
mysql> select count(*) from Domain_Page_Rank;
+----------+
| count(*) |
+----------+
| 4671111 |
+----------+
1 row in set (11.69 sec)
mysql> select count(*) from Domain_Process;
+----------+
| count(*) |
+----------+
| 2 |
+----------+
1 row in set (0.02 sec)
mysql> select count(*) from Log;
+----------+
| count(*) |
+----------+
| 41 |
+----------+
1 row in set (0.00 sec)
mysql> select count(*) from StructuredData_Joppli;
+----------+
| count(*) |
+----------+
| 11433 |
+----------+
1 row in set (0.16 sec)
mysql> select count(*) from StructuredData_Joppli_Product;
+----------+
| count(*) |
+----------+
| 130784 |
+----------+
1 row in set (0.20 sec)
root@scraper:/tmp# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/xvda1 20G 4.7G 15G 26% /
none 4.0K 0 4.0K 0% /sys/fs/cgroup
udev 237M 4.0K 237M 1% /dev
tmpfs 49M 188K 49M 1% /run
none 5.0M 0 5.0M 0% /run/lock
none 245M 0 245M 0% /run/shm
none 100M 0 100M 0% /run/user
答案 0 :(得分:39)
您的查询似乎返回了一个需要的大型中间结果集 创建一个临时表,并为mysql临时配置的位置 磁盘表(/ tmp)对于生成的临时表来说不够大。
您可以尝试通过重新安装来增加tmpfs分区大小:
mount -t tmpfs -o remount,size=1G tmpfs /tmp
您可以通过编辑/ etc / fstab
使此更改成为永久更改如果您无法执行此操作,可以尝试更改磁盘的位置 通过编辑my.cnf文件中的“tmpdir”条目来临时表(或添加 它,如果它还没有)。记住你的目录 选择应该是mysql用户可写的
您还可以尝试通过增加来阻止创建磁盘上的临时表 mysql配置选项的值:
tmp_table_size
max_heap_table_size
更大的值。您需要增加上述两个参数
示例:
set global tmp_table_size = 1G;
set global max_heap_table_size = 1G;
答案 1 :(得分:1)
将复杂查询拆分为多个查询会更快,而无需增加临时表大小
答案 2 :(得分:1)
在我的情况下,我刚刚从临时位置清除临时文件:
<强>的my.ini 强>
tmpdir =“D:/ xampp / tmp”
它对我有用。
答案 3 :(得分:1)
如果linux文件系统上的/tmp
挂载安装为溢出,通常大小为1MB,即
$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 7.9G 12K 7.9G 1% /dev
tmpfs 1.6G 348K 1.6G 1% /run
/dev/xvda1 493G 6.9G 466G 2% /
none 4.0K 0 4.0K 0% /sys/fs/cgroup
none 5.0M 0 5.0M 0% /run/lock
none 7.9G 0 7.9G 0% /run/shm
none 100M 0 100M 0% /run/user
overflow 1.0M 4.0K 1020K 1% /tmp <------
这可能是因为您没有将/tmp
指定为自己的分区,并且您的根文件系统已填满,/tmp
已重新安装为后备。
我在EC2卷上用完空间后遇到了这个问题。一旦我调整了卷的大小,我就会在执行复杂视图时遇到填充的/tmp
溢出分区。
<小时/> 要在清除空间/调整大小后解决此问题,只需卸下后备,它应重新安装在其原始位置(通常是根分区):
sudo umount -l /tmp
注意:-l
将懒洋洋地卸载磁盘。 子>
答案 4 :(得分:-8)
您只需要修复在搜索查询中使用的表格。此问题通常发生在搜索查询中。
转到“ table_name ” - &gt; 操作 - &gt; 修复(只需点击一下)效果可能需要一些时间才能应用