Mysql 无法创建/写入文件错误#13

标签 mysql django mysql-error-1064 mysql-python

我创建了一个 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/

相关文章:

mysql - Php PDO MySQL 表连接

MYSQL CTE 递归更新

mysql - 使用 MySQL IN(),其中被比较的列有多个值

mysql - HeidiSql - 不断收到错误 1064

MySQL查询错误1064(语法错误)

mysql - 使用 GROUP_CONCAT 来自 MySQL 的复杂查询

django - 如何获取小数字段以在模板中显示更多小数位?

django检查模板中的当前URL是否包含特定单词

django - 创建常规电子邮件

mysql - 触发器中的多个命令(更新具有不同条件的多个列)