web-dev-qa-db-fra.com

Impossible de réinstaller mysql-server après sa purge

J'ai récemment fait une nouvelle installation d'Ubuntu 16.04. J'ai également installé mysql-server et mysql-client (leur version par défaut 5.7.12) via apt-get install.

Parce que 5.7.12 montrait quelques problèmes, j'ai décidé de le désinstaller. J'ai d'abord essayé apt-get remove mysql-server mysql-client, mais j'ai constaté que des artefacts tels que /etc/mysql et /var/lib/mysql n'étaient pas supprimés.

J'ai ensuite essayé apt-get --purge removed mysql-server mysql-client, mais toujours pas de différence.

Je les ai donc supprimés manuellement (via rm -rf). J'ai également supprimé manuellement tous les fichiers *mysql* de /usr/ provenant de n'importe quel paquet de dépendance mysql-* comme mysql-common.

Cependant, maintenant, lorsque je souhaite réinstaller mysql-server and -client, je constate que je ne peux pas.

En fait, je suis maintenant dans un état où je ne peux ni apt-get remove mysql-server ni apt-get install mysql-server!

Comment résoudre la situation dans laquelle je suis? Si les métadonnées de mon référentiel de paquets local sont corrompues, comment puis-je les réparer?

Je détesterais réinstaller tout le système d'exploitation béni avec toutes mes autres applications et mon environnement, une fois de plus juste à cause de mysql-server.

Par exemple, voici l'erreur que je reçois lorsque j'essaie de supprimer mysql-server:

$ apt-get remove  mysql-server
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages were automatically installed and are no longer required:
  libaio1 mysql-client-5.7 mysql-client-core-5.7 mysql-common mysql-server-5.7 mysql-server-core-5.7
Use 'apt autoremove' to remove them.
The following packages will be REMOVED:
  mysql-server
0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
2 not fully installed or removed.
After this operation, 159 kB disk space will be freed.
Do you want to continue? [Y/n] 
(Reading database ... 237601 files and directories currently installed.)
Removing mysql-server (5.7.12-0ubuntu1) ...
Setting up mysql-server-5.7 (5.7.12-0ubuntu1) ...
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
Errors were encountered while processing:
 mysql-server-5.7
E: Sub-process /usr/bin/dpkg returned an error code (1)

Et en essayant d’installer, j’obtiens cette erreur:

$ apt-get -f install mysql-server
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following NEW packages will be installed:
  mysql-server
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
1 not fully installed or removed.
Need to get 0 B/10.1 kB of archives.
After this operation, 159 kB of additional disk space will be used.
Selecting previously unselected package mysql-server.
(Reading database ... 237599 files and directories currently installed.)
Preparing to unpack .../mysql-server_5.7.12-0ubuntu1_all.deb ...
Unpacking mysql-server (5.7.12-0ubuntu1) ...
Setting up mysql-server-5.7 (5.7.12-0ubuntu1) ...
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.
                                                                                                          Errors were encountered while processing:
 mysql-server-5.7
 mysql-server
E: Sub-process /usr/bin/dpkg returned an error code (1)

Voici le résultat de apt-get install -f:

$ apt-get install -f 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
2 not fully installed or removed.
After this operation, 0 B of additional disk space will be used.
Setting up mysql-server-5.7 (5.7.12-0ubuntu1) ...
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.
                                                                                                          Errors were encountered while processing:
 mysql-server-5.7
 mysql-server
E: Sub-process /usr/bin/dpkg returned an error code (1)
27
Harry

Modifié le 10 janvier 2017 : il s'agit d'un commentaire majeur de ce message destiné à corriger les problèmes graves qui se posent dans ce dernier.

L'erreur au cœur

Le problème est que le package est toujours sur le système dans un état à moitié installé et à moitié configuré et doit être explicitement supprimé.

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.
                                                                                                          Errors were encountered while processing:
 mysql-server-5.7
 mysql-server
E: Sub-process /usr/bin/dpkg returned an error code (1)

Ce que ça dit vraiment, c'est que le paquet mysql-server-5.7 est une dépendance de mysql-server, est déjà installé, mais n'est pas configuré. Il vous faut donc purgepour supprimer les chapelures laissées par mysql-server-5.7.

Sudo apt purge mysql-server mysql-server-5.7

Justification

Lorsque vous installez un logiciel à l’aide de aptname__, il gère automatiquement les dépendances.

Lorsque vous supprimez certains packages, il peut ne pas gérer ces mêmes dépendances. Dans le cas de cet article, cette dépendance est mysql-server-5.7.

Vous pouvez vérifier l'état du package en exécutant la commande suivante.

dpkg-query -l [package-name-here]

Généralement, si vous voyez le code unou rcà la gauche du nom du paquet, vous serez en mesure de dire s'il s'agit bien d'un paquet cassé.

Lorsque j'ai rencontré ce problème, c'était avec libapache2-mod-php et libapache2-mod-php7.0. C'était ma sortie.

Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                        Version            Architecture       Description
+++-===========================-==================-==================-============================================================
un  libapache2-mod-php          <none>             <none>             (no description available)

Dans mon cas, il a affirmé que l'état de mon paquet est inconnu et qu'il n'est pas installé (le code unname__) sur mon système.

