web-dev-qa-db-fra.com

16.04 mise à jour cassé mysql-server

Ma mise à niveau globale s’est bien déroulée, mais je suis confronté à un problème critique persistant: mysql-server ne peut pas s’installer lui-même, 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

125
TheGremlyn

Les instructions affichées sur @ andrew-beerman 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 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 file dans /etc/mysql et supprimez-le ou renommez-le.

    Sudo mv /etc/mysql/my.cnf /etc/mysql/my.cnf.bak
    
  2. Supprimez 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 fichier my.cnf caché ailleurs (je l'ai fait dans mon répertoire personnel!) Ou dans /etc/alternatives/my.cnf

    Sudo find / -name my.cnf
    
  4. Sauvegardez et supprimez les fichiers /etc/mysql/debian.cnf (pas 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 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 par Sudo service mysql start.

Cela a fonctionné!

117
TheGremlyn

Aujourd'hui, j'ai le même problème. Après avoir essayé de nombreuses solutions, j'ai constaté qu'il s'agissait de la commande Sudo systemctl disable mysql.service utilisée pour désactiver le démarrage automatique de MySQL. Pour le faire fonctionner, je l'ai réactivé sur le serveur MySQL à l'aide de la commande Sudo systemctl enable mysql.service, puis relancer la mise à niveau. processus et il se termine parfaitement.

55
Naruto Biju Mode

Votre message d'erreur contient cette ligne:

subprocess installed post-installation script returned error exit status 1

Cependant, ce installed post-installation script n'est pas mentionné par son 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, remplacez la ligne 3 (ou plus): set -e par set -x, enregistrez le fichier. (l'option -e est "exit on errors", -x signifie "montrer explicitement la commande exécutée", vraisemblablement)

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

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

Dans mon cas il a essayé en vain de (ré) exécuter mysql_upgrade, mais cela n’a pas été nécessaire pour mon installation personnalisée de mysql. J'étais bien sûr 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 (l'exécuter à nouveau), s'est terminée avec succès et dpkg a supprimé le statut d'erreur pour ce package.

Maintenant, vous pouvez remettre 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 de /var/lib/mysql/data vers un autre lecteur via un lien symbolique. Ensuite, vous devrez peut-être supprimer le lien symbolique temporairement, avant la manipulation du script postinst. 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 script /var/lib/dpkg/info/mysql-server-5.7.postinst peut apparaître à nouveau.

19
knb

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 le nettoyer.

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' jusqu'à ne plus voir 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 risquent de 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 de ce problème. Merci de partager vos commentaires en détail avec nous.

17
Andrew Beeman

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 œil à my answer (de ChristophS) at stackoverflow.

3
ChristophS

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
Leonardo Catalinas

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

J'ai fini par aller sur le page de téléchargements Oracle , télécharger mysql-apt-config_0.8.8-1_all.deb et 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
1
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étail:

Après avoir lu attentivement, connecte /var/log/mysql/error.log et 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 fonctionnant 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 lancé mysql: /etc/init.d/mysql start

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

0
milkovsky

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)

0
Andy