Mysql无法创建/写入文件错误#13
我创建了一个Django视图,它在从MySql DB读取数据后返回一些数据。当我尝试从数据库中获取大约6000行时,一切正常,视图返回的HttpResponse的是expected.However我尝试获取7000+行我碰到下面的错误
Mysql无法创建/写入文件错误#13
(1, "Can't create/write to file '/home/nipun/mysql_temp/MYzplJok' (Errcode: 13)")
早些时候,我认为错误可能是由于空间越来越用尽/温度,所以我改变了my.cnf中的tempdir设置
我还确保新的tmpdir/home/nipun/mysql_temp a nd通过更改所有权,它的父目录可由我写入。 虽然这不是一个Django的问题,这里是视图
def query_json(request):
from django.utils import simplejson
objects=Publisher.objects.filter(location='ROOM_01',sensor_name='CPU_TEMPERATURE').order_by('-id')[0:9000]
json = simplejson.dumps([{"reading": float(o.reading),
"timestamp": str(o.timestamp)
} for o in objects])
return HttpResponse(json,mimetype="application/json")
所以在更换过滤器9000〜6000工作正常。
有关错误的一些更多的信息在Django的堆栈跟踪
errorclass
<class '_mysql_exceptions.InternalError'>
errorvalue
InternalError(1, "Can't create/write to file '/home/nipun/mysql_temp/MYuotga9' (Errcode: 13)")
error
(<class '_mysql_exceptions.InternalError'>,
InternalError(1, "Can't create/write to file '/home/nipun/mysql_temp/MYuotga9' (Errcode: 13)"))
编辑
作为每一个评论规定,我想这对我的MySQL提示
mysql> CREATE TEMPORARY TABLE t (i int);
ERROR 1005 (HY000): Can't create table 't' (errno: 13)
所以它现在基本上是一个如何让MySQL写入临时目录的问题
这可能是Mysql使用的临时文件夹的权限问题。
您可以找到MySQL使用的临时操作在配置文件/etc/mysql/my.cnf这样的文件夹:tmpdir = /tmp
正如你所看到的,在默认情况下,使用临时文件夹是“/ tmp”。
特权应该是:drwxrwxrwt 9 root root 4096 oct. 24 15:39 tmp/ d
所以任何人,包括 “mysql的” 用户,可以使用它。 如果没有正确设置,下面的命令会诀窍:chmod 0777 /tmp
希望这会有所帮助!
您已将mysql的tmpdir配置为指向服务器无权写入的目录。
对于小文件,MySQL使用内存缓冲区,但是较大的文件使用光盘上的文件(在tmpdir中)。
在任何情况下,这是一个系统管理员错误(不是编程错误),将MySQL tmpdir设置为指向不可写目录。
我什至尝试http://everythingmysql.ning.com/profiles/blogs/using-tmpfs-for-mysqls-tmpdir仍然继续得到相同的错误 – 2011-12-27 02:53:45
这是没有什么用Django运行的用户来完成。 MySQL服务器需要能够写入其临时目录。你可以通过创建一个临时表(例如CREATE TEMPORARY TABLE t(i int);)来从mysql命令行轻松地测试这个问题: – MarkR 2011-12-27 08:07:11
我无法创建临时表,在MySQL提示符下尝试了这一点mysql> CREATE TEMPORARY TABLE t(i INT); 错误1005(HY000):无法创建表't'(errno:13) – 2011-12-27 11:52:34
'errno 13'是我的机器上的'EACCESS'(权限被拒绝)。你确定你已经设置了权限,所以用户Django运行的可以写入文件,而不仅仅是你? – 2011-12-26 06:18:46
当我尝试和抢6000行或更少,它的作品。所以我猜的权限是好的 – 2011-12-26 06:20:32
这可能是因为MySQL客户端只需要创建一个临时文件,当你抓取超过6000行... – 2011-12-26 06:23:21