mysql - MySQL 的 key 文件不正确

标签 mysql innodb mysql-error-126

我在使用 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;

我收到这个错误:

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

我无法对涉及的表进行修复;但是我已经对两个表进行了检查,它们看起来都很好。我还对两个表进行了优化,还通过执行以下操作重建了表。

INSERT INTO new_table SELECT * FROM old_table;

然后我将新表重命名为旧表名.....但我仍然遇到这个问题。

为了尝试找出是哪个表导致的,我删除了查询中引用“rss_feeds”表的代码……所以现在查询看起来像这样……

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 中没有足够的空间临时目录....但我已经让主机将临时目录更改为具有更多空间的目录,但问题仍然存在。

我认为应该归咎于主机,它仍然是临时目录的问题;为什么?因为在我让它再次工作之后,我又开始向 rss_posts 表添加数据,因此 JOIN 会变得更大并且 MySQL 会再次耗尽空间....你怎么看?

最佳答案

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

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

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

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;

关于mysql - MySQL 的 key 文件不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3908228/

相关文章:

mysql - 动态列别名

mysql - 手动将外键插入表时允许自由输入

mysql - 如何使用外键禁用 InnoDB 的 MySQL 注释?

mysql - mysql.user 表的引擎可以从 MyISAM 转换为 InnoDb 吗?

php - MySQL:表 '/tmp/#sql_185e_0.MYI' 的 key 文件不正确;尝试修复它

php - Laravel 关系结构

PHP mysql bigint 问题

mysql - FreeRadius 断开用户

MySQL:#126 - 表的 key 文件不正确

MySQL,错误 126 : Incorrect key file for table