J'ai installé le serveur MySQL 5.5 sur Ubuntu 12.04. J'essaie de démarrer le serveur MySQL sur un fichier de chaussette différent. Par défaut, MySQL est exécuté sur /var/run/mysqld/mysqld.sock.
J'essaie d'exécuter le même serveur sur /var/run/mysqld/mysqld1.sock.
Pour cela, j'ai apporté les modifications suivantes:
[client] port = 3306 socket = /var/run/mysqld/mysqld1.sock[.____._rev .mysqld_safe] socket = /var/run/mysqld/mysqld1.sock Nice = 0 [mysqld] utilisateur = mysql pid-file = /var/run/mysqld/mysqld.pid ** socket = /var/run/mysqld/mysqld1.sock** port = 3306 basedir =/usr datadir = /var/lib/mysql tmpdir = /tmp lc-messages-dir = /usr/share/mysql
J'ai aussi ajouté la ligne suivante à /etc/apparmor.d/usr/sbin.mysqld
/var/run/mysqld/mysqld1.sock w,
/var/run/mysqld/mysqld[1-9].sock w,
J'ai également changé la propriété du répertoire/var/run/mysqld en utilisateur mysql.
ls -lA/var/run/| grep mysqld
drwxrwxrwx 2 mysql mysql 40 déc 31 17:24 mysqld
Cependant, lorsque j'essaie de démarrer le serveur MySQL, le message d'erreur suivant s'affiche (en tant qu'utilisateur root)
$ mysqld --user = mysql --verbose 121231 18:40:56 [Note] Le plug-in 'FEDERATED' est désactivé. 121231 18:40:56 InnoDB: Le La mémoire de mémoire InnoDB est désactivée 121231 18:40:56 InnoDB: les mutex et les rw_locks utilisent les commandes intégrées à GCC 121231 18:40:56 InnoDB: les tables compressées utilisent zlib 1.2.3.4 . 121231 18:40:56 InnoDB: initialisation du pool de mémoire tampon, taille = 128,0 M 121231 18:40:56 InnoDB: initialisation terminée du pool de mémoire tampon 121231 18:40:56 InnoDB: fichier pris en charge le plus élevé le format est Barracuda. 121231 18:40:57 InnoDB: En attente du démarrage des threads d’arrière-plan 121231 18:40:58 InnoDB: 1.1.8 commencé; numéro de séquence du journal 1595685 121231 18:40:58 [Remarque] nom d'hôte du serveur (adresse de liaison): '127.0.0.1'; port: 3306 121231 18:40:58 [Note] - "127.0.0.1" est remplacé par "127.0.0.1"; 121231 18:40:58 [Note] Le socket du serveur a été créé sur IP. : '127.0.0.1'. ** `121231 18:40:58 [ERREUR] Impossible de démarrer le serveur: liaison sous unix: autorisation refusée` ** 121231 18:40:58 [ERREUR] Avez-vous déjà un autre serveur mysqld fonctionnant sur le socket: /Var/run/mysqld/mysqld1.sock? 121231 18:40:58 [ERREUR] Abandon ** 121231 18:40:58 InnoDB: Début de l’arrêt ... 121231 18:40:58 InnoDB: Fermeture terminée; numéro de séquence du journal 1595685 121231 18:40:58 [Note] mysqld: L'arrêt est terminé
Si je démarre le serveur avec le fichier de socket par défaut, je peux le démarrer. J'ai googlé sur ce problème mais je n'ai trouvé que des solutions suggérant qu'il s'agisse d'un problème d'autorisations. Cependant, les autorisations semblent bonnes. Certains ont suggéré qu'AppArmor pourrait être une cause, mais j'ai vérifié cela aussi: l'extrait de code est collé ci-dessus.
Quelqu'un peut-il fournir des indices?
[MODIFIER]
Je vois la sortie suivante dans /var/log/syslog
.
Jan 2 12:09:34 praveshp-lt mysqld: 130102 12:09:34 [Note] Le plug-in 'FEDERATED' est désactivé. 2 jan 12:09:34 praveshp-lt mysqld: 130102 12:09: 34 InnoDB: Le tas de mémoire InnoDB est désactivé 2 janvier 12:09:34 praveshp-lt mysqld: 130102 12:09:34 InnoDB: Mutexes et rw_locks utilisent les constructions atomiques GCC . 2 janvier 12: 09:34 praveshp-lt mysqld: 130102 12:09:34 InnoDB: les tables compressées utilisent zlib 1.2.3.4 2 jan 12:09:34 praveshp-lt mysqld: 130102 12:09:34 InnoDB: initialisation du tampon pool, size = 128.0M 2 janv. 12:09:34 praveshp-lt mysqld: 130102 12:09:34 InnoDB: L'initialisation du pool de mémoire tampon est terminée 2 janv. 12:09:34 praveshp- lt mysqld: 130102 12:09:34 InnoDB: le format de fichier le plus pris en charge est Barracuda. 2 janvier 12:09:35 praveshp-lt mysqld: 130102 12:09:35 InnoDB: en attente du fond d'écran 2 janvier 12:09:36 praveshp-lt mysqld: 130102 12:09:36 InnoDB: 1.1.8 commencé; numéro de séquence du journal 1595685 2 janv. 12:09:36 praveshp-lt mysqld: 130102 12:09:36 [Note] nom d’hôte du serveur (adresse de rattachement): '127.0.0.1'; port: 3307 2 janv. 12:09:36 praveshp-lt mysqld: 130102 12:09:36 [Note] - "127.0.0.1" devient "127.0.0.1"; 2 janv. 12:09:36 praveshp-lt mysqld: 130102 12:09:36 [Note] Le socket du serveur a été créé sur l'adresse IP: '127.0.0.1'. 2 janvier 12:09:36 praveshp-lt mysqld: 130102 12 : 09: 36 [ERREUR] Impossible de démarrer le serveur: Lier sur une socket Unix: Autorisation refusée 2 janvier 12:09:36 praveshp-lt mysqld: 130102 12:09:36 [ERREUR] Avez-vous déjà un autre serveur mysqld fonctionnant sur le socket: /var/run/mysqld/mysqld1.sock? 2 janvier 12:09:36 praveshp-lt mysqld: 130102 12:09:36 [ERREUR] Abandonner 2 janvier 12:09:36 praveshp-lt mysqld: 2 janvier 12:09:36 praveshp-lt mysqld: 130102 12:09:36 InnoDB: Démarrage de l'arrêt ... 2 janvier 12 : 09: 36 noyau praveshp-lt: [7060.098580] type = 1400 audit (1357108776.036: 33): apparmor = "DENIED" operation = "mknod" parent = 6702 profil = "/ usr/sbin/mysqld" name = "/ run /mysqld/mysqld1.sock "pid = 7039 comm =" mysqld "m_mask demandé =" c "denied_mask =" c "fsuid = 116 ouid = 116 2 janvier 12:09:36 praveshp-lt mysqld: 130102 12:09:36 InnoDB: L'arrêt est terminé; numéro de séquence du journal 1595685 2 janvier 12:09:36 praveshp-lt mysqld: 130102 12:09:36 [Note]/usr/sbin/mysqld: Arrêt complet
Il dit permission refusée, mais il me semble avoir défini les bonnes autorisations.
En regardant cette ligne dans la ligne suivante du journal, il apparaît que Apparmor refuse l'accès.
Jan 2 12:09:36 praveshp-lt kernel: [ 7060.098580] type=1400 audit(1357108776.036:33):
apparmor="DENIED" operation="mknod" parent=6702 profile="/usr/sbin/mysqld"
name="/run/mysqld/mysqld1.sock" pid=7039 comm="mysqld" requested_mask="c"
denied_mask="c" fsuid=116 ouid=116
Pour permettre cela, ajoutez un fichier /etc/apparmor.d/local/usr.sbin.mysqld
avec l'entrée ci-dessous et redémarrez MySQL.
/var/run/mysqld/mysqld1.sock w,
Merci à Rinzwind pour l'avoir signalé.