apt-get se bloque lors de la mise à niveau de mysql-server-5.1

9

Lorsque j'essaie de faire ce qui suit:

sudo apt-get update
sudo apt-get upgrade

sur mon installation Ubuntu Server 10.04, il se bloque à la ligne suivante:

Preparing to replace mysql-server-5.1 5.1.41-3ubuntu12.1 (using .../mysql-server-5.1_5.1.41-3ubuntu12.3_i386.deb)

Je ne peux même pas en sortir CTRL-C! Je finis par devoir interrompre ma session et me connecter à partir d'un autre terminal et le processus de mise à niveau est toujours en cours. Je l'ai redémarré plusieurs fois et quand je reviens en arrière et réessaye, il me dit:

E: dpkg was interrupted, you must manually run 'sudo --configure -a' to correct the problem.

Une fois que je fais cela, je suis de retour à la case départ et il se fige lorsque j'essaie de mettre à niveau mySQL.

Rob
la source
1
et, ce serait vous aussi ... newyork.ubuntuforums.org/showthread.php?t=1514195
nik
2
@nik: et? il ne devrait pas poser une question à deux endroits? il est bon de poster à deux endroits? vous montrez que vous savez utiliser Google?
msw
2
@msw, ce n'était pas un commentaire négatif ou une démonstration. En fait, je pensais avoir trouvé une autre référence à un problème similaire .. mais, il s'est avéré que ce n'était pas le cas.
nik
@msw: La publication croisée est ... controversée. Bien sûr, cela maximise la possibilité d'obtenir une réponse, mais il y aura également différentes «équipes» travaillant sur la même chose, proposant probablement les mêmes suggestions et perdant juste leur temps.
Bobby
La raison pour laquelle j'ai posté ici était parce que je n'obtiens pas une seule réponse sur ubuntuforums.org. Inutile de dire que je ne les utiliserai plus comme ressource technologique à partir de maintenant :)
Rob

Réponses:

2

Essayez d'aller à un niveau inférieur à apt, après avoir sauvegardé vos bases de données:

sudo dpkg -r mysql-server
sudo apt-get check    # verify that apt's metadata is okay
sudo apt-get install mysql-server

ajouté :

Étant donné qu'il dpkg -rest étouffant, essayez dpkg --purgeet échouez à récupérer le contenu du paquet avec dpkg -L mysql-server-5.1zap, puis à foutre le pied /var/lib/dpkg.

Je n'ai jamais vu les choses devenir aussi poilues, désolé.

si au début vous ne réussissez pas

Je pense en quelque sorte à haute voix ici, pardonnez-moi. Le méta-package mysql-server contient ou nécessite ces packages:

libdbd-mysql-perl
libdbi-perl
libhtml-template-perl
libnet-daemon-perl
libplrpc-perl
mysql-client-5.1
mysql-client-core-5.1
mysql-server
mysql-server-5.1
mysql-server-core-5.1

Les métadonnées pour la gestion des packages sont délicieusement découplées, il existe des référentiels centraux mais les packages sont autonomes. /var/cache/apt/archivesest l'endroit où vivent les *.debfichiers qui ont été installés.

Tout d'abord, forcez dpkg à oublier ces packages (au risque de ne pas supprimer certains fichiers que nous allons remplacer de toute façon).

for i in mysql-server-core-5.1 mysql-server-5.1 ... ; do
    sudo dpkg -r --force-remove-reinstreq $i
done

Obtenez ensuite les fichiers .deb nécessaires pour une installation complète:

sudo apt-get install --download-only mysql-server

puis essayez de les installer un par un:

cd /var/cache/apt/archives
sudo dpkg -i mysql-server-core-5.1_5.1.41-3ubuntu12.3_i386.deb

si vous avez des problèmes, essayez:

sudo dpkg -D77777 -i mysql-server-core-5.1... > 2>&1 /tmp/dpkg.log.$$

Et essayez de trouver les lignes pertinentes du zillion dans le fichier journal et postez-les ici. Bonne chance et bonne chance.

