Mysql ne Peut pas créer/écrire dans un fichier d'erreur#13
J'avais créé un Django point de vue qui est la restitution d'une partie des données après lecture à partir de bases de données MySql.Quand je l'ai essayer et de chercher autour de 6000 lignes de la Base de données,tout fonctionne bien et la vue renvoie HttpResponse comme c'est prévu.Cependant, comme j'essaie de récupérer plus de 7000 lignes j'obtiens l'erreur suivante
(1, "Can't create/write to file '/home/nipun/mysql_temp/MYzplJok' (Errcode: 13)")
Plus tôt, j'ai pensé que l'erreur peut être due à l'espace s'épuiser pour /temp,j'ai donc changé le tempdir paramètre dans mon.cnf
J'ai également veillé à ce que les nouveaux tmpdir /home/nipun/mysql_temp et c'est parent sont les répertoires accessibles en écriture par moi par la modification de la propriété.
Bien que ce n'est pas un Django problème,ici, c'est le point de vue
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")
Donc dans le remplacement des filtres à 9000 6000 fonctionne très bien.
Plus d'informations sur l'erreur est fourni dans le Django trace de la pile
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)"))
MODIFIER
Comme par un commentaire, j'ai essayé sur mon invite MySQL
mysql> CREATE TEMPORARY TABLE t (i int);
ERROR 1005 (HY000): Can't create table 't' (errno: 13)
Donc, essentiellement, il est maintenant question de comment permettre à MySQL pour écrire dans le répertoire temporaire
errno 13
est EACCESS
(permission denied) sur ma machine. Êtes-vous sûr que vous avez défini les autorisations de sorte que l'utilisateur Django fonctionne comme peut écrire le fichier, pas seulement vous?Lorsque j'essaie de l'attraper 6000 lignes ou moins,il fonctionne.Donc je suppose que les autorisations sont beaux
Que pourrait être parce que le client MySQL n'a qu'à créer un fichier temporaire lorsque vous êtes saisissant plus de 6000 lignes...
Donc, j'ai aussi maintenant fait un chmod 777 sur /home et ses sous-dossiers,notamment sur le tmpdir.Obtiens toujours la même erreur
OriginalL'auteur Nipun Batra | 2011-12-26
Vous devez vous connecter pour publier un commentaire.
C'est probablement un problème d'autorisation pour le dossier temporaire utilisé par Mysql.
Vous pouvez trouver le dossier utilisé par Mysql pour le temp des opérations dans le fichier de config dans
/etc/mysql/my.cnf
en tant que tel :Comme vous pouvez le voir, le dossier temporaire par défaut est "/tmp".
Privilèges devrait être :
Donc n'importe qui, y compris le "mysql" de l'utilisateur, peuvent l'utiliser.
Si pas correctement, la commande suivante serait de faire le tour :
Espérons que cette aide !
/home/nipun/mysql_temp
.en général, il devrait en fait être
chmod 1777 /tmp
(1 définit les "collants" bits)sur la plupart des modernes distro sticky bit est pas honoré 🙂
OriginalL'auteur user1771398
Vous avez configuré mysql tmpdir pour pointer vers un répertoire du serveur n'a pas l'autorisation d'écrire à.
Pour les petites filesorts, MySQL utilise un tampon en mémoire, mais pour les plus grands utilise les fichiers sur le disque (dans le tmpdir).
En tout cas, c'est un sysadmin erreur (pas une erreur de programmation) réglage de l'MySQL tmpdir pour pointer vers un unwritable répertoire.
Il n'en est rien à faire avec l'utilisateur qui Django. Le serveur MySQL doit être en mesure d'écrire dans son répertoire temporaire. Vous pouvez le tester facilement à partir de la ligne de commande de mysql par la création d'une table temporaire (par exemple, CREATE TEMPORARY TABLE t (i int); )
Je ne suis pas en mesure de créer des tables temporaires,essayé ce invite MySQL mysql> CREATE TEMPORARY TABLE t (i int); ERREUR 1005 (HY000): ne Peut pas créer la table 't' (errno: 13)
OriginalL'auteur MarkR
Essayer de donner utilisateur mysql accès à l'annuaire via la commande ci-dessous:
chown -R mysql:mysql /home/nipun/mysql_temp/
Cela a fonctionné pour moi (:
OriginalL'auteur Walk
Si après avoir donné nécessaires autorisations d'écriture de la nouvelle tmpdir vous rencontrez toujours le même message d'erreur et mysql ne peut donc pas démarrer - vous pourriez avoir AppArmor activé. Donc, ne :
sudo vim /etc/apparmor.d/local/usr.sbin.mysqld
Bien sûr, vous pouvez utiliser n'importe quel éditeur de texte autre que vim par exemple nano. Notez que
usr.sbin.mysqld
à la fin correspond à ce que vous obtenez en faisantwhich mysql
ouwhich mysqld
(avec/
remplacé par.
). Lorsque le fichier est ouvert, vous allez voir quelques commentaires au sommet, comme :Puis le mettre après ces commentaires :
Puis faire :
sudo service apparmor reload
. Maintenant, essayez de démarrer mysql :sudo service mysql start
et vous devriez être bon d'aller.OriginalL'auteur LanreSmith