最近操作一个有超过180W记录的数据库,随机查询几条记录老是报错,报错提示如下:
mysql> select * from XXXXXXXX order by rand() limit 100;
ERROR 126 (HY000): Incorrect key file for table '/tmp/#sql_3f89_0.MYI'; try to repair it
放狗搜了一把之后,发现是临时文件目录剩余容量不足导致的。查看配置文件可知,Debian8系统用apt安装的MySQL,默认的tmpdir是在/tmp,恰好我这台VPS上的/tmp只有128MB,180W条记录,肯定不够。
解决办法也很简单,更改MySQL的临时文件目录就行了。用apt安装的MySQL默认配置文件在/etc/mysql/my.cnf,只需更改其中一项就行,找到这么一行:
tmpdir = /tmp
改成别的目录就行,我是将其切换到了/var/tmp/mysql。
切换到别的目录之后,记得给相应的权限:
chown mysql:mysql /var/tmp/mysql/
保存之后,重启MySQL服务器,再次执行就不会报错了。