Impossible de démarrer le serveur MySQL si le fichier .sock est modifié dans /etc/mysql/my.cnf


8

J'ai installé le serveur MySQL 5.5 sur Ubuntu 12.04. J'essaie de démarrer le serveur MySQL sur un autre fichier de chaussettes. Par défaut, MySQL s'exécute 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:

  1. Modifications apportées à /etc/mysql/my.cnf
[client]
    port = 3306
    socket = /var/run/mysqld/mysqld1.sock

[mysqld_safe]
    socket = /var/run/mysqld/mysqld1.sock
    gentil = 0

[mysqld]
    user = mysql
    fichier pid = /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
  1. J'ai également ajouté la ligne suivante à /etc/apparmor.d/usr/sbin.mysqld

    /var/run/mysqld/mysqld1.sock w,

    /var/run/mysqld/mysqld[1-9{.sock w,

  2. 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, j'obtiens l'erreur suivante (en tant qu'utilisateur root)

    $ mysqld --user = mysql --verbose
    121231 18:40:56 [Note] Le plugin 'FEDERATED' est désactivé.
    121231 18:40:56 InnoDB: le tas de mémoire InnoDB est désactivé
    121231 18:40:56 InnoDB: les mutex et les rw_locks utilisent des buildins atomiques 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 tampons, taille = 128,0M
    121231 18:40:56 InnoDB: initialisation terminée du pool de tampons
    121231 18:40:56 InnoDB: le format de fichier pris en charge le plus élevé 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 démarré; 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 [Remarque] - '127.0.0.1' se résout en '127.0.0.1';
    121231 18:40:58 [Remarque] Socket de serveur créé sur IP: '127.0.0.1'.
   ** `121231 18:40:58 [ERREUR] Impossible de démarrer le serveur: liaison sur le socket Unix: autorisation refusée` **

    121231 18:40:58 [ERREUR] Avez-vous déjà un autre serveur mysqld fonctionnant sur socket: 
    /var/run/mysqld/mysqld1.sock?
    121231 18:40:58 [ERREUR] Abandon **
    121231 18:40:58 InnoDB: Démarrage de l'arrêt ...
    121231 18:40:58 InnoDB: arrêt terminé; numéro de séquence du journal 1595685
    121231 18:40:58 [Remarque] mysqld: arrêt terminé

Si je démarre le serveur avec le fichier socket par défaut, je peux démarrer le serveur. J'ai cherché sur ce problème sur Google, mais je n'ai trouvé que des solutions suggérant qu'il s'agissait d'un problème d'autorisations. Cependant, les autorisations semblent bonnes. Certains ont suggéré que AppArmor pourrait être une cause, mais je l'ai vérifié aussi - l'extrait est collé ci-dessus.

Quelqu'un peut-il fournir des indices?

[ÉDITER]

Je vois la sortie suivante dans /var/log/syslog.

2 janvier 12:09:34 praveshp-lt mysqld: 130102 12:09:34 [Note] Le plugin 'FEDERATED' est désactivé.
2 janvier 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: les mutex et les rw_locks utilisent les fonctions intégrées 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 janvier 12:09:34 praveshp-lt mysqld: 130102 12:09:34 InnoDB: Initialisation du pool de tampons, taille = 128.0M
2 janvier 12:09:34 praveshp-lt mysqld: 130102 12:09:34 InnoDB: initialisation terminée du pool de tampons
2 janvier 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 démarrage des threads d'arrière-plan
2 janvier 12:09:36 praveshp-lt mysqld: 130102 12:09:36 InnoDB: 1.1.8 démarré; numéro de séquence du journal 1595685
2 janvier 12:09:36 praveshp-lt mysqld: 130102 12:09:36 [Remarque] Nom d'hôte du serveur (adresse de liaison): '127.0.0.1'; port: 3307
2 janvier 12:09:36 praveshp-lt mysqld: 130102 12:09:36 [Note] - '127.0.0.1' se résout en '127.0.0.1';
2 janvier 12:09:36 praveshp-lt mysqld: 130102 12:09:36 [Remarque] Socket de serveur créé sur IP: '127.0.0.1'.
2 janvier 12:09:36 praveshp-lt mysqld: 130102 12:09:36 [ERREUR] Impossible de démarrer le serveur: liaison sur 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] Abandon
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 = audit 1400 (1357108776.036: 33): apparmor = "REFUSÉ" opération = "mknod" parent = 6702 profil = "/ usr / sbin / mysqld" nom = "/run/mysqld/mysqld1.sock" pid = 7039 comm = "mysqld" demandé_mask = "c" refusé_mask = "c" fsuid = 116 ouid = 116
2 janvier 12:09:36 praveshp-lt mysqld: 130102 12:09:36 InnoDB: arrêt 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 terminé

Il dit que l'autorisation a été refusée, mais je semble avoir défini les bonnes autorisations.


1. Vérifiez les autorisations sur /usr/local/mysqlet /tmp. La nécessité d'être 775 au minimum. 2. L'autorisation pour le répertoire de base de données mysql sous le /var/lib/dossier devrait être mysql:root ( chown mysql:root mysql)
Rinzwind

1
J'ai vérifié les autorisations et elles semblent bien.
user117844

vérifiez également /etc/apparmor.d/usr.sbin.mysqldIl y a une comparaison entre l'ancienne et la nouvelle version ici: bugs.launchpad.net/ubuntu/+source/mysql-5.1/+bug/876268/…
Rinzwind

Réponses:


5

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 autoriser cela, ajoutez un fichier /etc/apparmor.d/local/usr.sbin.mysqldavec l'entrée ci-dessous et redémarrez MySQL.

/var/run/mysqld/mysqld1.sock w,

Merci à Rinzwind de l' avoir signalé.


Ha! : D A pris un peu de recherche;)
Rinzwind

J'ai amélioré votre réponse pour utiliser le répertoire des changements locaux d'Apparmor. En évitant celui avec la gestion de vos packages, cela risque moins de se casser plus tard lors des mises à niveau et autres.
gertvdijk
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.