it-swarm.com.de

16.04 Upgrade brach MySQL-Server

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.

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

126
TheGremlyn

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 Ihren my.cnf file in /etc/mysql und entfernen Sie ihn oder benennen Sie ihn 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.cnf -Datei haben, die an einer anderen Stelle (in meinem Heimatverzeichnis!) Oder in /etc/alternatives/my.cnf gespeichert ist

    Sudo find / -name my.cnf
    
  4. Sichern und entfernen Sie /etc/mysql/debian.cnf -Dateien (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 in der Lage sein, mit Sudo service mysql start zu beginnen.

Das hat es geschafft!

117
TheGremlyn

Heute habe ich das gleiche Problem, nachdem ich viele Lösungen ausprobiert hatte und festgestellt habe, dass das Problem der Befehl Sudo systemctl disable mysql.service war, mit dem ich den automatischen Start von MySQL deaktiviert habe. Damit es funktioniert, habe ich den MySQL-Server mit dem Befehl Sudo systemctl enable mysql.service und führen Sie den Upgrade-Prozess erneut aus und er wurde perfekt beendet.

55

Ihre Fehlermeldung enthält diese Zeile:

subprocess installed post-installation script returned error exit status 1

Dieser installed post-installation script wird jedoch nicht namentlich erwähnt. Nachdem ich viel gebastelt hatte, fand ich heraus, dass der Name (in meinem Fall) /var/lib/dpkg/info/mysql-server-5.7.postinst ist.

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

Ändern Sie oben Zeile 3 (oder so): set -e in set -x, speichern Sie die Datei. (Option -e ist "Exit bei Fehlern", -x bedeutet "Befehl explizit ausführen", vermutlich)

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

Jetzt erhalten Sie eine ausführliche Ausgabe des Bash-Skripts mysql-server-5.7.postinst, und Sie können herausfinden, was falsch ist.

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

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 (erneut ausführen), wurde erfolgreich beendet und dpkg hat den Fehlerstatus für dieses Paket entfernt.

Jetzt können Sie den set -x auf set -e (oben erwähnt) zurücksetzen. 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 habe meinen von /var/lib/mysql/data über Symlink auf ein anderes Laufwerk verschoben. Dann müssen Sie möglicherweise die symbolische Verknüpfung vor der Manipulation des Skripts postinst vorübergehend entfernen. Erstellen Sie es nach dem Ausführen des Paket-Upgrades erneut.

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

20
knb

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 machen.

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.

17
Andrew Beeman

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 Informationen finden Sie in meinem answer (von ChristophS) bei stackoverflow.

3
ChristophS

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 :)

3

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

Am Ende ging ich auf die Seite Oracle-Downloads , lud mysql-apt-config_0.8.8-1_all.deb herunter und installierte MySQL von Oracle Repo:

Sudo dpkg -i mysql-apt-config_0.8.8-1_all.deb
Sudo apt update
Sudo apt install mysql-server
0
ostrokach

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 mich sorgfältig durchgelesen habe, logge ich mich in /var/log/mysql/error.log ein und 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 mit ps -aux | grep 3306 überprüft:

$ 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.

0
milkovsky

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)

0
Andy