Comment réparer l'installation d'un package corrompu (mysql)

15

Après la mise à niveau vers Ubuntu 16.04, j'ai remarqué que mysql avait des erreurs époustouflantes. Convaincu, c'était une configuration cassée, j'ai essayé de lancer une purge de mysql. Cela ne semblait pas tout supprimer, alors j'ai essayé de le faire moi-même:

sudo rm -r /etc/mysql
sudo rm -r /usr/share/mysql-workbench
sudo rm -r /usr/share/mysql
sudo rm -r /usr/share/mysql-common

C'était une erreur. N'essayez JAMAIS de le faire. Maintenant, mysql ne s'installera même pas correctement. J'ai essayé de réinstaller les dépendances:

sudo apt-get install --reinstall $(apt-cache depends mysql-server | grep -Po 'Depends:\s+\K[^ ]+$' | tr '\n' ' ' )

Et les packages eux-mêmes:

sudo apt install mysql-workbench mysql-server --reinstall

Mais je reçois toutes sortes d'erreurs cryptiques, telles que:

sudo apt-get install --reinstall mysql-server
Reading package lists... Done
Building dependency tree       
Reading state information... Done
0 upgraded, 0 newly installed, 1 reinstalled, 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.
E: Internal Error, No file name for mysql-server:amd64

Et désinstaller

sudo apt-get remove mysql-common
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 libmysqlclient20 : Depends: mysql-common (>= 5.5) but it is not going to be installed
 mariadb-client-core-10.0 : Depends: mariadb-common (>= 10.0.24-7) but it is not going to be installed
E: Error, pkgProblemResolver::Resolve generated breaks, this may be caused by held packages.

Ou si je reconfigure

sudo dpkg --configure -a
Setting up mysql-server-5.7 (5.7.12-0ubuntu1) ...
/var/lib/dpkg/info/mysql-server-5.7.postinst: line 112: /usr/share/mysql-common/configure-symlinks: No such file or directory
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
Errors were encountered while processing:
 mysql-server-5.7
 mysql-server

Ou si je force l'installation:

sudo apt-get -f install
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) ...
/var/lib/dpkg/info/mysql-server-5.7.postinst: line 112: /usr/share/mysql-common/configure-symlinks: No such file or directory
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)

Ou si je fais une purge:

sudo apt-get -f purge mysql-server 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
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] y
(Reading database ... 348226 files and directories currently installed.)
Removing mysql-server (5.7.12-0ubuntu1) ...
Setting up mysql-server-5.7 (5.7.12-0ubuntu1) ...
/var/lib/dpkg/info/mysql-server-5.7.postinst: line 112: /usr/share/mysql-common/configure-symlinks: No such file or directory
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)

Apt est-il incapable de récupérer d'une installation partielle? Dois-je réinstaller le système d'exploitation?

Jonathan
la source
avez-vous essayé de faire une approche plus simple, par sudo apt-get install --reinstall mysql?
Videonauth
J'ai mis à jour pour inclure les erreurs de celles-ci
Jonathan
Peut-être que vous voulez entrer en discussion et nous verrons si nous pouvons régler cela.
Videonauth

Réponses:

22

Procédez comme suit pour nettoyer les packages cassés:

sudo apt-get clean
sudo apt-get update
sudo dpkg -r mysql-client-5.7
sudo dpkg -r mysql-server-5.7
sudo dpkg -r libmysqlclient20:i386
sudo dpkg -r libmysqlclient20:amd64
sudo dpkg -r libmysqlclient18:amd64
sudo dpkg -r mysql-common
sudo dpkg -r mysql 

Après cela, réinstallez-le avec:

sudo apt-get install mysql mysql-client* mysql-server*
Videonauth
la source
Merci beaucoup!! la suppression des dépendances une par une est la seule option pour sortir d'apt-get bloqué
stackMonk
+1 pour cela. Merci d'avoir mentionné la pile complète de paquets à supprimer pour MySQL. Il a travaillé pour moi aussi.
Parveen Verma
Sur mon Ubuntu 18.04, essayer de supprimer mysqlclient (en exécutant la 3e commande) a produit cela: des problèmes de dépendance empêchent la suppression de mysql-client-5.7: mysql-server-5.7 dépend de mysql-client-5.7 (> = 5.7.26-0ubuntu0.18.04. 1). dpkg: paquet de traitement des erreurs mysql-client-5.7 (--remove): problèmes de dépendance - pas de suppression Des erreurs ont été rencontrées lors du traitement: mysql-client-5.7, mais en exécutant sudo apt purge mysql-server mysql-server-5.7 mysql-server- core-5.7 à partir d'ici askubuntu.com/questions/760724/16-04-upgrade-broke-mysql-server semble avoir supprimé l'instance
Carmine
maintenant j'ai un tas d'erreur alors que j'essayais d'installer sudo apt install openjdk-8-jre openjdk-8-jdk.
Carmine
J'ai pu trouver le processus qui bloquait précédemment toute tentative de nettoyage de la mise à jour de mysql, en effet j'ai arrêté une instance en cours d'exécution dans mon système, puis j'ai purgé à partir de l'autre solution liée. Après cela, je me suis assuré que mon système était à jour. En effet, j'ai découvert que je manque de nombreuses mises à jour. Après cela, jusqu'à présent, l'installation de java sdk qui nécessitent lui-même l'instance mysql semble avoir bien fonctionné
Carmine
13

