Question 16.04 mise à niveau cassé mysql-server


Ma mise à niveau globale s'est bien déroulée, mais je reste confronté à un problème critique du fait que mysql-server ne soit pas en mesure de s'installer, et rien que j'essaie de faire ne fonctionne.

C'est l'erreur que je vois en essayant d'installer / de le 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, bien que cela tente d'installer MariaDB à cause des dépendances (?). Toute suggestion sur ce que je peux faire pour résoudre ce problème serait la bienvenue.

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


112
2018-04-22 17:53


origine


J'ai le même problème ici. - KernelPanic
Doit désinstaller phpmyadmin, qui causait en quelque sorte les problèmes de dépendance. Après la réinstallation, tout fonctionne à nouveau correctement. - Hinrich
do-release-upgrade d'Ubuntu 14 à 16 effectue une mise à niveau non prise en charge de MySQL 5.5 vers 5.7, il est donc normal que MySQL soit endommagé, comme indiqué ici: bugs.launchpad.net/ubuntu/+source/ubuntu-release-upgrader/+bug/… - Marco Marsala
@MarcoMarsala Je ne sais pas si on peut dire que c'est attendu pour que MySQL soit cassé après la mise à niveau d'Ubuntu 14 à 16, je suppose que cela dépend de votre perspective. Pour l'utilisateur moyen, il n'est certainement pas prévu qu'une pause de mise à niveau LTS ressemble à MySQL. Il est surprenant que cela n'ait pas été détecté lors des tests. - TheGremlyn


Réponses:


Les instructions @ andrew-beerman publiées sont sur la bonne voie, même si elles ne sont pas très claires pour moi et semblent recommander plus que nécessaire. J'ai rassemblé la réponse ci-dessus et un message utile dans le fil de bogue.

