首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL的密钥文件不正确

MySQL的密钥文件不正确
EN

Stack Overflow用户
提问于 2010-10-12 00:47:55
回答 3查看 11.7K关注 0票数 6

我在使用InnoDB (表最初是MyISAM,但不久前将其转换为InndoB )表时遇到了问题;我正在尝试运行以下查询:

代码语言:javascript
复制
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;

我得到了这个错误:

代码语言:javascript
复制
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

我不能对涉及到的表运行修复;但是,我已经对两个表都运行了检查&它们看起来都很好。我还对这两个表进行了优化,并通过执行以下操作重新构建了这些表。

代码语言:javascript
复制
INSERT INTO new_table SELECT * FROM old_table;

然后,我将新表重命名为旧表名.....但是我仍然有这个问题。

为了尝试找出是哪个表引起的,我删除了查询中引用"rss_feeds“表的代码...因此,现在的查询如下所示。

代码语言:javascript
复制
SELECT 
   posts.id,
   posts.post_title
FROM
   rss_posts AS posts
ORDER BY
   posts.post_date_db DESC
LIMIT
   10;

这招奏效了。

所以问题出在rss_feeds表上。

因此,我想我应该将表转换回MyISAM并运行修复,然后再转换回InnoDB……这暂时起作用了,恢复正常了.然后它又坏了.又修了,又坏了……现在修复似乎完全不起作用了。

现在,我知道,我知道......我已经在谷歌上搜索过这个问题了……我注意到,大多数情况下问题出在MySQL临时目录中没有足够的空间...但我已经让主机将temp dir更改为具有更多空间的文件&问题仍然存在。

我认为主机是罪魁祸首&这仍然是临时目录的问题;为什么?因为在我让它再次工作后,我再次开始向rss_posts表添加数据&因此连接会变得更大& MySQL会再次耗尽空间。你认为如何?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-10-12 01:09:58

这里发生的事情是,MySQL通过从两个表的连接构建一个临时表来执行ORDER BY。临时表太大,内存无法容纳,因此MySQL创建了一个临时文件。

有几件事会阻止它正常工作。原始磁盘空间为1。ulimit是另一个。如果这是托管的,他们可能会对您的磁盘使用有配额(除了ulimit)。

我建议在您的查询中添加一个限制子句。目前,您将整个rss_posts和rss_feeds都加载到临时表中进行排序。如果你只想要最近的10个数据,那就比你真正需要的数据多得多。

代码语言:javascript
复制
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 
AND posts.post_data_db > (now - interval 30 day);
ORDER BY posts.post_date_db DESC LIMIT 10;
票数 5
EN

Stack Overflow用户

发布于 2010-10-12 01:04:23

看起来临时表的磁盘配额确实太小了。

顺便说一句,不需要对InnoDB表运行修复,因为所有的维护都是由存储引擎自己完成的。它们也没有要损坏的密钥文件。

票数 2
EN

Stack Overflow用户

发布于 2012-10-12 03:23:59

请注意,存在问题的.MYI文件用于临时表。当您运行涉及连接的查询时,MySql需要使用临时空间在内部合并数据。您的tmp目录中的空间很可能已用完。

尝试增加分配给tmpdir的空间量,或者编辑my.cnf文件,让tmpdir指向一个有足够空间的地方(不要忘记授予它权限)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3908228

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档