web-dev-qa-db-fra.com

Mysql n'a pas pu écrire dans / tmp puis n'a pas pu redémarrer

J'exécutais le programme orthomcl qui utilise mysql. Ce programme a très bien fonctionné sur le même ordinateur auparavant. Cette fois, j'ai eu un message d'erreur.

DBD::mysql::st execute failed: Can't create/write to file '/tmp/#sql_700_1.MYI' (Errcode: 13) at /usr/local/bioinf/orthomclSoftware-v2.0.9/bin/orthomclPairs line 709, <F> line 14.

J'ai essayé de redémarrer le serveur mysql, le serveur s'est éteint mais n'a pas pu démarrer.

Sudo service mysql start
start: Job failed to start

/var/log/mysql/error.log et /var/log/mysql.err sont vides. J'ai essayé quelques solutions que j'ai trouvées ici, notamment la purge et la réinstallation de mysql-server et la suppression de ib_logfile* dans /var/lib/mysql.

L'autre chose que j'ai essayée est

Sudo dpkg-reconfigure mysql-server-5.5

Les messages d'erreur sont:

/usr/sbin/mysqld: Can't create/write to file '/tmp/ibNzqwO0' (Errcode: 13)
InnoDB: Error: unable to create temporary file; errno: 13
[ERROR] Plugin 'InnoDB' init function returned error.
[ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
[ERROR] Unknown/unsupported storage engine: InnoDB
[ERROR] Aborting

Voici quelques informations de dmesg | grep mysql:

[3115187.338273] init: mysql main process (44255) terminated with status 1
[3115187.338417] init: mysql main process ended, respawning
[3115187.356361] init: mysql post-start process (44256) terminated with status 1
[3116827.473256] type=1400 audit(1396394069.224:132): apparmor="DENIED" operation="open" parent=45387 profile="/usr/sbin/mysqld" name="/home/tmp/" pid=45396 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=0 ouid=0
[3116827.582489] type=1400 audit(1396394069.332:133): apparmor="DENIED" operation="mknod" parent=45387 profile="/usr/sbin/mysqld" name="/home/tmp/#sql_b154_0.MYI" pid=45402 comm="mysqld" requested_mask="c" denied_mask="c" fsuid=0 ouid=0
[3116827.908448] type=1400 audit(1396394069.660:134): apparmor="DENIED" operation="mknod" parent=45317 profile="/usr/sbin/mysqld" name="/home/tmp/ibbPfaqP" pid=45415 comm="mysqld" requested_mask="c" denied_mask="c" fsuid=118 ouid=118
[3116841.623608] type=1400 audit(1396394083.372:139): apparmor="STATUS" operation="profile_replace" name="/usr/sbin/mysqld" pid=45443 comm="apparmor_parser"
[3116841.771621] init: mysql pre-start process (45474) terminated with status 1

Il y avait beaucoup de lignes comme celle-ci.

Quelqu'un pourrait-il m'aider à comprendre ce qui ne va pas avec mon serveur MySQL, s'il vous plaît?

Merci beaucoup.

11
user264649

La raison en est que votre /tmp est lié de manière symbolique à un autre emplacement, /home/tmp. Mais MySQL est blindé par AppArmor, qui ne permet pas d’écrire librement sur /home/tmp. Pour remédier à cette situation, vous pouvez éditer le /etc/apparmor.d/abstractions/user-tmp et y ajouter le /home/tmp de manière appropriée. pour moi les lignes supplémentaires

  owner /home/tmp/**    rwkl,
  /home/tmp/            rw,

a fait le tour.

15
Antti Haapala

On dirait que vous n'avez pas les bonnes autorisations sur /tmp, qui devrait être accessible en écriture pour le monde entier. Vous devriez pouvoir le réparer avec cette commande:

Sudo chmod 1777 /tmp

Cela définira les autorisations sur 777 (rwx pour tout le monde) et définira également le bit sticky recommandé pour le répertoire /tmp. Comme expliqué dans man chmod:

DRAPEAU DE SUPPRESSION RESTRICTED OR MIT STICKY

L'indicateur de suppression restreinte ou bit collant est un bit unique, dont l'interprétation dépend du type de fichier. Pour les répertoires, cela empêche les utilisateurs non privilégiés de supprimer ou de renommer un fichier du répertoire sauf s'ils sont propriétaires du fichier ou du répertoire; c'est ce qu'on appelle l'indicateur de suppression restreinte pour le répertoire. On le trouve couramment dans les répertoires en écriture pour le monde tels que/tmp. Pour les fichiers normaux sur des systèmes plus anciens, le bit enregistre l'image texte du programme sur le périphérique d'échange afin qu'il se charge plus rapidement à l'exécution. c'est ce qu'on appelle le bit collant.

6
terdon