Article ID: 119334, created on Mar 14, 2014, last review on Oct 28, 2014

  • Applies to:
  • Plesk for Linux/Unix

Síntomas

Este artículo le resultará de utilidad si experimenta cualquiera de los siguientes síntomas:

  • MySQL se inicia o se detiene correctamente cuando se inicia o se detiene con el servicio mysqld restart, pero MySQL no se inicia cuando se reinicia un servidor.
  • Tras actualizar MySQL, los ejecutables mysqld no se inician
  • Tras reubicar el datadir de MySQL o modificar el puerto predeterminado, MySQL no se inicia

Todos estos casos presentan un síntoma en común: la imposibilidad de iniciar el servicio 'mysqld' debido al siguiente error:

[root@server ~]# /etc/init.d/mysqld start
Another MySQL daemon already running with the same unix socket.
Starting mysqld:                                           [FAILED]

Causa

El socket no fue eliminado tras una detención incorrecta del servicio MySQL.

Resolución

Existen distintos casos en los que el archivo del socket no es eliminado. Examine los casos que se detallan a continuación para determinar cuál es la solución que debe aplicar en su caso.

1. Permisos incorrectos para el directorio '/tmp'

Los permisos predeterminados en Centos 6.5 son los siguientes:

    ls -ld /tmp
    drwxrwxrwt 3 root root 16384 Dec 23 17:32 /tmp

Compruebe '/var/log/mysqld.log' para determinar la existencia de mensajes que indiquen un problema relacionado con los permisos de '/tmp' en CentOS 6.5, ya que esto afectará al inicio de 'mysqld'. Probablemente este problema de '/tmp' se debe a la realización manual de tareas de mantenimiento.

131207 21:15:47 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
/usr/libexec/mysqld: Can't create/write to file '/tmp/ib0h0Wt3' (Errcode: 13)
131207 21:15:47  InnoDB: Error: unable to create temporary file; errno: 13
131207 21:15:47 [ERROR] Plugin 'InnoDB' init function returned error.
131207 21:15:47 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
131207 21:15:47 [Note] Event Scheduler: Loaded 0 events
131207 21:15:47 [Note] /usr/libexec/mysqld: ready for connections.
version: '5.1.71'  socket: '/var/lib/mysql/mysql.sock'  port: 3306  Source distribution

Cuando se está iniciando mysqld, este establece /var/lib/mysql/mysql.sock y a continuación se bloquea como resultado del error previo al escribir en /tmp y del hecho de que /var/lib/mysql/mysql.sock no fuera eliminado.

Tras resolver el problema de permisos en /tmp y reiniciar CentOS, MySQl funcionará correctamente.

2. MySQL no se apaga correctamente

Si el servicio MySQL no se apaga correctamente durante el reinicio del SO, se mantiene el /var/lib/mysql/mysql.sock anterior. Esto impide el inicio de mysqld. Algunos usuarios no pudieron reproducir este error en un sistema virtual huésped CentOS 6.5 KVM a través del reinicio del sistema CentOS 6.5 host. Si bien CentOS debería poder apagar correctamente los sistemas huéspedes, parece experimentar problemas en el caso de mysqld.

Error confirmado de Red Hat Linux 6.5 − https://bugzilla.redhat.com/show_bug.cgi?id=1037650

Debate sobre el problema en el rastreador de errores de MySQL − http://bugs.mysql.com/bug.php?id=71086

Pasos a realizar para reproducir esta incidencia:

service mysqld start
killall -9 mysqld_safe mysqld
service mysqld start

Una posible solución temporal para esta incidencia es modificar el script '/etc/init.d/mysqld':

¡Importante! No aplique esta solución temporal si no está totalmente seguro de que es aplicable en su caso.

cp -p /etc/init.d/mysqld /etc/init.d/mysqld.orig
diff -c /etc/init.d/mysqld.orig /etc/init.d/mysqld

+       # We check if there is already a process using the socket file,
+       # since otherwise this init script could report false positive
+       # result and mysqld_safe would remove the socket file, which
+       # actually uses a different daemon.
+       if fuser "$socketfile" &>/dev/null ; then
+           echo "Socket file $socketfile exists. Is another MySQL daemon already running with the same unix socket?"
+           action $"Starting $prog: " /bin/false
+           return 1
+       fi

-       if [ -S "$socketfile" ] ; then
-           echo "Another MySQL daemon already running with the same unix socket."
-           action $"Starting $prog: " /bin/false
-           return 1
-       fi

3. Directiva de SELinux

Compruebe el registro '/var/log/mysqld.log' para determinar la existencia de errores como los siguientes:

130321 11:50:51 mysqld_safe Starting mysqld daemon with databases from /var/lib/myaql
...
2013-03-21 11:50:52 2119 [Warning] Can't create test file /var/lib/myaql/boxy.lower-test
2013-03-21 11:50:52 2119 [Warning] Can't create test file /var/lib/myaql/boxy.lower-test
...
2013-03-21 11:50:52 2119 [ERROR] /usr/sbin/mysqld: Can't create/write to file 
    '/var/lib/myaql/boxy.pid' (Errcode: 13 - Permission denied)
2013-03-21 11:50:52 2119 [ERROR] Can't start server: can't create PID file: 
    Permission denied
130321 11:50:52 mysqld_safe mysqld from pid file /var/lib/myaql/boxy.pid ended

Si está seguro de que los permisos sobre el directorio '/var/lib/myaql' son correctos, examine '/var/log/audit/audit.log'. Este puede contener mensajes similares que denoten incidencias con Selinux:

    ...
    type=AVC msg=audit(1363866652.030:24): avc:  denied  { write } for  pid=2119 
        comm="mysqld" name="/var/lib/myaql" dev=dm-0 ino=394 
        scontext=unconfined_u:system_r:mysqld_t:s0 
        tcontext=unconfined_u:object_r:default_t:s0 tclass=dir
    ...

Para aplicar la nueva directiva, permita a MySQL hacer uso del directorio '/var/lib/myaql':

semanage fcontext -a -t mysqld_db_t "/datadir(/.*)?"
restorecon -Rv /var/lib/myaql
    restorecon reset /var/lib/myaql context 
       unconfined_u:object_r:default_t:s0->unconfined_u:object_r:mysqld_db_t:s0
    restorecon reset /var/lib/myaql/mysql.sock context 
       system_u:object_r:mysqld_var_run_t:s0->system_u:object_r:mysqld_db_t:s0 

Para iniciar el servicio mysql, puede eliminar '/var/lib/mysql/mysql.sock' y volver a iniciar el servicio mysql:

  1. Elimine el archivo del socket:

    [root@server ~]# rm /var/lib/mysql/mysql.sock
    rm: remove socket `/var/lib/mysql/mysql.sock'? sí
    
  2. Inicie el servicio MySQL:

    [root@server~]# service mysqld start
    Starting mysqld:                                           [  OK  ]
    

a914db3fdc7a53ddcfd1b2db8f5a1b9c 56797cefb1efc9130f7c48a7d1db0f0c 29d1e90fd304f01e6420fbe60f66f838

Email subscription for changes to this article
Save as PDF