16.04 Upgrade brach MySQL-Server

127

Mein Gesamt-Upgrade ist gut verlaufen, aber ich habe ein kritisches Problem damit, dass mysql-server nicht in der Lage ist, sich selbst zu installieren, und nichts, was ich versuche, bringt es zum Laufen.

Dies ist der Fehler, den ich sehe, wenn ich versuche, es zu installieren / neu zu installieren:

Setting up mysql-server-5.7 (5.7.11-0ubuntu6) ...
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.
                   Processing triggers for systemd (229-4ubuntu4) ...
Processing triggers for ureadahead (0.100.0-19) ...
Errors were encountered while processing:
 mysql-server-5.7
 mysql-server
E: Sub-process /usr/bin/dpkg returned an error code (1)

Ich habe versucht, es vollständig zu entfernen, obwohl ich versucht habe, MariaDB aufgrund von Abhängigkeiten (?) Zu installieren. Vorschläge, was ich tun kann, um dies zu beheben, wären sehr willkommen.

EDIT: Sieht so aus, als wäre ich nicht der einzige: https://bugs.launchpad.net/ubuntu/+source/mysql-5.7/+bug/1573279

TheGremlyn
quelle
Ich habe gleiches Problem hier .
KernelPanic
1
Musste phpmyadmin deinstallieren, was irgendwie die Abhängigkeitsprobleme verursachte. Nach der Neuinstallation funktioniert alles wieder einwandfrei.
Hinrich
1
Das Do-Release-Upgrade von Ubuntu 14 auf 16 führt ein nicht unterstütztes Upgrade von MySQL 5.5 auf 5.7 durch. Es wird daher erwartet, dass MySQL nach einem Fehler beschädigt wird. + Bug /…
Marco Marsala
1
@MarcoMarsala Ich weiß nicht, ob wir sagen können, dass MySQL nach dem Upgrade von Ubuntu 14 auf 16 voraussichtlich kaputt sein wird, obwohl es wohl von Ihrer Perspektive abhängt. Für den Durchschnittsbenutzer wird mit Sicherheit keine LTS-Upgrade-Unterbrechung wie MySQL erwartet. Es ist jedoch überraschend, dass es beim Testen nicht erwischt wurde.
TheGremlyn
apt install phpmyadmin - Reinstall behebt die oben genannten Probleme, ohne dass man Mysql berühren muss, nachdem ... go figure
Andy

Antworten:

119

Die Anweisungen @ andrew-beerman sind auf dem richtigen Weg, obwohl sie mir nicht ganz klar sind und mehr zu empfehlen scheinen, als notwendig ist. Ich habe die Antwort von oben und einen hilfreichen Beitrag im Bug-Thread zusammengestellt.

Dies sind die Schritte, die ich unternommen habe, um dies zu korrigieren:

  1. Sichern Sie Ihr my.cnf filein /etc/mysqlund entfernen Sie es oder benennen Sie es um

    sudo mv /etc/mysql/my.cnf /etc/mysql/my.cnf.bak
    
  2. Entfernen Sie den Ordner /etc/mysql/mysql.conf.d/mit

    sudo rm -r /etc/mysql/mysql.conf.d/
    
  3. Stellen Sie sicher, dass Sie keine my.cnfDatei haben, die an einem anderen Ort (in meinem Heimatverzeichnis!) Oder in /etc/alternatives/my.cnfGebrauch ist

    sudo find / -name my.cnf
    
  4. Sichern und Entfernen von /etc/mysql/debian.cnfDateien (nicht sicher, ob erforderlich, aber nur für den Fall)

    sudo mv /etc/mysql/debian.cnf /etc/mysql/debian.cnf.bak
    sudo apt purge mysql-server mysql-server-5.7 mysql-server-core-5.7
    sudo apt install mysql-server
    
  5. Falls Ihr Syslog einen Fehler wie "mysqld: Verzeichnis von '/etc/mysql/conf.d/' kann nicht gelesen werden" anzeigt, erstellen Sie einen symbolischen Link:

    sudo ln -s /etc/mysql/mysql.conf.d /etc/mysql/conf.d
    

    Dann sollte der Dienst beginnen können sudo service mysql start.

