MySQL,错误 126:表的密钥文件不正确
Posted
技术标签:
【中文标题】MySQL,错误 126:表的密钥文件不正确【英文标题】:MySQL, Error 126: Incorrect key file for table 【发布时间】:2013-09-30 22:30:48 【问题描述】:我阅读了以下相关的问题,但回复并没有让我满意:mysql: #126 - Incorrect key file for table
问题
运行查询时出现此错误
ERROR 126 (HY000): table` 的密钥文件不正确
问题
当我试图找到问题时,我找不到问题,所以我不知道如何使用修复命令修复它。 在我已经尝试过的任何其他方式中,是否有任何指示我如何找到导致此问题的问题?
查询
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
mysqlcheck
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
【问题讨论】:
磁盘空间问题怎么办? 500GB 高清空间,数据库中没有 blob,我不明白这可能是什么问题。目前它真的不是那么大的数据库。该项目只是在测试中,所以我们有比目前需要的更多的资源。虽然,我会查看并更新信息 @Sebas 虽然我对当前磁盘大小的看法是错误的,但我相信我们仍然应该有一个不错的余量.. 【参考方案1】:您的查询似乎返回了一个大型中间结果集,需要 创建一个临时表并为 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;
【讨论】:
还应该提到,这种情况下的查询应该以不同的方式格式化,以避免这个问题。在这种情况下使用多个查询要快得多。 这为我指明了正确的方向。就我而言,最近我的根分区上的空间不足,这会生成溢出挂载来保护/tmp
。当我用完房间时,我调整了音量。几个月后,我遇到了这个错误,这是因为我没有删除的溢出安装太小了。谢谢!【参考方案2】:
如果您在 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
会延迟卸载磁盘。
【讨论】:
【参考方案3】:将复杂查询拆分为多个查询会更快,而无需增加临时表大小
【讨论】:
【参考方案4】:就我而言,我只是从临时位置清除临时文件:
my.ini
tmpdir = "D:/xampp/tmp"
它对我有用。
【讨论】:
【参考方案5】:您只需要修复在搜索查询中使用的表。这个问题一般出现在搜索查询上。
转到“table_name” -> 操作-> 修复(只需单击)效果可能需要一些时间才能生效
【讨论】:
他没有提到对 mysql 使用任何 gui,而您显然描述了要在某些 gui 上执行的步骤(因为您说它是“只需单击一下”)。以上是关于MySQL,错误 126:表的密钥文件不正确的主要内容,如果未能解决你的问题,请参考以下文章
表 '/mysql-tmp/#sql_78b5_0.MYI' 的密钥文件不正确;或“从存储引擎得到错误 x”
得到维度处理错误;表 '/var/tmp/mysql.VArBWG/#sql_aa0_8.MYI' 的密钥文件不正确;尝试修复它
MySQL 表 '/tmp/#.....MYI' 的密钥文件不正确;尝试修复它
文件名,目录名或卷标语法不正确,错误代码:0x8007007B