Mysql no pudo escribir en / tmp y luego no pudo reiniciar

11

Estaba ejecutando el orthomclprograma que usa mysql. Este programa ha funcionado bien en la misma computadora antes. Esta vez tuve un mensaje de error.

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.

Traté de reiniciar el mysqlservidor, el servidor se apagó pero no se pudo iniciar.

sudo service mysql start
start: Job failed to start

/var/log/mysql/error.logy /var/log/mysql.errestan vacios He intentado un par de cosas que he encontrado aquí, incluyendo la purga y volver a instalar mysql-servery quitar ib_logfile*en /var/lib/mysql.

La otra cosa que probé es

sudo dpkg-reconfigure mysql-server-5.5

Los mensajes de error son:

/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

Aquí hay alguna información 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

Había muchas muchas líneas como esta.

¿Alguien podría ayudarme a descubrir qué le pasa a mi servidor MySQL, por favor?

Muchas gracias.

usuario264649
fuente

Respuestas:

15

La razón de esto es que sus /tmpes un enlace simbólico a otro lugar, /home/tmp. Pero MySQL está blindado por AppArmor, que no permite escribir libremente /home/tmp. Para remediar la situación, puede editar el /etc/apparmor.d/abstractions/user-tmpy agregar el /home/tmpallí adecuadamente; para mi las lineas extra

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

Hizo el truco.

Antti Haapala
fuente
1
¡Perfecto! Resolvió el problema de inmediato. ¡Estaba seguro de que tenía algo que ver con el enlace simbólico!
YonoRan
1
Tuve que reiniciar aparmor para que los cambios surtan efecto:sudo /etc/init.d/apparmor restart
Nadjib Mami
6

Parece que no tienes los permisos correctos /tmp, lo que debería poder escribirse en todo el mundo. Debería poder solucionarlo con este comando:

sudo chmod 1777 /tmp

Eso establecerá los permisos en 777(rwx para todos) y también establecerá el bit adhesivo que se recomienda para el /tmpdirectorio. Como se explica en man chmod:

BANDERA DE ELIMINACIÓN RESTRINGIDA O PICADA

El indicador de eliminación restringida o bit fijo es un bit único, cuya interpretación depende del tipo de archivo. Para los directorios, evita que los usuarios no privilegiados eliminen o cambien el nombre de un archivo en el directorio a menos que sean dueños del archivo o del directorio; Esto se llama la marca de eliminación restringida para el directorio, y se encuentra comúnmente en directorios de escritura mundial como / tmp. Para archivos regulares en algunos sistemas más antiguos, el bit guarda la imagen de texto del programa en el dispositivo de intercambio para que se cargue más rápidamente cuando se ejecuta; esto se llama la parte adhesiva.

terdon
fuente
@ScottSeverance, no cambie el código a comillas solo por cambiar. Sí, sé que estaba citando, pero el bloque de código proporciona un mejor formato y respeta el encabezado y la sangría. La forma en que lo editó, todo está en la misma línea.
terdon
1
Lo cambié porque cuando está formateado como código no puedo leerlo en mi teléfono sin un desplazamiento horizontal constante. Realmente no hay ningún beneficio al formatear una cotización como código. Si no le gusta que el encabezado esté en la misma línea, hay formas de arreglarlo sin romper las pantallas de los usuarios en los teléfonos.
Scott Severance
@ScottSeverance ah, bastante justo, no me había dado cuenta de que causaba problemas en los teléfonos. OK, lo pondré en un bloque de cotizaciones entonces. Simplemente me molestó porque su edición (sin explicación) se ve peor en los navegadores normales y no verificó que se procesa correctamente. Y acabas de editar de nuevo y es perfecto, ¡gracias!
terdon
1
La mía es la solución correcta. Mysql aparece y no le gusta /tmpque lo trasladen a otra ubicación sin cambiar las confs. Las auditorías dicen que no se trata de permisos denegados en el sistema de archivos, sino de los guardias de la aparición.
Antti Haapala