Ich habe kürzlich eine Neuinstallation von Ubuntu 16.04 durchgeführt. Ich habe auch installiert mysql-server
und mysql-client
(deren Standardversion 5.7.12) über apt-get install
.
Da 5.7.12 einige Probleme aufwies, entschied ich mich, es zu deinstallieren. Ich habe es apt-get remove mysql-server mysql-client
zuerst versucht, aber gesehen, dass Artefakte gefallen /etc/mysql
und /var/lib/mysql
nicht entfernt wurden.
Ich habe es dann versucht apt-get --purge removed mysql-server mysql-client
, aber immer noch keinen Unterschied.
Also habe ich sie manuell entfernt (via rm -rf
). Ich entfernte auch manuell alle *mysql*
Dateien darunter /usr/
, die von irgendwelchen mysql-*
Abhängigkeitspaketen wie kamen mysql-common
.
Bei der Neuinstallation mysql-server and -client
stelle ich jedoch fest, dass dies nicht möglich ist.
Tatsächlich bin ich jetzt in einem Zustand, in dem ich weder apt-get remove mysql-server
noch kann apt-get install mysql-server
!
Wie kann ich die Situation beheben, in der ich mich befinde? Wie repariere ich meine lokalen Paket-Repository-Metadaten, wenn sie beschädigt sind?
Ich würde es hassen, das ganze gesegnete Betriebssystem mit all meinen anderen Apps und Umgebungen neu zu installieren, ein weiteres Mal nur wegen mysql-server
.
Der folgende Fehler wird beispielsweise angezeigt, wenn ich versuche, ihn zu entfernen 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)
Und wenn ich versuche zu installieren, bekomme ich diesen Fehler:
$ 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)
Hier ist die Ausgabe von 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)
mysql-server-5.7
in einem schlechten Zustand ist, versuchen Sie es erneut zu installieren:sudo apt-get install --reinstall mysql-server-5.7
.... invoke-rc.d: initscript mysql, action "start" failed. ...
die ich mit anderen Varianten von Installationsbefehlen bekomme.sudo apt-get remove --purge mysql-server-5.7
. Beachten Sie, dass es sich hier wirklichmysql-server-5.7
um etwas handelt, nicht um etwasmysql-server
.Antworten:
Bearbeitet 10. Januar 2017 : Dies ist eine wichtige Überprüfung dieses Beitrags, um schwerwiegende Probleme in diesem Beitrag zu beheben.
Der Fehler im Herzen
Das Problem ist, dass sich das Paket immer noch in einem halb installierten und halb konfigurierten Zustand auf dem System befindet und explizit entfernt werden muss.
Was es wirklich aussagt ist, dass das Paket
mysql-server-5.7
eine Abhängigkeitmysql-server
ist, bereits installiert ist, aber nicht konfiguriert ist. Sie müssenpurge
es also tun, um die Brotkrumen zu entfernen, die von Ihnen zurückgelassen wurdenmysql-server-5.7
.Begründung
Wenn Sie Software mithilfe von installieren
apt
, werden Abhängigkeiten automatisch auch für Sie verarbeitet.Wenn Sie bestimmte Pakete entfernen, werden möglicherweise nicht dieselben Abhängigkeiten behandelt. In diesem Beitrag ist diese Abhängigkeit
mysql-server-5.7
.Sie können überprüfen, ob ein Paketstatus vorliegt, indem Sie den folgenden Befehl ausführen.
Wenn Sie den Code
un
oderrc
links neben dem Paketnamen sehen, können Sie normalerweise feststellen, ob es sich tatsächlich um ein defektes Paket handelt.Als ich dieses Problem erlebte, war es mit
libapache2-mod-php
undlibapache2-mod-php7.0
. Das war meine Ausgabe.In meinem Fall wurde behauptet, der Status meines Pakets sei unbekannt und es sei nicht
un
auf meinem System installiert (der Code ).Wenn Sie sagen
apt
zuremove
etwas, kann es Pakete, die Konfigurationsdateien und andere Elemente lassen , die bei automatisierten Anlagen problematisch sein kann.Wenn Sie etwas erzählen
apt
,purge
ist es am besten, alle Brotkrumen zu entfernen, dieremove
möglicherweise zurückgeblieben sind.Ich habe ursprünglich angegeben, dass ich davon ausgegangen bin, dass der Prozess noch läuft, aber höchstwahrscheinlich inaktiv oder tot ist.
Der beste Weg, um zu überprüfen, ob der Dienst Ihre Paketentfernung stört, besteht darin, diesen Dienst zuerst zu überprüfen.
1) Untersuchung des
mysql
DienstesMithilfe des von uns angegebenen Systemfehlers
apt
können wirsystemctl
den Fehler tatsächlich untersuchen , indem wir den Status desmysql
Dienstes überprüfenIn unserem Fall möchten wir sehen, ob mysql läuft, damit wir es eintippen können
Sie sollten diese Ausgabe sehen, wenn der Dienst ausgeführt wird
Hinweis: Wenn der Dienst nicht mehr verfügbar ist, wird in einer kurzen Meldung angezeigt, dass kein Dienst mit diesem Namen ausgeführt wird. Fahren Sie dann mit Schritt 3 fort.
2) Beenden des
mysql
Dienstes mitsystemctl
Hinweis: [Muster] muss der Name sein, der mit
service
oder aufgeführt istinitctl
. Der Grund, den ich benutze,pattern
ist, dass ichsystemctl
Regex-Matching verwende. Seien Sie also vorsichtig, wenn Sie daskill
Argument verwenden müssen.wo
pattern
steht für die MySQL - Daemon / Service - Namen. wenn stop nicht funktioniert versuch esBeispielsweise
3) Deinstallieren / Löschen
mysql
Wenn Sie eine vollständige Bereinigung durchführen müssen, stellen Sie sicher, dass der Dienst oder Prozess zuerst gestoppt wurde, und entfernen Sie dann die richtigen Dateien und Verzeichnisse!
Hinweis: Stellen Sie sicher, dass Sie auf die richtige
mysql
Version abzielen . Wenn Sie beispielsweise 5.5 verwenden, passen Sie die Versionsnummer entsprechend an.WARNUNG: Die folgenden Schritte werden Ihre Daten löschen! (Der erste Befehl muss ausgeführt werden, um eine Sicherung durchzuführen.)
Quelle: Wie deinstalliere ich MySQL?
4) Reparieren defekter Pakete und Behandeln fehlender Abhängigkeiten
Wenn die vorhergehenden Schritte bei Ihnen nicht erfolgreich waren, müssen Sie möglicherweise
apt
die--fix-broken
Option ausführen , um alle angerichteten Schäden zu reparieren.Stellen Sie sicher,
apt update
zuerst und dannapt install
5) Wenn alles andere fehlschlägt, bauen und installieren
mysql
Sie sichWenn keines der oben genannten Verfahren funktioniert, müssen Sie den Quellcode manuell herunterladen, kompilieren und make oder bash verwenden, um ihn von dort aus zu installieren (nicht so schmerzhaft, wie es sich anhört, da es vollständig automatisiert ist).
quelle
rm
Dateien zu finden, die zu Paketen gehören.sudo rm -rf /var/lib/mysql
Entfernt alle Ihre Datenbanken am Standardspeicherort. Mache zuerst ein Backup!Das Problem mit dem ersten Beitrag ist, dass Sie ein Metapaket nicht gut für die SQL-Elemente neu konfigurieren können. Sie müssen das aktuelle Release-Element angeben.
Sagen Sie Gebrauch;
Das sollte nämlich eine Liste von Paketen anzeigen
"mysql-server-5.7" "mysql-server-core-5.7" oder neuere Versionen
dann;
getan.
quelle
Dies ist die richtige Lösung für Sie
Zuerst müssen Sie alle Pakete von mysql-server entfernen:
Dann installieren Sie:
Oder Sie können tun:
quelle
Ich habe es gesehen
als Hinweis darauf, dass es noch ein fehlerhaftes Startskript gab.
Suchen Sie nach
/etc/init.d/mysql
und alle Symlinks dazu. Das Entfernen dieser Dateien schien meine Probleme bei der Neuinstallation nach dem Löschen zu beheben.quelle
Dieser Fehler trat auch beim Wechsel von MySQL zu MariaDB auf ( https://bugs.launchpad.net/ubuntu/+source/mysql-5.7/+bug/1490071 ).
Die MySQL-Binärdatendateien waren nicht mit MariaDB kompatibel, daher bin ich zurück zu MySQL gewechselt, weil ich keine Zeit hatte, mich mit mysqldump zu beschäftigen.
Zuerst musste ich MariaDB-Daten entfernen
/var/lib/mysql
, dann MySQL installieren und dann meine Originaldaten von/var/lib/mysql-5.7
(diese Sicherung wurde vor dem Fehler automatisch erstellt) nach verschieben/var/lib/mysql
.quelle
Versuchen Sie
apt-get -f install
, Ihr defektes SQL-Paket zu reparieren. Wenn Sie immer noch Probleme mit dem Paket-Manager haben, laden Sie den SQL Server-Quellcode herunter und kompilieren Sie ihn !! Aber versuche den obigen Befehl und benutze auch,dpkg -l | grep sql
um herauszufinden, ob der Paketmanager noch SQL für dich hält oder nicht.quelle
apt-get -f install
alleine laufen , ohne einen Paketnamen anzugeben.apt-get install -f
, keine Änderung.