Ce sont les étapes que j'ai prises pour corriger ceci:

  1. Sauvegarder votre my.cnf file dans /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 fichier caché ailleurs (je l'ai fait dans mon répertoire personnel!) ou dans /etc/alternatives/my.cnf utilisation

    sudo find / -name my.cnf
    
  4. Sauvegarde et suppression /etc/mysql/debian.cnf fichiers (pas sûr si 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: impossible de lire dir de /etc/mysql/conf.d/", créez un lien symbolique:

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

    Alors le service devrait pouvoir commencer avec sudo service mysql start.

Cela a fonctionné!


112
2018-04-25 13:38



après toutes ces opérations (je l'ai fait avant), j'ai toujours les mêmes problèmes d'erreur ... - Sergii P
Vous devez supprimer chaque fichier my.cnf. * Du répertoire / etc / mysql. Recherchez my.cnf.backup, my.cnf.fallback et my.cnf.migrated - tous ces fichiers doivent également être supprimés (sauvegarde en premier!) - hitzi
@SergiiP sudo find / -name "my.cnf" pourrait être utile. - starbeamrainbowlabs
mysql-server-core- devrait être mysql-server-core-5.7. Sinon travaillé comme un charme. Je vous remercie! - Anonymous
+1. Vous avez fait ma journée! Aussi matin et soir! J'étais coincé. - Max Yudin


Aujourd'hui, j'ai le même problème, après avoir essayé de nombreuses solutions, j'ai trouvé que le problème était la commande sudo systemctl disable mysql.service que j'avais l'habitude de 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.


54
2018-04-25 22:37



J'ai rencontré ce même problème et le même correctif a fonctionné pour moi. - Allen
Travaillé pour moi A chaque solution ici, mysql a fonctionné après celle-ci. - Błażej Michalik
Même chose ici - cela devrait être top post. - a1phanumeric
Travaillé pour moi aussi! Merci beaucoup. Juste pour être explicite, lancez: sudo systemctl enable mysql.service et après cette course sudo apt install -f. - Fernando Paladini
C'est tout ce que je devais faire. J'ai désactivé le démarrage automatique tel que décrit par @naruto. J'ai activé le démarrage automatique et lance "sudo apt upgrade". Maintenant corrigé Devrait être la meilleure réponse. C'est une solution beaucoup plus simple, standard et moins problématique. - Jack Holt


Les instructions ici ont corrigé 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 vous inquiétez pas de la situation dans son ensemble et prenez le pas à pas   pour que le système soit propre.

Tout d'abord permet de voir l'état actuel de tous les paquets mysql sur la machine   en utilisant: dpkg -l | grep mysql (Veuillez coller la sortie en excluant le dernier   colonne)

La première colonne indique le statut actuel du package. Voici   les options possibles:

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

Pour que cela fonctionne, vous devrez lancer «apt-get purge» jusqu'à ce que   vous ne voyez aucun paquet dans la liste ci-dessus.

S'il vous plaît rappelez-vous que certains paquets non-mysql-serveur comme   python-mysql.connector et python-mysqldb, s’ils sont installés, n’ont pas besoin d’être   supprimé car ils n'ont aucun effet sur cette situation, mais si   supprimé pourrait causer des problèmes aux applications qui les utilisent.

Nous allons certainement essayer de revoir nos documents pour voir comment nous pouvons   Protégez les utilisateurs de ce problème. Merci d'avoir partagé   vos commentaires en détail avec nous.


17
2018-04-22 22:05



Merci pour dpkg -l | grep mysql . Cela a aidé à comprendre la direction. - Max Yudin


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é par nom. 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, changez la ligne 3 (ou plus): set -e à set -x, enregistrez le fichier. (option -e est "exit on errors", -x signifie "afficher explicitement la commande exécutée", sans doute)

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

Maintenant, vous obtenez une sortie détaillée de la mysql-server-5.7.postinst script bash, et vous pouvez comprendre ce qui ne va pas.

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

Donc, j'ai remplacé 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), terminé avec succès, et dpkg a supprimé le statut d'erreur de ce package.

Maintenant, vous pouvez reculer le set -x à set -e (mentionné ci-dessus). Et décommentez éventuellement 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éménagé le mien de /var/lib/mysql/data à un autre lecteur via un lien symbolique. Ensuite, vous devrez peut-être supprimer temporairement le lien symbolique avant que postinst manipulation de script. Ensuite, recréez-le après avoir exécuté la mise à niveau du package.

Après la prochaine mise à niveau de la version mineure du paquet mysqld debian, ce problème avec le /var/lib/dpkg/info/mysql-server-5.7.postinst le script peut apparaître à nouveau.


17
2017-07-01 12:03



J'ai fini par tout purger puis télécharger la version de la communauté mysql-server et installer manuellement à partir d'ici: dev.mysql.com/downloads/mysql - RyanNerd
Exactement la même chose m'est arrivée et vos démarches l'ont résolu. Pour moi, mon appel mysql_upgrade était sur la ligne 320. Pouvez-vous expliquer pourquoi il renvoie une valeur différente de zéro lorsqu'il est appelé depuis le script postinst? - emiliopedrollo
@emiliopedrollo Non, je ne peux pas expliquer ici. Mais je pense que le numéro de ligne est maintenant de 320 car les responsables des paquets ont récemment augmenté le script postinstall, j'ai observé la même chose l’autre jour, lors de la dernière exécution du software-updater (qui comprenait un nouveau paquet mysql-deb). . - knb
Merci! Avec set -e J'ai pu résoudre le problème exact - MySQL n’avait pas accès à l’utilisateur du système ubuntu spécifié dans /etc/mysql/debian.cnf  . J'ai donc ajouté cet utilisateur à MySQL et accordé des privilèges, exécuté dpkg encore une fois et ça a marché! - Allen Hamilton


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

À présent:

systemctl start mysql

Et mysql fonctionne à nouveau :)


3
2018-04-27 08:14



Je suggère que vous ajoutiez ces lignes à / usr / share / mysql / mysql-systemd-start à partir de la ligne 25, vous n'aurez alors pas à recréer ce répertoire après chaque redémarrage (désolé le retour de la ligne ne fonctionne pas dans ce commentaire) : si [ ! -d / run / msyqld]; puis mkdir -p -m0755 / run / mysqld || {echo "Impossible de créer / run / mysqld"; sortie 1; } chown mysql: mysql / run / mysqld || {echo "Impossible de chown / run / mysqld"; sortie 1; } Fi - scoobydoo


Dans mon cas, je pourrais résoudre le problème en ajoutant

# Allow log file access
/home/system/var/log/mysql.err rw,
/home/system/var/log/mysql.log rw,
/home/system/var/log/mysql/ r,
/home/system/var/log/mysql/** rw,

à /etc/apparmor.d/local/usr.sbin.mysqld

Pour plus de détails, jetez un oeil à mon répondre (par ChristophS) à stackoverflow.


3
2018-04-29 12:30





Aucune des réponses sur cette page n'a fonctionné pour moi.

J'ai fini par aller à la Page de téléchargement Oracle, Téléchargement mysql-apt-config_0.8.8-1_all.deb, et en installant MySQL depuis Oracle repo:

sudo dpkg -i mysql-apt-config_0.8.8-1_all.deb
sudo apt update
sudo apt install mysql-server

1
2017-09-25 17:19



isntall-> install faute de frappe. Stupid SO ne me permet pas de corriger un personnage. - Csaba Toth
@CsabaToth corrigé, merci! - ostrokach


J'ai eu le même problème. J'ai essayé de réinstaller mysql plusieurs fois, mais sans succès.

J'ai compris que le problème pour moi était qu'un autre processus mysql était déjà en cours d'exécution.

En détails:

Après avoir lu attentivement se connecte /var/log/mysql/error.log, et trouvé:

[ERREUR] Impossible de démarrer le serveur: liaison sur le port TCP / IP: adresse déjà présente   utilisation

[ERROR] Avez-vous déjà un autre serveur mysqld sur le port:   3306?

On dirait qu'une autre application utilisait déjà le port.

Je l'ai vérifié en utilisant ps -aux | grep 3306:

$ ps -aux | grep 3306
milkovs+  6802  0.0  0.0  16336  1084 pts/19   S+   21:39   0:00 grep --color=auto 3306
mysql    14706  0.0  0.3 1270192 13916 pts/2   Sl   Aug19   0:29 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --skip-grant-tables --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306 --log-syslog=1 --log-syslog-facility=daemon --log-syslog-tag=

Et j'ai tué le processus en cours sudo kill -15 14706

Ensuite, j'ai démarré mysql: /etc/init.d/mysql start

Enfin, mysql fonctionne pour moi! J'espère que ça aide quelqu'un.


0
2017-08-20 20:02