Das hat es geschafft!

TheGremlyn
quelle
17
Nach all diesen Operationen (ich habe es zuvor getan) habe ich immer noch die gleichen Fehlerprobleme ...
Serge
5
Sie müssen jede my.cnf. * Aus dem Verzeichnis / etc / mysql entfernen. Suchen Sie nach my.cnf.backup, my.cnf.fallback und my.cnf.migrated - all diese Dateien müssen ebenfalls entfernt werden (Backup zuerst!)
hitzi
8
@ SergiiP sudo find / -name "my.cnf"könnte sich als nützlich erweisen.
starbeamrainbowlabs
1
mysql-server-core- sollte mysql-server-core-5.7 sein. Ansonsten klappte es wie ein Zauber. Danke!
David Tay
1
+1. Du hast meinen Tag gerettet! Auch morgens und abends! Ich steckte fest.
Max Yudin
56

Heute habe ich das gleiche Problem bekommen, nachdem ich viele Lösungen ausprobiert hatte, fand ich, dass das Problem der Befehl war sudo systemctl disable mysql.service, mit dem ich den automatischen Start von MySQL deaktivierte. Um dies zum sudo systemctl enable mysql.serviceLaufen zu bringen, habe ich den MySQL-Server mit dem Befehl wieder aktiviert und den Upgrade-Prozess und erneut ausgeführt es endete perfekt.

Naruto Biju-Modus
quelle
5
Ich bin auf dasselbe Problem gestoßen und das gleiche Problem hat bei mir funktioniert.
Allen
5
Hat für mich gearbeitet. Hat hier jede Lösung, mysql hat danach funktioniert.
Błażej Michalik
6
Gleiche hier - dies sollte Top-Post sein.
a1phanumeric
3
Arbeitete auch für mich! Ich danke dir sehr. Um genau zu sein, führen Sie Folgendes aus: sudo systemctl enable mysql.serviceund danach sudo apt install -f.
Fernando Paladini
Das ist alles was ich tun musste. Ich hatte Autostart deaktiviert, wie von @naruto beschrieben. Ich habe den Autostart aktiviert und "sudo apt upgrade" ausgeführt. Jetzt behoben. Sollte die beste Antwort sein. Dies ist eine viel einfachere, standardisiertere und weniger störungsanfällige Lösung.
Jack Holt
20

Ihre Fehlermeldung enthält diese Zeile:

subprocess installed post-installation script returned error exit status 1

Dies installed post-installation scriptwird jedoch nicht namentlich erwähnt. Nachdem ich viel gebastelt hatte, fand ich heraus, dass es (in meinem Fall) heißt /var/lib/dpkg/info/mysql-server-5.7.postinst.

Öffnen Sie diese Datei mit sudo vi /var/lib/dpkg/info/mysql-server-5.7.postinstoder Ihrem bevorzugten Editor.

An der Spitze Änderungslinie 3 (oder so): set -eauf set -x, die Datei zu speichern. (Option -eist "Beenden bei Fehlern", -xbedeutet "Befehl explizit ausführen", vermutlich)

Führen Sie aus sudo dpkg --configure -a --log /tmp/dpkg.log (die Option --log ist optional). Sie können auch einfach ausführen, apt upgradewenn Sie wissen, dass dies das einzige Paket ist, das aktualisiert wird.

Jetzt erhalten Sie eine ausführliche Ausgabe des mysql-server-5.7.postinstBash-Skripts und können herausfinden, was nicht stimmt.

In meinem Fall hat es erfolglos versucht, es (erneut) auszuführen mysql_upgrade, aber das wurde für meine angepasste MySQL-Installation nicht benötigt. Ich war mir sicher, dass ich es zuvor erfolgreich manuell ausgeführt habe und alles in Ordnung war.

Also habe ich Zeile 321 kommentiert (für ältere mysqld-Versionen versuchen Sie es mit Zeile 281).

#mysql_upgrade --defaults-file=/etc/mysql/debian.cnf || result=$?

