Ich habe vor Kurzem eine Neuinstallation von Ubuntu 16.04 durchgeführt. Außerdem habe ich mysql-server
und mysql-client
(deren Standardversion 5.7.12) über installiert apt-get install
.
Da 5.7.12 einige Probleme aufwies, habe ich beschlossen, es zu deinstallieren. Ich habe es apt-get remove mysql-server mysql-client
zuerst versucht, aber festgestellt, dass Artefakte wie /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 kein Unterschied.
Also habe ich sie manuell entfernt (über rm -rf
). Außerdem habe ich alle *mysql*
Dateien darunter manuell entfernt /usr/
, die aus mysql-*
Abhängigkeitspaketen wie stammten mysql-common
.
Wenn ich es jetzt jedoch erneut installieren möchte mysql-server and -client
, stelle ich fest, dass dies nicht möglich ist.
Tatsächlich befinde ich mich 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? Wenn die Metadaten meines lokalen Paketrepositorys beschädigt wurden, wie repariere ich sie?
Ich würde es hassen, das ganze gesegnete Betriebssystem mit allen meinen anderen Apps und der Umgebung noch einmal neu zu installieren, nur wegen mysql-server
.
Folgendes ist beispielsweise der Fehler, den ich erhalte, wenn ich versuche, 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 beim Installationsversuch erhalte ich diese Fehlermeldung:
$ 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)
Antwort1
Bearbeitet 10. Januar 2017: Dies ist eine umfassende Überprüfung dieses Beitrags, um schwerwiegende Probleme in diesem Beitrag zu beheben.
Der Fehler im Herzen
Das Problem besteht darin, dass sich das Paket noch in einem halb installierten und halb konfigurierten Zustand auf dem System befindet und explizit entfernt werden muss.
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)
Es besagt eigentlich, dass das Paket mysql-server-5.7
eine Abhängigkeit von ist mysql-server
, bereits installiert, aber nicht konfiguriert ist. Sie müssen purge
es also verwenden, um die von hinterlassenen Brotkrümel zu entfernen mysql-server-5.7
.
sudo apt purge mysql-server mysql-server-5.7
Begründung
Wenn Sie Software mithilfe von installieren apt
, werden auch Abhängigkeiten automatisch für Sie verwaltet.
Wenn Sie bestimmte Pakete entfernen, werden diese Abhängigkeiten möglicherweise nicht mehr verarbeitet. Im Fall dieses Beitrags ist diese Abhängigkeit mysql-server-5.7
.
Sie können den Status eines Pakets überprüfen, indem Sie den folgenden Befehl eingeben.
dpkg-query -l [package-name-here]
Normalerweise können Sie anhand des Codes un
oder links neben dem Paketnamen erkennen, ob es sich tatsächlich um ein defektes Paket handelt.rc
Als dieses Problem auftrat, trat es bei libapache2-mod-php
und auf libapache2-mod-php7.0
. Dies war meine Ausgabe.
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)
In meinem Fall wurde behauptet, der Status meines Pakets sei unbekannt und es (der Code un
) sei nicht auf meinem System installiert.
Wenn Sie etwas anweisen apt
, remove
können Pakete, Konfigurationsdateien und andere Elemente übrig bleiben, die bei automatisierten Installationen problematisch sein können.
Wenn Sie jemandem sagen, apt
dass purge
er etwas tut, entfernen Sie am besten alle Brotkrümel, die remove
möglicherweise zurückgeblieben sind.
Ich hatte ursprünglich angenommen, dass der Prozess noch läuft, aber höchstwahrscheinlich war er inaktiv oder tot.
Um festzustellen, ob der Dienst die Entfernung Ihres Pakets behindert, können Sie am besten zuerst den jeweiligen Dienst überprüfen.
1) Untersuchung des mysql
Dienstes
Mithilfe des Systemfehlers, den wir von erhalten haben apt
, können wir systemctl
den Fehler tatsächlich untersuchen, indem wir den Status des mysql
Dienstes überprüfen
sudo systemctl status [pattern]
In unserem Fall möchten wir sehen, ob MySQL läuft, also können wir Folgendes eingeben:
systemctl status mysql.service
Wenn der Dienst ausgeführt wird, sollten Sie diese Ausgabe sehen.
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
Hinweis: Wenn der Dienst nicht mehr verfügbar ist, wird eine kurze Meldung angezeigt, die Sie darüber informiert, dass kein Dienst mit diesem Namen ausgeführt wird. Fahren Sie dann mit Schritt 3 fort.
2) Beenden des mysql
Dienstes mitsystemctl
service
Hinweis: [Muster] muss der von oder aufgelistete Name sein initctl
. Ich verwende pattern
es, weil es Regex-Matching verwendet. Seien Sie also vorsichtig, wenn Sie das Argument systemctl
verwenden müssen .kill
sudo systemctl stop [pattern]
wobei pattern
der Name des MySQL-Daemons/-Dienstes ist. Wenn Stoppen nicht funktioniert, versuchen Sie
sudo systemctl kill [pattern]
Zum Beispiel
sudo systemctl stop mysql
3) Deinstallieren/Bereinigenmysql
Wenn Sie eine vollständige Bereinigung durchführen müssen, stellen Sie zuerst sicher, dass der Dienst oder Prozess gestoppt wird, und achten Sie dann darauf, dass Sie die richtigen Dateien und Verzeichnisse entfernen!
Hinweis: Stellen Sie sicher, dass Sie die richtige Version verwenden mysql
. 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 ein Backup zu erstellen)
Quelle:Wie deinstalliere ich 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) Beheben defekter Pakete und Behandeln fehlender Abhängigkeiten
Wenn die vorangegangenen Schritte bei Ihnen nicht zum Erfolg geführt haben, müssen Sie möglicherweise apt
die --fix-broken
Option zur Reparatur der entstandenen Schäden ausprobieren.
Stellen Sie sicher, dass Sie apt update
zuerst und dannapt install
sudo apt update
sudo apt install mysql-server mysql-client --fix-broken --fix-missing
5) Wenn alles andere fehlschlägt, bauen und installieren mysql
Sie selbst
Wenn keine der oben genannten Möglichkeiten funktioniert, müssen Sie den Quellcode manuell herunterladen, kompilieren und die Installation mit „make“ oder „bash“ von dort aus durchführen (das ist nicht so mühsam, wie es klingt, da alles automatisiert ist).
Antwort2
Das Problem mit dem ersten Beitrag ist, dass Sie ein Metapaket nicht richtig neu konfigurieren können, nicht für die SQL-Elemente. Sie müssen das aktuelle Release-Element angeben.
Sagen Sie verwenden;
apt search mysql-server
Das sollte eine Liste von Paketen anzeigen, nämlich
„mysql-server-5.7“ „mysql-server-core-5.7“ oder spätere Versionen
Dann;
dpkg-reconfigure --force mysql-server-5.7 mysql-server-core-5.7
Erledigt.
Antwort3
Das ist die richtige Lösung für Sie
Zuerst müssen Sie alle Pakete vom MySQL-Server entfernen:
ACHTUNG: Die folgenden Schritte werden Ihre Daten löschen! Machen Sie vorher ein Backup!
sudo rm -rf /var/lib/mysql
Dann installieren Sie:
sudo apt-get install lamp-server^
Oder Sie können Folgendes tun:
sudo apt-get install mysql-server
Antwort4
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, deshalb bin ich wieder zu MySQL zurückgekehrt, da ich keine Zeit hatte, mich mit mysqldump herumzuschlagen.
Zuerst musste ich die MariaDB-Daten von verschieben /var/lib/mysql
, dann MySQL installieren und anschließend meine Originaldaten von /var/lib/mysql-5.7
(dieses Backup wurde vor dem Fehler automatisch erstellt) nach verschieben /var/lib/mysql
.