134 votes

La mise à jour de 16.04 a cassé mysql-server

La mise à jour globale s'est bien déroulée, mais je reste avec un problème critique persistant : mysql-server ne parvient pas à s'installer, et rien de ce que j'essaie ne le fait fonctionner.

Voici l'erreur que je vois lorsque j'essaie de l'installer/réinstaller :

Setting up mysql-server-5.7 (5.7.11-0ubuntu6) ...
Job for mysql.service failed because the control process exited with error code. See "systemctl status mysql.service" and "journalctl -xe" for details.
invoke-rc.d: initscript mysql, action "start" failed.
dpkg: error processing package mysql-server-5.7 (--configure):
 subprocess installed post-installation script returned error exit status 1
dpkg: dependency problems prevent configuration of mysql-server:
 mysql-server depends on mysql-server-5.7; however:
  Package mysql-server-5.7 is not configured yet.

dpkg: error processing package mysql-server (--configure):
 dependency problems - leaving unconfigured
No apport report written because the error message indicates its a followup error from a previous failure.
                   Processing triggers for systemd (229-4ubuntu4) ...
Processing triggers for ureadahead (0.100.0-19) ...
Errors were encountered while processing:
 mysql-server-5.7
 mysql-server
E: Sub-process /usr/bin/dpkg returned an error code (1)

J'ai essayé de le supprimer complètement, mais en le faisant, j'ai essayé d'installer MariaDB à cause des dépendances ( ?). Toute suggestion sur ce que je peux faire pour résoudre ce problème serait la bienvenue.

EDIT : On dirait que je ne suis pas le seul : https://bugs.launchpad.net/ubuntu/+source/mysql-5.7/+bug/1573279

129voto

djsumdog Points 1030

Les instructions que @andrew-beerman a postées sont sur la bonne voie, bien qu'elles ne soient pas tout à fait claires pour moi et semblent recommander plus que ce qui est nécessaire. J'ai rassemblé la réponse à partir de ce qui précède et d'un message utile dans le fil de discussion sur les bugs.

Voici les mesures que j'ai prises pour corriger ce problème :

  1. Sauvegardez votre my.cnf file en /etc/mysql et le supprimer ou le renommer

    sudo mv /etc/mysql/my.cnf /etc/mysql/my.cnf.bak
  2. Supprimer le dossier /etc/mysql/mysql.conf.d/ en utilisant

    sudo rm -r /etc/mysql/mysql.conf.d/
  3. Vérifiez que vous n'avez pas de my.cnf rangé ailleurs (j'ai fait dans mon répertoire personnel !) ou dans le fichier /etc/alternatives/my.cnf utilice

    sudo find / -name my.cnf
  4. Sauvegarde et suppression /etc/mysql/debian.cnf fichiers (pas sûr que ce soit nécessaire, mais juste au cas où)

    sudo mv /etc/mysql/debian.cnf /etc/mysql/debian.cnf.bak
    sudo apt purge mysql-server mysql-server-5.7 mysql-server-core-5.7
    sudo apt install mysql-server
  5. Si votre syslog affiche une erreur du type "mysqld : Can't read dir of '/etc/mysql/conf.d/'", créez un lien symbolique :

    sudo ln -s /etc/mysql/mysql.conf.d /etc/mysql/conf.d

    Ensuite, le service devrait pouvoir démarrer avec sudo service mysql start .

Ça a marché !

63voto

Naruto Biju Mode Points 731

Aujourd'hui j'ai eu le même problème, après avoir essayé plusieurs solutions j'ai trouvé que le problème était la commande sudo systemctl disable mysql.service que j'ai utilisé pour désactiver le démarrage automatique de MySQL, donc pour le faire fonctionner j'ai réactivé le serveur MySQL en utilisant la commande sudo systemctl enable mysql.service et relancer le processus de mise à niveau et il s'est terminé parfaitement.

21voto

knb Points 4051

Votre message d'erreur contient cette ligne :

subprocess installed post-installation script returned error exit status 1

Cependant, cette installed post-installation script n'est pas mentionné nommément. Après beaucoup de bricolage, j'ai découvert que son nom est (dans mon cas) /var/lib/dpkg/info/mysql-server-5.7.postinst .

