Article ID: 119334, created on Jan 14, 2014, last review on May 11, 2014

  • Applies to:
  • Plesk for Linux/Unix

Sintomi

Questo articolo potrebbe essere utile quando si verificano i seguenti sintomi:

  • Avvio/Arresto di MySQL corretto quando è avviato/arrestato con il servizio di riavvio mysqld ma MySQL non si avvia quando un server viene riavviato
  • Dopo l'aggiornamento dei binari MySQL, mysqld non si avvia più.
  • Dopo aver riposizionato datadir di MySQL o dopo aver cambiato la porta predefinita, MySQL non si avvia più.

Per tutti i casi summenzionati, esiste un sintomo comune:

Impossibile avviare il servizio 'mysqld' con l'errore:

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

Causa

Il socket non è stato rimosso dopo l'arresto errato del servizio MySQL.

Soluzione

Esistono diversi casi di utilizzo comuni quando il file del socket non viene rimosso. Controlla i casi di utilizzo sotto e applica la soluzione adatta.

1. Permessi errati per la directory '/tmp'.

I permessi predefiniti su Centos 6.5 sono:

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

In '/var/log/mysqld.log' cerca i messaggi che puntano verso il problema dei permessi con '/tmp' nel sistema CentOS 6.5 che incide sull'avvio di 'mysqld'. Il problema '/tmp' può verificarsi con tutta probabilità a causa di un lavoro di manutenzione eseguito manualmente.

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

Quando mysqld è in corso di avvio, stabilisce /var/lib/mysql/mysql.sock, e poi si arresta in modo anomalo come conseguenza secondaria dell'errore precedente scrivendo su my /tmp e senza pulire /var/lib/mysql/mysql.sock.

Dopo aver risolto il problema relativo ai permessi su my /tmp, il riavvio del sistema CentOS risulta ora in una corretta esecuzione di MySQL dopo il riavvio di CentOS.

2. MySQL non si spegne correttamente.

Il servizio MySQL non si spegne correttamente durante il riavvio del sistema operativo e lascia il /var/lib/mysql/mysql.sock precedente in condizioni che evitano l'avvio di mysqld. Alcuni utenti sono riusciti a riprodurre questo errore su un sistema virtuale guest CentOS 6.5 KVM riavviando il sistema CentOS 6.5 host. CentOS dovrebbe spegnere i sistemi guest senza problemi, ma sembra che non riesca nel caso di mysqld.

Bug di Red Hat Linux 6.5 confermato - https://bugzilla.redhat.com/show_bug.cgi?id=1037650

Discussione sul problema relativo al tracker del bug di MySQL - http://bugs.mysql.com/bug.php?id=71086

Passaggi semplici per riprodurre il problema:

service mysqld start
killall -9 mysqld_safe mysqld
service mysqld start

Una possibile soluzione alternativa al problema è quella di modificare lo script '/etc/init.d/mysqld':

Nota! Non applicare questa soluzione se non si è sicuri che sia il proprio 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" ] ; Un altro demone MySQL è già in esecuzione con lo stesso socket unix.
+           action $"Starting $prog: " /bin/false
-           return 1
-       fi

3. SELinux policy.

Innanzitutto controlla il registro '/var/log/mysqld.log' per trovare errori simili:

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

Se si è certi che i permessi sulla directory '/var/lib/myaql' sono corretti, controllare '/var/log/audit/audit.log'. Potrebbe contenere messaggi simili che puntano su problemi relativi a 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
    ...

Per applicare i nuovi criteri, è possibile consentire che MySQL usi la directory '/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 

Per avviare il servizio mysql è possibile rimuovere '/var/lib/mysql/mysql.sock' e avviare il servizio mysql nuovamente:

  1. Rimuovere il file di socket:

    [root@server ~]# rm /var/lib/mysql/mysql.sock
    rm: Per avviare il servizio mysql è possibile rimuovere '/var/lib/mysql/mysql.sock' e avviare il servizio mysql nuovamente: YES)
    
  2. Avviare il servizio MySQL:

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

a914db3fdc7a53ddcfd1b2db8f5a1b9c 56797cefb1efc9130f7c48a7d1db0f0c 29d1e90fd304f01e6420fbe60f66f838

Email subscription for changes to this article
Save as PDF