我从MySQL查询中得到以下错误.
#126 - Incorrect key file for table
我甚至没有宣布这张桌子的钥匙,但我确实有索引.有谁知道可能是什么问题?
我不经常来这里寻求帮助,但我对此非常沮丧,我希望有人以前遇到过它.
每当我尝试使用多个连接从表中获取记录时,我都会收到此错误:
#126 - Incorrect key file for table '/tmp/#sql_64d_0.MYI'; try to repair it
Run Code Online (Sandbox Code Playgroud)
所以这个查询会产生错误:
SELECT * FROM `core_username`
INNER JOIN `core_person` ON (`core_username`.`person_id` = `core_person`.`id`)
INNER JOIN `core_site` ON (`core_username`.`site_id` = `core_site`.`id`)
ORDER BY `core_username`.`name` ASC LIMIT 1
Run Code Online (Sandbox Code Playgroud)
但是这个不会:
SELECT * FROM `core_username`
INNER JOIN `core_person` ON (`core_username`.`person_id` = `core_person`.`id`)
ORDER BY `core_username`.`name` ASC LIMIT 1
Run Code Online (Sandbox Code Playgroud)
这一个也不会:
SELECT * FROM `core_username`
INNER JOIN `core_site` ON (`core_username`.`site_id` = `core_site`.`id`)
ORDER BY `core_username`.`name` ASC LIMIT 1
Run Code Online (Sandbox Code Playgroud)
可能是什么导致了这个?我真的不知道如何修复tmp表,但我不认为这是问题,因为它每次都是一个新的tmp表.用户名表相当大(现在有233,718条记录),但我怀疑它与它有什么关系.
任何帮助将非常感激.
更新:经过一些进一步的测试后,似乎错误只发生在我尝试订购结果时.也就是说,这个查询会给我我的期望:
SELECT …Run Code Online (Sandbox Code Playgroud) 我正在尝试运行一个相当大的查询,该查询应该每晚运行以填充表格.我收到一个错误,Incorrect key file for table '/var/tmp/#sql_201e_0.MYI'; try to repair it但我正在使用的存储引擎(无论默认是什么,我猜?)不支持修复表.
我该如何解决这个问题,以便运行查询?
我阅读了以下有相关性的问题,但回复并没有让我满意:MySQL:#126 - 表的密钥文件不正确
运行查询时出现此错误
错误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
-> …Run Code Online (Sandbox Code Playgroud) Incorrect key file for table 'widgets'; try to repair it
Run Code Online (Sandbox Code Playgroud)
这是MySQL在尝试将新索引应用于现有(非常大)表时给出的错误消息.当然,当我按照错误消息的建议尝试修复它时:
mysql> repair table widgets;
+-------------------+--------+----------+---------------------------------------------------------+
| Table | Op | Msg_type | Msg_text |
+-------------------+--------+----------+---------------------------------------------------------+
| tedsdb.widgets | repair | note | The storage engine for the table doesn't support repair |
+-------------------+--------+----------+---------------------------------------------------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
这是我最好的行动方案(在修补之前进行明显的完整备份)?
更新:我创建了一个相同模式的新表(MyISAM),复制了所有记录(插入到select中),更改了新表(InnoDB)上的引擎,重命名了损坏的表并重命名了新表,然后尝试了再次得到同样的错误.
我遇到了InnoDB的问题(表是最初的MyISAM,但是之前将它转换为InndoB)表; 我正在尝试运行此查询:
SELECT
posts.id,
posts.post_title
FROM
rss_posts AS posts
INNER JOIN rss_feeds AS feeds ON posts.blog_id=feeds.id
WHERE
feeds.blog_language=1
ORDER BY
posts.post_date_db DESC
LIMIT
10;
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
Query : SELECT posts.id,posts.post_title FROM rss_posts AS posts INNER JOIN vw_rss_feeds AS feeds ON posts.blog_id=feeds.id WHER...
Error Code : 126
Incorrect key file for table '/tmp/#sql_7375_0.MYI'; try to repair it
Run Code Online (Sandbox Code Playgroud)
我不能对所涉及的桌子进行维修; 但是我在两张桌子上都运行了CHECK并且看起来很好.我还在两个表上都做了一个OPTIMIZE,并通过以下方式重建了表.
INSERT INTO new_table SELECT * FROM old_table;
Run Code Online (Sandbox Code Playgroud)
然后我将新表重命名为旧表名.....但我仍然遇到这个问题.
为了尝试找出导致它的表,我删除了引用"rss_feeds"表的查询中的代码....所以现在查询看起来像这样.
SELECT
posts.id,
posts.post_title
FROM
rss_posts AS posts
ORDER BY
posts.post_date_db DESC
LIMIT
10;
Run Code Online (Sandbox Code Playgroud)
那很有效. …