Ouvrez ce fichier avec sudo vi /var/lib/dpkg/info/mysql-server-5.7.postinst ou votre éditeur préféré.

En haut, modifiez la ligne 3 (ou à peu près) : set -e à set -x et sauvegarder le fichier. (option -e est "exit on errors", -x signifie "montrer explicitement la commande exécutée", vraisemblablement)

Ejecutar sudo dpkg --configure -a --log /tmp/dpkg.log (l'option --log est facultative). Vous pouvez aussi simplement exécuter apt upgrade si vous savez que ce sera le seul paquet qui sera mis à jour.

Maintenant, vous obtenez une sortie verbeuse de la mysql-server-5.7.postinst bash script, et vous pourrez trouver ce qui ne va pas.

Dans mon cas il a essayé sans succès de (re)lancer mysql_upgrade mais cela n'était pas nécessaire pour mon installation personnalisée de mysql. J'ai été sûr Je l'ai déjà exécuté manuellement, avec succès, et tout allait bien.

J'ai donc modifié la ligne 321 (pour les anciennes versions de mysqld, essayez la ligne 281),

#mysql_upgrade --defaults-file=/etc/mysql/debian.cnf || result=$?

et la commande qui a échoué auparavant, sudo apt upgrade (exécutez-le à nouveau), s'est terminé avec succès, et dpkg a supprimé l'état d'erreur pour ce paquet.

Maintenant vous pouvez remettre en place le set -x à set -e (mentionné ci-dessus). Et éventuellement décommentez la ligne mysql-upgrade.

Un travail supplémentaire peut être nécessaire si vous avez déplacé votre partition de données mysql vers un emplacement non standard. J'ai déplacé la mienne de /var/lib/mysql/data vers un lecteur différent via un lien symbolique. Il se peut alors que vous deviez supprimer temporairement le lien symbolique, avant que l'option postinst Manipulation de script. Puis recréez-le après avoir exécuté la mise à jour du paquet.

Après la prochaine mise à jour de la version mineure du paquet mysqld debian, ce problème avec l'option /var/lib/dpkg/info/mysql-server-5.7.postinst script peut réapparaître.

18voto

Andrew Beeman Points 181

Les instructions ici ont réglé le problème sur mon serveur : https://bugs.mysql.com/bug.php?id=72722

Je peux comprendre la douleur d'avoir votre système dans un état incohérent. mais ne nous inquiétons pas de toute la situation et prenons les choses étape par étape. pour nettoyer le système.

Tout d'abord, voyons l'état actuel de tous les paquets mysql sur la machine. en utilisant : dpkg -l | grep mysql (Veuillez coller la sortie à l'exception de la dernière colonne)

La première colonne indique l'état actuel du paquet. Voici les les options possibles :

ii) Installé rc) Supprimé les fichiers de configuration conservés (Ceci devrait être l'état de tous les paquets que vous avez supprimés avec 'apt-get remove' qui ne ne supprime pas les fichiers de configuration sous /etc)

Pour que cela fonctionne, vous devrez exécuter 'apt-get purge <pkg-name>' jusqu'à ce que vous ne voyiez plus aucun paquet dans la liste ci-dessus.

N'oubliez pas que certains paquets non-mysql-serveur comme Python-mysql.connector et Python-mysqldb, s'ils sont installés, ne doivent pas être installés, ne doivent pas être supprimés car ils n'ont pas d'incidence sur la situation mais mais s'ils sont supprimés, ils peuvent causer des problèmes aux applications qui les utilisent.

Nous allons certainement essayer de revoir nos docs pour voir comment nous pouvons comment éviter aux utilisateurs de se retrouver dans cette situation. Merci de partager vos commentaires détaillés avec nous.

3voto

Dans mon cas, avec strace, j'ai vu que /var/run/mysqld/ n'existait pas et que mysqld ne pouvait pas créer le fichier mysqld.sock.

Ces commandes ont résolu mon problème :

mkdir /var/run/mysqld
chown mysql.mysql /var/run/mysqld
chmod 700 /var/run/mysqld

Maintenant :

systemctl start mysql

Et mysql fonctionne à nouveau :)

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X