Lorsque vous indiquez aptà removename__, il peut laisser des packages, des fichiers de configuration et d'autres éléments qui peuvent poser problème lors d'installations automatisées.

Lorsque vous indiquez aptà purgename__, il est préférable de supprimer tout fil d'Ariane que removepourrait avoir laissé.

Au départ, j'ai déclaré que je supposais que le processus fonctionnait toujours, mais probablement qu'il était inactif ou mort.

Le meilleur moyen de vérifier si le service interfère avec la suppression de votre paquet est de vérifier ce service en premier.

1) Recherche du service mysql

En utilisant l'erreur système que nous a donnée aptname__, nous pouvons en fait utiliser systemctlpour rechercher l'erreur en vérifiant le statut du service mysqlname__

Sudo systemctl status [pattern]

Dans notre cas, nous voulons voir si mysql est en cours d'exécution, alors nous pouvons taper

systemctl status mysql.service

Vous devriez voir cette sortie si le service est en cours d'exécution

systemctl status mysql
● mysql.service - MySQL Community Server
   Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2017-01-10 23:10:06 EST; 1h 3min ago
 Main PID: 1206 (mysqld)
   CGroup: /system.slice/mysql.service
           └─1206 /usr/sbin/mysqld

Remarque: Si le service est inactif, un message court indiquant qu'aucun service portant ce nom n'est en cours d'exécution, puis passez à l'étape 3.

2) Arrêt du service mysqlà l'aide de systemctlname __

Remarque: [modèle] doit être le nom indiqué par serviceou initctlname__. La raison pour laquelle j’utilise patternest parce que systemctlutilise la correspondance des expressions rationnelles, aussi soyez prudent si vous devez utiliser l’argument killname__.

Sudo systemctl stop [pattern]

patternreprésente le démon/nom de service mysql. si stop ne fonctionne pas essayer

Sudo systemctl kill [pattern]

Par exemple

Sudo systemctl stop mysql

3) Désinstallation/purge mysqlname __

si vous devez purger totalement, assurez-vous d'abord que le service ou le processus est arrêté, puis assurez-vous de supprimer les fichiers et les répertoires appropriés!

Remarque: Assurez-vous de cibler la version correcte mysqlname__. Par exemple, si vous utilisez la version 5.5, ajustez le numéro de version de manière appropriée.

AVERTISSEMENT: les étapes suivantes vont supprimer vos données! (la première commande doit être exécutée pour faire une sauvegarde)

source: Comment désinstaller MySQL?

tar -zcvf ~/msql_backup.tar.gz /etc/mysql /var/lib/mysql 
Sudo apt purge mysql-server mysql-client mysql-common mysql-server-core-5.7 mysql-client-core-5.7
Sudo rm -rfv /etc/mysql /var/lib/mysql
Sudo apt autoremove
Sudo apt autoclean

4) Corriger les paquets cassés et gérer les dépendances manquantes

Si les étapes précédentes n'ont pas fonctionné pour vous, vous devrez peut-être exécuter aptavec l'option --fix-broken pour réparer les dommages causés.

Assurez-vous d'abord de apt update puis de apt install

Sudo apt update    
Sudo apt install mysql-server mysql-client --fix-broken --fix-missing

5) Quand tout échoue, construisez et installez vous-même mysql

Si rien de ce qui précède ne fonctionne, vous devrez télécharger manuellement le code source, le compiler et utiliser make ou bash pour l'installer à partir de cet emplacement (moins douloureux qu'il n'y paraît, car tout est automatisé).

76
user383919

Le problème avec le premier post est que vous ne pouvez pas reconfigurer un méta-paquet, pas pour les éléments SQL. Vous devez spécifier l'élément de la version actuelle.

Dites utiliser;

apt search mysql-server

Cela devrait afficher une liste de paquets à savoir

"mysql-server-5.7" "mysql-server-core-5.7" ou versions ultérieures

puis;

dpkg-reconfigure --force mysql-server-5.7 mysql-server-core-5.7

terminé.

7
e8hffff

C'est la bonne solution pour vous

Tout d’abord, vous devrez supprimer tous les paquets de mysql-server:

ATTENTION: les étapes suivantes vont supprimer vos données! Faites d'abord une sauvegarde!

Sudo rm -rf /var/lib/mysql

Puis installez:

Sudo apt-get install lamp-server^

Ou tu peux faire:

Sudo apt-get install mysql-server
3
Rohan

Cette erreur s'est également produite lors du passage de MySQL à MariaDB ( https://bugs.launchpad.net/ubuntu/+source/mysql-5.7/+bug/1490071 ).

Les fichiers de données binaires MySQL n’étaient pas compatibles avec MariaDB. Je suis donc retourné à MySQL car je n’ai pas eu le temps de jouer à mysqldump.

J'ai d'abord dû déplacer les données MariaDB de /var/lib/mysql, puis installer MySQL, puis déplacer mes données d'origine de /var/lib/mysql-5.7 (cette sauvegarde a été créée automatiquement avant l'erreur) vers /var/lib/mysql.

0
baptx

J'ai vu ça

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.

comme indice qu'il y avait toujours un script de démarrage erroné.

Recherchez /etc/init.d/mysql et ses liens symboliques. Le fait de les supprimer semble résoudre mes problèmes de réinstallation après la purge.

0
ghatzhat