La mise à jour de 16.04 a endommagé le serveur mysql

116

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

C’est l’erreur que je vois lors de la tentative d’installation / réinstallation:

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 essaye 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: lien

    
posée TheGremlyn 22.04.2016 - 19:53
la source

8 réponses

113

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

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/ à l'aide de

    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 use

    sudo find / -name my.cnf
    
  4. Sauvegardez et supprimez les fichiers /etc/mysql/debian.cnf (ne savez pas si c'est 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 journal système affiche une erreur du type "mysqld: impossible de lire le répertoire de '/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é!

    
réponse donnée TheGremlyn 25.04.2016 - 15:38
la source
54

Aujourd'hui, j'ai eu 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, j'ai réactivé le serveur MySQL à l'aide de la commande sudo systemctl enable mysql.service et relancez le processus de mise à niveau, qui s’est parfaitement terminé.

    
réponse donnée Naruto Biju Mode 26.04.2016 - 00:37
la source
17

Les instructions décrites ici corrigent le problème sur mon serveur: lien

I can understand the pain of having your system in inconsistent state but lets not worry about the whole situation and take it step by step to get the system clean.

First lets see the current state of all the mysql packages on machine using: dpkg -l | grep mysql (Please paste the output excluding last column)

The first column denotes the current status of the package. Here are the possible options:

ii) Installed rc) Removed config-files kept (This should be the state of all the packages you have removed with 'apt-get remove' that does not remove config-files under /etc)

For this to work, you will need to run 'apt-get purge ' till you do not see any packages in the above list.

Please remember that some non-mysql-server packages like python-mysql.connector and python-mysqldb, if installed, need not be removed as they do not have any affect on this situation but if removed might cause trouble to applications using them.

We will definitely try to re-visit our docs to see how can we safeguard users from getting into this trouble. Thanks for sharing your feedback in detail with us.

    
réponse donnée Andrew Beeman 23.04.2016 - 00:05
la source
17

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é 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, changez la ligne 3 (ou plus): set -e en set -x , enregistrez le fichier. (l'option -e est "exit on errors", -x signifie "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 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 tenté en vain de (ré) exécuter mysql_upgrade , mais cela n'était pas nécessaire pour mon installation mysql personnalisée. J'étais sûr que je l'avais exécuté manuellement auparavant, avec succès et tout allait bien.

Je me suis donc engagé dans 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ée correctement et dpkg a supprimé le statut d'erreur pour ce package.

Vous pouvez maintenant régler le set -x sur set -e (mentionné ci-dessus). Et éventuellement décommentez la ligne mysql-upgrade.

Un travail supplémentaire peut être requis 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 . Ensuite, recréez-le après avoir exécuté la mise à jour du paquet.

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

    
réponse donnée knb 01.07.2016 - 14:03
la source
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:)

    
réponse donnée Leonardo Catalinas 27.04.2016 - 10:14
la source
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, consultez mon répondre (par ChristophS) à stackoverflow.

    
réponse donnée ChristophS 29.04.2016 - 14:30
la source
1

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.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
    
réponse donnée ostrokach 25.09.2017 - 19:19
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étail:

Après avoir lu attentivement, connecte% c_de% et trouve:

[ERROR] Can't start server: Bind on TCP/IP port: Address already in use

[ERROR] Do you already have another mysqld server running on port: 3306 ?

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

Je l'ai vérifié avec /var/log/mysql/error.log :

$ 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 ps -aux | grep 3306

Ensuite, j'ai lancé mysql: sudo kill -15 14706

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

    
réponse donnée milkovsky 20.08.2016 - 22:02
la source

Lire d'autres questions sur les étiquettes