msw
la source
Quand je fais "dpkg -r mysql-server", il dit qu'il n'est pas installé. J'essaye donc "dpkg -r mysql-server-5.1" et il dit: Le paquet est dans un très mauvais état incohérent - vous devez le réinstaller avant de tenter une suppression.
Rob
Je suppose que vous avez essayé "dpkg -r mysql-server-5.1" et échoué?
msw
Ouais ça échoue. Il reconnaît qu'il est là, mais dit "Le package est dans un très mauvais état incohérent - vous devez le réinstaller avant de tenter une suppression."
Rob
"dpkg --purge" donne la même erreur. Dois-je donc supprimer tous les fichiers répertoriés avec "dpkg -L mysql-server-5.1"? Et qu'entendez-vous par "muck" dans / var / lib / dpkg?
Rob
ajouté la phase suivante
msw
6

Apparemment, la mise à jour attend que le serveur démarre et pour une raison quelconque, ce n'est pas le cas. Pour résoudre le problème, il existe plusieurs possibilités.

Le plus facile:

  1. Ouvrez un nouveau terminal et exécutez:

    sudo services mysql start
    

Plus compliqué mais parfois nécessaire: (c'est pratique lorsque vous n'avez pas accès à un autre terminal):

  1. Appuyez sur "^ z" ( Ctrl+Z ) qui "ARRÊTERA" votre travail. Exécutez ensuite:

    sudo services mysql start
    
  2. Une fois le serveur démarré, tapez ce qui suit et appuyez sur Entrée:

    fg 
    

    Cela remettra votre travail "ARRÊTÉ" au premier plan et continuera là où il s'était arrêté.

Mat
la source
Dans mon cas, il attendait en effet que le serveur démarre.
izak
Même si la commande de démarrage a indiqué qu'elle était déjà en cours d'exécution, en quelques secondes apt-get a continué très bien. Merci
Liam Wheldon
2

J'avais ce problème car c'était une copie d'une machine virtuelle, j'avais donc changé l'adresse IP du serveur mais je n'ai pas changé l'adresse de liaison dans le fichier my.cnf. Une fois que j'ai modifié l'adresse de liaison pour correspondre, la mise à jour ne s'est pas arrêtée et s'est terminée avec succès.

Andrew
la source
1

J'ai fait face au même problème et j'ai passé plus d'une journée à le déboguer.

Lorsque j'ai supprimé le répertoire de la base de données /var/lib/mysql/, l'installation s'est bien déroulée.

Puru Choudhary
la source
2
Cela doit être fait avec prudence, non?
slhck
1

J'avais ce problème précis, mais aucune des solutions existantes ne semblait appropriée. Forcer une désinstallation est censé être inutile dans n'importe quel * nix et n'est certainement pas KISS. Dans mon cas, j'ai trouvé que la cause était simple. MySQL refusait de démarrer car il fonctionnait toujours! Quand apt a essayé d'arrêter MySQL, il était actif et ne s'est jamais réellement arrêté.

Comme toujours, assurez-vous d'avoir des sauvegardes!

Arrêtez le service:

sudo service mysql stop

Assurez-vous que le service ne fonctionne plus:

sudo ps ax | grep mysql

S'il est toujours en cours d'exécution, donnez-lui du temps:

sudo kill <pid>

Mais finalement, s'il fonctionne toujours , vous devez le tuer de manière agressive:

sudo kill -9 <pid>

Une fois que vous avez confirmé qu'il ne fonctionne plus, vous pouvez poursuivre la mise à jour.

Une fois la mise à jour terminée, en particulier si vous avez dû tuer -9, assurez-vous d'exécuter mysqlcheck pour vous assurer que tout ce qui a pu empêcher le service de s'arrêter n'est pas une table corrompue ou cassée. Assurez-vous également que vous disposez de sauvegardes régulières (et assurez-vous que ces sauvegardes fonctionnent réellement!).

zaTricky
la source
0

Dans mon cas, il y avait un problème avec un /etc/mysql/my.cnf existant. La vérification du journal des erreurs dans /var/log/mysql/error.log a révélé:

150112  5:45:47 [ERROR] Can't start server: Bind on TCP/IP port: Cannot assign requested address
150112  5:45:47 [ERROR] Do you already have another mysqld server running on port: 3306 ?
150112  5:45:47 [ERROR] Aborting

150112  5:45:47  InnoDB: Starting shutdown...
150112  5:45:52  InnoDB: Shutdown completed; log sequence number 0 1883376705
150112  5:45:52 [Note] /usr/sbin/mysqld: Shutdown complete

Évidemment, il pourrait y avoir un problème différent avec my.cnf, mais dans mon cas, c'est que nous essayions de nous lier à une ancienne adresse IP. Changer pour:

bind 127.0.0.1

corrigé cela et il ne démarre aucun problème.

rainkinz
la source