apt-get hängt beim Upgrade von mysql-server-5.1


9

Wenn ich Folgendes versuche:

sudo apt-get update
sudo apt-get upgrade

Bei meiner Ubuntu Server 10.04-Installation hängt es in der folgenden Zeile:

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

Ich kann nicht einmal STRG-C raus! Am Ende muss ich meine Sitzung beenden und mich von einem anderen Terminal aus anmelden, und der Aktualisierungsprozess wird noch ausgeführt. Ich habe es mehrmals neu gestartet und wenn ich zurückgehe und es erneut versuche, sagt es mir:

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

Sobald ich das mache, bin ich wieder auf dem ersten Platz und es friert ein, wenn ich versuche, mySQL zu aktualisieren.



2
@ Nik: und? er sollte nicht an zwei Stellen eine Frage stellen? es ist gut an zwei Stellen zu posten? Sie zeigen, dass Sie wissen, wie man Google benutzt?
Msw

2
@msw, Es war kein negativer Kommentar oder eine Show. Tatsächlich dachte ich, ich hätte einen anderen Hinweis auf ein ähnliches Problem gefunden. Aber es stellte sich heraus, dass dies nicht so war.
Nik

@msw: Cross-Posting ist ... umstritten. Natürlich wird die Möglichkeit, dass Sie eine Antwort erhalten, maximal ausgeschöpft, aber es werden auch verschiedene "Teams" an derselben Sache arbeiten, die wahrscheinlich dieselben Vorschläge machen und nur ihre Zeit verschwenden.
Bobby

Der Grund, warum ich hier gepostet habe, war, dass ich auf ubuntuforums.org keine einzige Antwort bekomme. Unnötig zu erwähnen, dass ich sie von nun an nicht mehr als technische Ressource verwenden werde :)
Rob

Antworten:


2

Versuchen Sie, nach dem Sichern Ihrer Datenbanken eine Stufe unter apt zu erreichen:

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

hinzugefügt :

Da dpkg -rist Würgen versuchen dpkg --purgeund scheitern, dass der Paketinhalt mit dpkg -L mysql-server-5.1zap sie bekommen und dann herumspielen /var/lib/dpkg.

Ich habe noch nie gesehen, dass die Dinge so haarig werden, sorry.

wenn es dir zuerst nicht gelingt

Ich denke hier irgendwie laut nach, vergib mir. Das MySQL-Server-Metapaket enthält oder benötigt diese Pakete:

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

Die Metadaten für die Paketverwaltung sind wunderbar entkoppelt, es gibt zentrale Repositorys, aber die Pakete stehen für sich allein. /var/cache/apt/archivesHier werden *.debDateien installiert, die installiert wurden.

Erzwingen Sie zunächst, dass dpkg diese Pakete vergisst (auf die Gefahr hin, dass einige Dateien, die wir sowieso ersetzen werden, nicht entfernt werden können).

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

Dann holen Sie sich die .deb-Dateien, die für eine vollständige Installation benötigt werden:

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

und versuchen Sie dann, sie einzeln zu installieren:

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

Wenn Sie dort Probleme haben, versuchen Sie:

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

Und versuchen Sie, die relevanten Zeilen aus der Unmenge in der Protokolldatei zu finden und hier zu posten. Viel Glück und viel Glück.


Wenn ich "dpkg -r mysql-server" mache, heißt es, dass es nicht installiert ist. Also versuche ich dann "dpkg -r mysql-server-5.1" und es heißt: Paket befindet sich in einem sehr schlechten inkonsistenten Zustand - Sie sollten es neu installieren, bevor Sie versuchen, es zu entfernen.
Rob

Ich nehme an, Sie haben "dpkg -r mysql-server-5.1" ausprobiert und sind fehlgeschlagen?
Msw

Ja, es schlägt fehl. Es erkennt, dass es vorhanden ist, sagt jedoch: "Das Paket befindet sich in einem sehr schlechten inkonsistenten Zustand. Sie sollten es neu installieren, bevor Sie versuchen, es zu entfernen."
Rob

