Incorrect key file for table '/tmp/#sql_15cc_14.MYI'; try to repair it _MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 1462 | 回复: 0   主题:  Incorrect key file for table '/tmp/#sql_15cc_14.MYI'; try to repair it         下一篇 
unknsnow
注册用户
等级:上士
经验:272
发帖:78
精华:0
注册:2012-2-10
状态:离线
发送短消息息给unknsnow 加好友    发送短消息息给unknsnow 发消息
发表于: IP:您无权察看 2014-11-7 10:28:33 | [全部帖] [楼主帖] 楼主

Mysql中查看视图的时候遇到错误:

'Incorrect key file for table '/tmp/#sql_15cc_14.MYI'; try to repair it'


在mysql的错误日志中可以看到类似的错误;

130910  9:52:31 [ERROR] /mysql/mysql5.5.24/bin/mysqld: Incorrect key file for table '/tmp/#sql_15cc_14.MYI'; try to repair it
130910  9:52:31 [ERROR] Got an error from unknown thread, /pb2/build/sb_0-5519472-1334854211.98/mysql-5.5.24/storage/myisam/mi_write.c:223


直观上看以为是视图引用的表出了问题,但直接运行视图中的SQL可以返回结果,排除了这个可能。

但为什么直接查询视图报错呢?难道视图创建的有问题。

昨天下班的时候这个视图还可以正常运行,只是今天早上访问这个视图的时候出现了这个错误。这期间视图没有被修改过,说明视图本身并没有问题,且同样的视图在其他的库中可以正常运行。可能是视图运行依赖的“某些环境”发生了改变。

尝试如下解决办法:

1. 重建视图,错误依旧。

2. google后得知可能是tmp空间不足引起。

查询视图的时候/tmp下会生成一些临时文件,视图返回结果后,这些临时文件会被自动删除。如果/tmp 空间不足以存放视图查询过程中产生的临时文件,则会返回上述错误。

检查/tmp空间还有1.5G的剩余,为了避免/tmp 空间不足的嫌疑,用rm命令删除了/tmp中占用空间比较大的几个文件。检查/tmp空间发现空间未释放,这是因为linux中如果打开文件的进程还在则,被删除文件的空间是不会释放的。

检查哪些进程打开了这些大文件:

$ lsof |grep deleted


发现时mysqld打开了几个比较占空间的大文件。这个时候比较容易想到的就是停掉mysql来释放mysql打开的文件。测试环境或许可以这么做,但生产中的数据库是不能轻易停掉的。既然是mysql打开的这几个文件,我们或许可以知道是mysql中的那些会话打开了这些文件,如果可以我们关闭这些会话,这些被mysql打开的/tmp中的临时文件就会被关闭,从而/tmp空间可以被释放。

通过下面的语句查询,果然发现几个耗时比较长的查询在运行。而这些查询有一个共同点,就是在访问不同的视图。

mysql>SELECT * FROM information_schema.`PROCESSLIST` WHERE INFO IS NOT NULL ;


跟同事确认后,是有人在运行几个大的报表,可以停掉。

kill 掉这几个大的查询,发现/tmp 空间很快被释放了。那个视图也可以正常的查询了。

--转自 北京联动北方科技有限公司




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论