Merci à @Videonauth

sudo dpkg -r mysql-client-5.7
sudo dpkg -r mysql-server-5.7
sudo dpkg -r libmysqlclient20:i386
sudo dpkg -r libmysqlclient20:amd64
sudo dpkg -r libmysqlclient18:amd64
sudo dpkg -r mysql-common

Puis en cours d'exécution:

sudo apt-get purge mysql\* mariadb\* libmysql\* libmariadb\*

Si quelque chose échoue, exécutez simplement sudo dpkg -r <failedpackage>et si cela échoue, supprimez simplement le package qui en dépend. Si vous répétez, apt-get finira par fonctionner à nouveau.

Voir aussi Quelle est la différence entre dpkg et aptitude / apt-get?

Jonathan
la source
Supprimer ces packages libmysqlclient, même si d'autres packages en dépendent, et tout purger a fait l'affaire. Bien que maintenant j'obtienne des erreurs mysql_upgrade.
skerit
Je n'ai jamais eu d'erreurs mysql_upgrade. Mais vous devrez peut-être supprimer encore plus de packages. Je suppose que cela dépend du paquet corrompu. Il existe un moyen de rechercher tous les packages installés liés à mysql mais j'oublie comment. Je pense que c'est une commande de liste dpkg acheminée par grep
Jonathan
9

Essaye ça,

exécutez cette commande pour purger mysql, remplacez la version 5.7 par votre version installée

sudo apt purge mysql-client-5.7 mysql-client-core-5.7 mysql-common mysql-server-5.7 mysql-server-core-5.7 mysql-server

exécutez ceci pour nettoyer et mettre à jour les packages

sudo apt update && sudo apt dist-upgrade && sudo apt autoremove && sudo apt -f install

enfin installer mysql

sudo apt install mysql-server

cela a fonctionné pour moi.

rahul
la source
1
Cela a fonctionné pour moi, où la réponse sélectionnée n'a pas (elle a échoué sudo dpkg -r mysql-client-5.7)
jeff-h
Merci! Je cherchais une solution depuis des heures et c'est la seule réponse qui marche!
mirza
1
Cela a fonctionné pour moi. Ce tutoriel a également aidé.
nwaweru
4

Après avoir purgé mysqlcomme indiqué ci-dessus, vous devez installer mysql de cette façon:

sudo apt-get install mysql-common 
sudo apt-get install mysql-server

Lorsque vous installez de cette façon, vous n'aurez pas d'erreur d'installation.

tomek
la source
cela fonctionne pour moi
user1735921
2

Je ne connais pas la raison exacte, mais toutes ces méthodes n'ont pas fonctionné pour moi. Dans mon cas, la procédure qui a corrigé le problème était:

sudo apt-get purge mysql-*
sudo apt-get autoremove
sudo apt-get autoclean
sudo apt-get dist-upgrade

sudo rm -rf /etc/mysql
sudo rm -rf /var/lib/mysql*

et redémarrez !

enfin, j'ai pu courir sudo apt-get install mysql-server!

s1l3n0
la source
Merci, cela a fonctionné pour moi
Nijo
1

Cela a fonctionné pour moi

sudo apt-get purge mysql*
sudo apt-get autoremove
sudo apt-get autoclean
sudo apt-get dist-upgrade

puis après j'ai réinstallé mysql avec

sudo apt-get install mysql-server et maintenant ça marche bien.

Jayakrishnan Menon
la source
0

La commande sudo dpkg -r ne fonctionne pas pour moi ..

J'avais l'habitude sudo apt-get purge mysql-*de désinstaller tout le pageage relâché puis de les réinstaller

Ruijie Yuan
la source