16.04 mise à jour cassé mysql-server

127

Ma mise à niveau globale s’est bien déroulée, mais il me reste un problème critique: je ne parviens pas à installer mysql-server, et rien de ce que j’essaie ne permet de le faire fonctionner.

C'est l'erreur que je vois en essayant d'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, bien que j'aie essayé d'installer MariaDB à cause de dépendances (?). Toute suggestion sur ce que je peux faire pour y remédier serait la bienvenue.

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

TheGremlyn
la source
J'ai le même problème ici .
KernelPanic
1
Dû désinstaller phpmyadmin, ce qui causait les problèmes de dépendance en quelque sorte. Après la réinstallation, tout fonctionne à nouveau correctement.
Hinrich
1
do-release-upgrade d'Ubuntu 14 à 16 effectue une mise à niveau non supportée de MySQL 5.5 à 5.7. On s'attend donc à ce que MySQL soit cassé après, comme indiqué ici: bugs.launchpad.net/ubuntu/+source/ubuntu-release-upgrader/ + bug /…
Marco Marsala
1
@MarcoMarsala Je ne sais pas si on peut dire que l'on s'attend à ce que MySQL soit cassé après la mise à jour d'Ubuntu 14 à 16, bien que je suppose que cela dépend de votre perspective. Pour l'utilisateur moyen, on ne s'attend certainement pas à une rupture de mise à niveau LTS de type MySQL. Il est surprenant que cela n’ait pas été détecté lors des tests.
TheGremlyn
apt install phpmyadmin --reinstall corrige ce qui précède sans avoir besoin de toucher à mysql après ... aller comprendre
Andy

Réponses:

119

