mysqld da errorcode:13 porque no puede crear archivos de prueba

mysqld da errorcode:13 porque no puede crear archivos de prueba

Nueva instalación del 11.04. Luego seguí todas las instrucciones aquí: http://www.howtoforge.com/installing-apache2-with-php5-and-mysql-support-on-ubuntu-11.04-lamp

Ahora cuando ejecuto mysqld me sale este error:

makara@rahu:~$ mysqld
111103 13:39:37 [Warning] Can't create test file /var/lib/mysql/rahu.lower-test
111103 13:39:37 [Warning] Can't create test file /var/lib/mysql/rahu.lower-test
mysqld: Can't change dir to '/var/lib/mysql/' (Errcode: 13)
111103 13:39:37 [ERROR] Aborting
111103 13:39:37 [Note] mysqld: Shutdown complete

¿Alguien en IRC dijo que podría ser un problema con el paquete?

gracias remolacha

Respuesta1

Me encontré con el mismo problema después de la actualización de Oneiric a Precise, que actualiza MySQL de 5.1 a 5.5.

En mi caso el problema fue que

/etc/apparmor.d/local/usr.sbin.mysqld

faltaba, a pesar de que estaba incluido desde

/etc/apparmor.d/usr.sbin.mysqld

por defecto. Un simple

sudo touch /etc/apparmor.d/local/usr.sbin.mysqld

resolvió el problema para mí.

Para aquellos que buscan: el archivo de registro que contiene información interesante es /var/log/upstart/mysql. No habrá nada en /var/log/mysql(*|/*)

Lo que ve puede incluir:

  • sudo service mysql startresultados en

    inicio: el trabajo no pudo iniciarse

  • Intentar iniciar manualmente mysqldcomo usuario normal fallará como de costumbre (antes de que entre en juego el problema anterior), porque el usuario no tiene acceso a /var/lib/mysql (esto se puede encontrar en el syslog).

  • Iniciar mysqld como root tendrá éxito (no sé por qué)

Respuesta2

mysqld debe ejecutarse como usuario mysql. No debes ejecutar el demonio manualmente. Mejor iniciarlo como un servicio como este:

sudo service mysql start

El mensaje de error señala que el servicio mysql no puede acceder a ciertos archivos a los que no se le debe permitir acceder en su entorno de usuario. Entonces este comportamiento debería ser correcto. Sin embargo, debe verificar si los directorios existen y quién es su propietario y quién tiene acceso a ellos (use ls -la para este propósito):

ls -la  /var/lib/
ls -la  /var/lib/mysql

información relacionada