Article ID: 119334, created on Mar 13, 2014, last review on Mar 25, 2015

  • Applies to:
  • Plesk for Linux/Unix

Symptômes

Cet article s'applique si vous rencontrez l'un des symptômes suivants :

  • MySQL s'arrête/démarre correctement lorsqu'il est démarré/arrêté avec le service de redémarrage mysqld. Cependant, MySQL ne démarre pas lorsqu'un serveur est rebooté.
  • Après la mise à niveau de MySQL, les fichiers binaires mysqld ne démarrent pas du tout.
  • Si l'emplacement du datadir MySQL ou si le port par défaut change, MySQL ne démarre pas.

Tous les cas ci-dessus ont un symptôme commun. Il est impossible de démarrer le service mysqld. L'erreur suivante se produit :

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

Cause

Lorsque le service MySQL s'est arrêté de façon incorrecte, le socket n'a pas été supprimé.

Résolution

Il y a plusieurs cas communs pour lesquels le fichier socket n'est pas supprimé. Vérifiez parmi les cas d'utilisation ci-dessous et appliquez la solution appropriée.

1. Droits incorrects pour le répertoire /tmp

Les droits par défaut sur CentOS 6.5 sont :

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

Vérifiez si le fichier de log /var/log/mysqld.log contient des messages qui signalent un problème de droits avec /tmp dans CentOS 6.5, ce qui affecte le démarrage de mysqld. Ce problème de /tmp est probablement dû à un travail de maintenance manuelle.

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

Lorsque mysqld démarre, il crée le fichier "var/lib/mysql/mysql.sock", puis crashe car une erreur d'écriture est inscrite dans /tmp et /var/lib/mysql/mysql.sock n'a pas été supprimé.

Une fois que vous avez résolu le problème de droits sur /tmp, lorsque vous rebootez CentOS, MySQL s'exécute correctement.

2. MySQL ne s'arrête pas normalement

Si le service MySQL ne s'arrête pas normalement pendant que l'OS reboote, l'ancien fichier "/var/lib/mysql/mysql.sock" reste. Cela empêche mysqld de démarrer. Certains utilisateurs peuvent reproduire cette erreur sur un système d'hôte virtuel KVM CentOS 6.5 en rebootant le système hôte CentOS 6.5. CentOS est censé arrêter normalement les systèmes invités. Toutefois, dans le cas de mysqld, cela semble échouer.

Bug Red Hat Linux 6.5 confirmé : https://bugzilla.redhat.com/show_bug.cgi?id=1037650

Discussion liée au problème sur l'outil de suivi de bug MySQL : http://bugs.mysql.com/bug.php?id=71086

Étapes simples pour reproduire ce problème :

service mysqld start
killall -9 mysqld_safe mysqld
service mysqld start

REMARQUE : il est inutile d'appliquer le patch manuellement depuis le lien du bug, étant donné que le pack corrigé a déjà été remis. Mettez simplement à jour le pack "mysql-server" :

yum -y update mysql-server

3. Politique SELinux

Dans le log /var/log/mysqld.log, vous trouverez des erreurs du type :

mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
...
[Warning] Can't create test file /var/lib/mysql/boxy.lower-test
[Warning] Can't create test file /var/lib/mysql/boxy.lower-test
...
[ERROR] /usr/sbin/mysqld: Can't create/write to file 
    '/var/lib/mysql/boxy.pid' (Errcode: 13 - Permission denied)
[ERROR] Can't start server: can't create PID file: 
    Permission denied
mysqld_safe mysqld from pid file /var/lib/mysql/boxy.pid ended

Si vous êtes sûr que les droits sur le répertoire /var/lib/myaql sont corrects, vérifiez le log /var/log/audit/audit.log. Il peut contenir des messages similaires qui pointent vers les problèmes 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
    ...

Pour appliquer la nouvelle politique, autorisez MySQL à utiliser le répertoire '/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 

Pour démarrer le service MySQL, vous pouvez supprimer /var/lib/mysql/mysql.sock et redémarrer le service MySQL :

  1. Supprimez le fichier socket :

    [root@server ~]# rm /var/lib/mysql/mysql.sock
    rm: remove socket `/var/lib/mysql/mysql.sock'? yes
    
  2. Démarrez le service MySQL :

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

a914db3fdc7a53ddcfd1b2db8f5a1b9c 56797cefb1efc9130f7c48a7d1db0f0c 29d1e90fd304f01e6420fbe60f66f838

Email subscription for changes to this article
Save as PDF