我创建了一个 Django View ,它在从 MySql DB 读取后返回一些数据。当我尝试从数据库中获取大约 6000 行时,一切正常并且 View 按预期返回 HttpResponse。但是当我尝试获取7000 多行我收到以下错误
(1, "Can't create/write to file '/home/nipun/mysql_temp/MYzplJok' (Errcode: 13)")
早些时候我认为错误可能是由于/temp 空间耗尽,所以我更改了 my.cnf 中的 tempdir 设置
我还通过更改所有权确保我可以写入新的 tmpdir/home/nipun/mysql_temp 及其父目录。
虽然这不是 Django 问题,但这里是 View
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使用的临时文件夹的权限问题。
你可以在 /etc/mysql/my.cnf
的配置文件中找到 Mysql 用于临时操作的文件夹,如下所示:
tmpdir = /tmp
如您所见,默认使用的临时文件夹是“/tmp”。
权限应该是:
drwxrwxrwt 9 root root 4096 oct. 24 15:39 tmp/
所以任何人,包括“mysql”用户,都可以使用它。 如果设置不正确,以下命令可以解决问题:
chmod 0777 /tmp
希望对您有所帮助!
关于Mysql 无法创建/写入文件错误#13,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8633373/