und der Befehl, der zuvor fehlgeschlagen ist sudo apt upgrade(führen Sie ihn erneut aus), wurde erfolgreich beendet und dpkg hat den Fehlerstatus für dieses Paket entfernt.

Jetzt können Sie die zurück set -xzu set -e( siehe oben). Und optional die mysql-upgrade-Zeile auskommentieren.

Zusätzliche Arbeit kann erforderlich sein, wenn Sie Ihre mysql-Datenpartition an einen nicht standardmäßigen Speicherort verschoben haben. Ich bin von meinem /var/lib/mysql/dataauf ein anderes Laufwerk über Symlink umgezogen . Dann müssen Sie möglicherweise den symbolischen Link vor der postinstSkriptmanipulation vorübergehend entfernen . Erstellen Sie es dann nach dem Ausführen des Paket-Upgrades neu.

Nach dem nächsten Minor-Versions-Upgrade des mysqld-Debian-Pakets kann dieses Problem mit dem /var/lib/dpkg/info/mysql-server-5.7.postinstSkript erneut auftreten.

knb
quelle
Am
RyanNerd
Mir ist genau dasselbe passiert, und Ihre Schritte haben es gelöst. Bur für mich mein mysql_upgrade-Aufruf war auf der Leitung 320. Können Sie erklären, warum es einen Wert ungleich Null zurückgibt, wenn es vom postinst-Skript aufgerufen wird?
Emiliopedrollo
@emiliopedrollo Nein, ich kann es hier nicht erklären. Aber ich denke, die Zeilennummer ist jetzt 320, weil die Paketbetreuer kürzlich das Postinstall-Skript erweitert haben. Ich habe neulich dasselbe beim letzten Ausführen des Software-Updaters beobachtet (der ein neues mysql-deb-Paket enthielt). .
Knb
Vielen Dank! Mit konnte set -eich das genaue Problem herausfinden - MySQL hatte keinen Zugriff für den in angegebenen Ubuntu-Systembenutzer /etc/mysql/debian.cnf . Also fügte ich diesen Benutzer zu MySQL hinzu und gewährte ihm Privilegien, lief dpkgerneut und es funktionierte!
Allen Hamilton
17

Die Anweisungen hier haben das Problem auf meinem Server behoben: https://bugs.mysql.com/bug.php?id=72722

Ich kann den Schmerz verstehen, wenn sich Ihr System in einem inkonsistenten Zustand befindet, aber wir sollten uns nicht um die gesamte Situation kümmern und Schritt für Schritt vorgehen, um das System sauber zu halten.

Lassen Sie uns zuerst den aktuellen Status aller MySQL-Pakete auf dem Computer sehen, indem Sie Folgendes verwenden: dpkg -l | grep mysql (Bitte die Ausgabe ohne die letzte Spalte einfügen)

Die erste Spalte gibt den aktuellen Status des Pakets an. Hier sind die möglichen Optionen:

ii) Installierte rc) Entfernte Konfigurationsdateien bleiben erhalten (Dies sollte der Status aller Pakete sein, die Sie mit 'apt-get remove' entfernt haben und die Konfigurationsdateien unter / etc nicht entfernen)

Damit dies funktioniert, müssen Sie 'apt-get purge <pkg-name>' ausführen, bis Sie in der obigen Liste keine Pakete mehr sehen.

Bitte denken Sie daran, dass einige Pakete, die keine MySQL-Server sind, wie python-mysql.connector und python-mysqldb, falls installiert, nicht entfernt werden müssen, da sie keine Auswirkungen auf diese Situation haben.

Wir werden auf jeden Fall versuchen, unsere Dokumente erneut zu besuchen, um zu sehen, wie wir Benutzer davor schützen können, in diese Schwierigkeiten zu geraten. Vielen Dank, dass Sie uns Ihr Feedback ausführlich mitteilen.

Andrew Beeman
quelle
2
Danke für dpkg -l | grep mysql . Es half, die Richtung zu verstehen.
Max Yudin
befehl war falsch zum bereinigen muss es sein sudo apt-get purge <pkg-name>ich habe es mit einem edit behoben aber: ich <habe unicode zeichen für das verwendet weil es sonst nicht angezeigt würde. Seien Sie gewarnt, kopieren Sie diesen Befehl
einfügen
3