Les instructions postées par @ andrew-beerman sont sur la bonne voie, bien qu'elles ne me soient pas tout à fait claires et semblent recommander plus que nécessaire. J'ai rassemblé la réponse de ce qui précède et un article utile dans le fil de discussion du bogue.

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

  1. Sauvegardez votre my.cnf filedans /etc/mysqlet supprimez-le ou renommez-le

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

    sudo rm -r /etc/mysql/mysql.conf.d/
    
  3. Vérifiez que vous n'avez pas de my.cnffichier caché ailleurs (ce que j'ai fait dans mon répertoire personnel!) Ou en cours d' /etc/alternatives/my.cnfutilisation

    sudo find / -name my.cnf
    
  4. Sauvegarder et supprimer des /etc/mysql/debian.cnffichiers (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. Dans le cas où votre syslog affiche une erreur du type "mysqld: impossible de lire le répertoire" /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 commencer sudo service mysql start.

Cela a fonctionné!

TheGremlyn
la source
17
après toutes ces opérations (je l'ai déjà fait auparavant) j'ai toujours les mêmes problèmes d'erreur ...
Serge
5
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 préalable!)
hitzi,
8
@SergiiP sudo find / -name "my.cnf"pourrait être utile.
starbeamrainbowlabs
1
mysql-server-core- devrait être mysql-server-core-5.7. Sinon travaillé comme un charme. Je vous remercie!
David Tay
1
+1 Tu as fait ma journée! Aussi matin et soir! J'étais coincé.
Max Yudin
56

Aujourd'hui , je suis le même problème, après avoir essayé de nombreuses solutions que j'ai trouvé que le problème était la commande sudo systemctl disable mysql.serviceque je l' ai utilisé pour désactiver démarrage automatique MySQL, afin de l' obtenir je travaille réactivées nouveau serveur MySQL en utilisant la commande sudo systemctl enable mysql.serviceet exécutez à nouveau le processus de mise à niveau et ça s'est terminé parfaitement.

Naruto Biju Mode
la source
5
J'ai couru dans ce même problème et le même correctif a fonctionné pour moi.
Allen
5
Travaillé pour moi Est-ce que chaque solution ici, mysql a fonctionné après celui-ci.
Commentaires
6
Idem ici - cela devrait être top post.
a1phanumeric
3
Travaillé pour moi aussi! Merci beaucoup. Juste pour être explicite, lancez: sudo systemctl enable mysql.serviceet après cette course sudo apt install -f.
Fernando Paladini
C'est tout ce que j'avais à faire. J'avais désactivé l'autostart comme décrit par @naruto. J'ai activé le démarrage automatique et exécuté "sudo apt upgrade". Maintenant corrigé. Devrait être la meilleure réponse. C'est une solution beaucoup plus simple, plus standard et moins sujette aux ennuis.
Jack Holt
20

Votre message d'erreur contient cette ligne:

subprocess installed post-installation script returned error exit status 1

Cependant, cela installed post-installation scriptn'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.postinstou votre éditeur préféré.

En haut, changez la ligne 3 (ou plus): set -epour set -xenregistrer le fichier. (option -eest "exit on errors", -xsignifie "montrer explicitement la commande exécutée", vraisemblablement)

Exécuter sudo dpkg --configure -a --log /tmp/dpkg.log (l'option --log est facultative). Vous pouvez également simplement exécuter apt upgradesi vous savez que ce sera le seul package qui sera mis à niveau.

Vous obtenez maintenant une sortie mysql-server-5.7.postinstcommentée du script bash et vous pouvez déterminer ce qui ne va pas.

Dans mon cas, il a essayé sans succès de (ré) exécuter mysql_upgrade, mais cela n'était pas nécessaire pour mon installation personnalisée de mysql. J'étais sûr que je l'avais exécuté manuellement auparavant, avec succès, et tout allait bien.

J'ai donc fait un commentaire sur 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-la à nouveau) s'est terminée avec succès et dpkg a supprimé le statut d'erreur pour ce paquet.

Maintenant, vous pouvez réduire 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é le mien d' /var/lib/mysql/dataun disque différent via un lien symbolique. Ensuite, vous devrez peut-être supprimer le lien symbolique temporairement, avant la postinstmanipulation du script. Puis, recréez-le après avoir exécuté la mise à niveau du paquet.

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

knb
la source
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
C'est exactement la même chose qui m'est arrivé et vos démarches l'ont résolu. Mais pour moi, mon appel mysql_upgrade était sur la ligne 320. Pouvez-vous expliquer pourquoi il renvoie une valeur non nulle lorsqu'il est appelé à partir du script postinst?
Emiliopedrollo
@emiliopedrollo Non, je ne peux pas expliquer ici. Mais je pense que le numéro de ligne est maintenant 320 car récemment les responsables du paquet ont augmenté le script postinstall, j’ai observé la même chose l’autre jour, lors de la dernière exécution du programme de mise à jour du logiciel (qui incluait un nouveau paquet mysql-deb). .
knb
Merci! Avec set -ej'ai pu travailler le problème exact - MySQL n'a pas accès à l'utilisateur du système de ubuntu spécifié dans /etc/mysql/debian.cnf . J'ai donc ajouté cet utilisateur à MySQL et lui avoir accordé des privilèges. J'ai dpkgrecommencé et cela a fonctionné!
Allen Hamilton
17

Les instructions ici corrigées sur mon serveur: https://bugs.mysql.com/bug.php?id=72722

Je peux comprendre la difficulté d'avoir votre système dans un état incohérent, mais ne nous inquiétons pas de la situation dans son ensemble et procédons étape par étape pour nettoyer le système.

Voyons d’abord l’état actuel de tous les paquets mysql sur la machine en utilisant: dpkg -l | grep mysql (veuillez coller le résultat en excluant la dernière 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 (il devrait s'agir de l'état de tous les paquets que vous avez supprimés avec 'apt-get remove' qui ne supprime pas les fichiers de configuration sous / etc)

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

N'oubliez pas que certains packages non-mysql-server tels que python-mysql.connector et python-mysqldb, s'ils sont installés, n'ont pas besoin d'être supprimés car ils n'ont aucun effet sur cette situation mais, s'ils sont supprimés, ils pourraient poser problème aux applications qui les utilisent.

Nous allons certainement essayer de revenir sur nos documents pour voir comment nous pouvons protéger les utilisateurs contre ce problème. Merci de partager vos commentaires en détail avec nous.

Andrew Beeman
la source
2
Merci pour dpkg -l | grep mysql . Cela a aidé à comprendre la direction.
Max Yudin
La commande était mauvaise pour la purge, elle doit être sudo apt-get purge <pkg-name>corrigée par une modification, mais: j’ai utilisé des caractères unicode pour la <sinon, elle ne s’afficherait pas. Soyez prévenu copie en collant cette commande
Toskan
3

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 :)

Leonardo Catalinas
la source
Je vous suggère d'ajouter 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é les retours de ligne ne fonctionnent pas dans ce commentaire) : si [ ! -d / run / msyqld]; puis mkdir -p -m0755 / run / mysqld || {echo "Impossible de créer / exécuter / mysqld"; sortie 1; } chown mysql: mysql / run / mysqld || {echo "Impossible de chown / run / mysqld"; sortie 1; } fi
scoobydoo
3

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 à ma réponse (de ChristophS) à stackoverflow.

ChristophS
la source
0

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, connecte-toi /var/log/mysql/error.loget trouve:

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

[ERREUR] 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

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

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

Laitovski
la source
0

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

J'ai fini par aller sur la page des téléchargements Oracle , télécharger mysql-apt-config_0.8.8-1_all.debet installer MySQL à partir du référentiel Oracle:

sudo dpkg -i mysql-apt-config_0.8.8-1_all.deb
sudo apt update
sudo apt install mysql-server
ostrokach
la source
2
isntall-> installfaute de frappe. Stupid SO ne me permet pas de corriger un caractère.
Csaba Toth
Pourquoi êtes-vous allé à l'oracle pour télécharger mysql
Sinscary
@Sinscary Cette réponse remonte à un certain temps, mais est-ce probablement dû au fait qu'ils avaient une version plus récente que le gestionnaire de packages système?
ostrokach
0

J'ai eu le problème sur quelques serveurs maintenant Le correctif était de lancer apt install phpmyadmin --reinstall

ce qui a résolu ce qui précède (sans avoir besoin de toucher mysql par la suite)

Andy
la source