"dpkg --purge" gibt den gleichen Fehler aus. Sollte ich also einfach alle mit "dpkg -L mysql-server-5.1" aufgelisteten Dateien löschen? Und was meinst du mit "Mist" in / var / lib / dpkg?
Rob

nächste Phase hinzugefügt
msw

6

Anscheinend wartet das Update auf den Start des Servers und aus irgendeinem Grund nicht. Um das Problem zu beheben, gibt es mehrere Möglichkeiten.

Das einfachste:

  1. Öffnen Sie ein neues Terminal und führen Sie Folgendes aus:

    sudo services mysql start
    

Komplizierter, aber manchmal notwendig: (Dies ist praktisch, wenn Sie keinen Zugriff auf ein anderes Terminal haben.)

  1. Drücken Sie "^ z" ( Ctrl+ Z), um Ihren Job zu "STOPPEN". Dann renne:

    sudo services mysql start
    
  2. Geben Sie nach dem Start des Servers Folgendes ein und drücken Sie die Eingabetaste:

    fg 
    

    Dadurch wird Ihr "STOPPED" -Job wieder in den Vordergrund gestellt und dort fortgesetzt, wo er aufgehört hat.


In meinem Fall wartete es tatsächlich darauf, dass der Server gestartet wurde.
Izak

Obwohl der Startbefehl angab, dass er bereits ausgeführt wurde, wurde apt-get innerhalb weniger Sekunden problemlos fortgesetzt. Vielen Dank
Liam Wheldon

2

Ich hatte dieses Problem, weil es sich um eine Kopie einer VM handelte, also hatte ich die IP-Adresse des Servers geändert, aber die Bindeadresse in der Datei my.cnf nicht geändert. Nachdem ich die Bindungsadresse entsprechend geändert hatte, blieb das Update nicht hängen und wurde erfolgreich abgeschlossen.


1

Ich hatte das gleiche Problem und verbrachte mehr als einen Tag damit, es zu debuggen.

Als ich das Datenbankverzeichnis entfernte /var/lib/mysql/, verlief die Installation reibungslos.


2
Das sollte aber mit Vorsicht gemacht werden, oder?
Slhck

1

Ich hatte genau dieses Problem, aber keine der vorhandenen Lösungen schien angemessen zu sein. Das Erzwingen einer Deinstallation sollte in jedem * nix unnötig sein und ist definitiv kein KISS. In meinem Fall stellte ich fest, dass die Ursache einfach war. MySQL weigerte sich zu starten, weil es noch lief! Als apt versuchte, MySQL zu stoppen, war es aktiv und wurde nie gestoppt.

Stellen Sie wie immer sicher, dass Sie Backups haben!

Beenden Sie den Dienst:

sudo service mysql stop

Stellen Sie sicher, dass der Dienst nicht mehr ausgeführt wird:

sudo ps ax | grep mysql

Wenn es noch läuft, geben Sie ihm etwas Zeit:

sudo kill <pid>

Aber irgendwann, wenn es noch läuft, müssen Sie es aggressiv töten:

sudo kill -9 <pid>

Sobald Sie bestätigt haben, dass es nicht mehr ausgeführt wird, können Sie mit dem Update fortfahren.

Führen Sie nach Abschluss des Updates, insbesondere wenn Sie -9 beenden mussten, unbedingt mysqlcheck aus, um sicherzustellen, dass alles, was dazu geführt hat, dass der Dienst nicht gestoppt wurde, keine beschädigte oder beschädigte Tabelle ist. Stellen Sie außerdem sicher, dass Sie regelmäßige Backups haben (und stellen Sie sicher, dass diese Backups tatsächlich funktionieren!).


0

In meinem Fall gab es ein Problem mit einer vorhandenen Datei /etc/mysql/my.cnf. Das Überprüfen des Fehlerprotokolls in /var/log/mysql/error.log ergab Folgendes:

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

Natürlich könnte es ein anderes Problem mit my.cnf geben, aber in meinem Fall haben wir versucht, eine Bindung an eine alte IP-Adresse herzustellen. Wechseln zu:

bind 127.0.0.1

das behoben und es startet kein Problem.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.