In meinem Fall habe ich mit strace gesehen, dass / var / run / mysqld / nicht existiert und mysqld die Datei mysqld.sock nicht erstellen kann.

Diese Befehle lösten mein Problem:

mkdir /var/run/mysqld
chown mysql.mysql /var/run/mysqld
chmod 700 /var/run/mysqld

Jetzt:

systemctl start mysql

Und MySQL funktioniert wieder :)

Leonardo Catalinas
quelle
Ich schlage vor, dass Sie diese Zeilen ab Zeile 25 zu / usr / share / mysql / mysql-systemd-start hinzufügen. Dann müssen Sie dieses Verzeichnis nicht nach jedem Neustart neu erstellen. : wenn [ ! -d / run / msyqld]; dann mkdir -p -m0755 / run / mysqld || {echo "Kann / run / mysqld nicht erstellen"; Ausfahrt 1; } chown mysql: mysql / run / mysqld || {echo "Chown / run / mysqld nicht möglich"; Ausfahrt 1; } fi
scoobydoo
3

In meinem Fall könnte ich das Problem durch Hinzufügen lösen

# Allow log file access
/home/system/var/log/mysql.err rw,
/home/system/var/log/mysql.log rw,
/home/system/var/log/mysql/ r,
/home/system/var/log/mysql/** rw,

zu /etc/apparmor.d/local/usr.sbin.mysqld

Weitere Details finden Sie in meiner Antwort (von ChristophS) auf stackoverflow.

ChristophS
quelle
0

Ich hatte das gleiche Problem. Ich habe mehrmals versucht, mysql neu zu installieren, hatte aber keinen Erfolg.

Ich fand heraus, dass das Problem für mich war, dass ein anderer mysql-Prozess bereits lief.

Im Detail:

Nachdem ich sorgfältig gelesen habe, melde ich mich an /var/log/mysql/error.logund finde:

[FEHLER] Server kann nicht gestartet werden: Bindung an TCP / IP-Port: Adresse wird bereits verwendet

[FEHLER] Haben Sie bereits einen anderen mysqld-Server auf Port 3306?

Anscheinend hat bereits eine andere Anwendung den Port verwendet.

Ich habe es überprüft mit ps -aux | grep 3306:

$ ps -aux | grep 3306
milkovs+  6802  0.0  0.0  16336  1084 pts/19   S+   21:39   0:00 grep --color=auto 3306
mysql    14706  0.0  0.3 1270192 13916 pts/2   Sl   Aug19   0:29 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --skip-grant-tables --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306 --log-syslog=1 --log-syslog-facility=daemon --log-syslog-tag=

Und ich habe den laufenden Prozess beendet sudo kill -15 14706

Dann habe ich mysql gestartet: /etc/init.d/mysql start

Endlich funktioniert MySQL für mich! Ich hoffe es hilft jemandem.

milkovsky
quelle
0

Keine der Antworten auf dieser Seite hat für mich funktioniert.

Am Ende ging ich zur Oracle-Downloadseitemysql-apt-config_0.8.8-1_all.deb , lud MySQL von Oracle Repo herunter und installierte es:

sudo dpkg -i mysql-apt-config_0.8.8-1_all.deb
sudo apt update
sudo apt install mysql-server
ostrokach
quelle
2
isntall-> installTippfehler. Dumme SO erlaubt mir nicht, ein Zeichen zu korrigieren.
Csaba Toth
Warum sind Sie zum Orakel gegangen, um
mysql
@Sinscary Diese Antwort stammt aus einer früheren Zeit, aber lag es wahrscheinlich daran, dass sie eine neuere Version als der Systempaket-Manager hatten?
Ostrokach
0

Ich hatte das Problem jetzt auf einigen Servern. Das Update war, apt install phpmyadmin --reinstall auszuführen

welches das oben genannte Problem gelöst hat (ohne dass man danach mysql anfassen muss)

Andy
quelle