MySQL wurde unerwartet beendet

hawaiian

Mitglied
Hallo zusammen,

seit Wochen habe ich das offensichtlich vielfach bekannte Problem, dass ich MySQL nicht mehr öffnen kann, weil laut Fehlerhinweis MySQL unerwartet beendet wurde. Was mehrere Jahre problemlos lief, geht jetzt nicht mehr. Und was das Schlimmste daran ist, ich kann die Ursache des Problems nicht finden.

Ich habe inzwischen das Internet kreuz und quer durchgegoogelt und die angebotenen Lösungsmöglichkeiten ausprobiert – mit keinem oder nur begrenztem Erfolg. Ein geblockter Port scheidet aus. Dies habe ich mehrfach überprüft.

Die Windows-Ereignisanzeige listet folgende Fehler auf:

mysqld.exe: Table '.\mysql\db' is marked as crashed and last (automatic?) repair failed
Fatal error: Can't open and lock privilege tables: Table '.\mysql\db' is marked as crashed and last (automatic?) repair failed
mysqld.exe: Error writing file …\Xampp\mysql\data\aria_log_control' (Errcode: 9 "Bad file descriptor")

Meine bisherigen Versuche (entsprechend den Vorschlägen aus unterschiedlichen Netzquellen):
  • Start mit Administratorrechten – hat einmal geklappt, am nächsten Tag nach erneutem Auftauchen des Problems nicht mehr.
  • In der My.ini Konfigurationsdatei von Mysql im Abschnitt [mysqld] folgendes hinzugefügt: skip-grant-tables – hat sofort geklappt, ich konnte MySQL starten. Am nächsten Tag war’s mit der Freude wieder vorbei. Ich hatte zuvor über Operationen alle Tabellen überprüft und es wurden alle als ok befunden.
  • Umbenennen des Ordners data in data_alt und des Ordners backup in data (beides im Ordner mysql). Der Zugang war danach wieder möglich. In phpMyAdmin waren aber die Datenbanken nicht mehr da.
  • Vorgehen wie hier hier erläutert, d. h. ich habe die Backup-Dateien in den data-Ordner kopiert. Der Zugang war danach wieder möglich. In phpMyAdmin waren aber die Datenbanken, und jetzt wird es für mich ganz verwirrend, nur noch zum Teil da. Genauer gesagt, eine Datenbank mit zwei Tabellen war da, brav befüllt mit rund 9.000 Datensätzen. Das ist zugleich diejenige, in der ich zuletzt nichts ergänzt oder geändert hatte. Zwei weitere Datenbanken mit Tabellen wurden zwar angezeigt. Klickt man aber auf die Tabellen (in denen ich noch tags zuvor Änderungen vorgenommen hatte), erscheint der Hinweis, dass sie nicht existieren. Will ich die Datenbank löschen, erscheint der Hinweis, dass dies nicht ginge, weil sie nicht leer sei (Fehler: 41 "Directory not empty"). Will ich sie neu anlegen, geht dies nicht, weil sie schon vorhanden sein soll. Aus diesem Kreislauf komme ich nicht heraus.
Ich habe mittlerweile Xampp 4x neu installiert. Danach geht es wieder zwei Wochen oder so, um dann zu enden wie heute, also mit der „unerwarteten Beendigung“. Dies aber kann keine Dauerlösung sein. Ich muss ja auch jedes Mal die Datenbanken und Tabellen neu anlegen. Auch wenn mir keine Datensätze verlorengehen, weil ich sie regelmäßig exportiere (als sql-Dateien) und nach Neuinstallation wieder importiere.

Meine Fragen:
  • Hat jemand eine Idee, was diesen Fehler auslösen könnte?
  • Die unter Punkt 4 dargestellte Lösung geht zwar sehr schnell. Wenn aber die Tabellen fehlen, nützt mir das auch nichts. Ich könnte mir aber vorstellen, dass ich insoweit vielleicht einen dummen Fehler begehe. Welcher könnte das sein?
  • Gibt es noch andere von mir nicht geschilderte Lösungsmöglichkeiten?
  • Kann es sein, dass das Problem mit Windows 11 zusammenhängt? Unter Windows 10 jedenfalls ist das nie passiert. Hat da vielleicht jemand etwas gehört oder gelesen?
  • Mit dem Verweis in der Windows-Ereignisanzeige auf die gecrashte Tabelle '.\mysql\db' weiß ich auch nichts anzufangen. Die wurde, meine ich, im Rahmen der Installation erstellt. Oder irre ich mich da?
Meine letzte Hoffnung vor einer 5. Neuinstallation ist nun dieses Forum. Ich kann (und will) mir nicht vorstellen, dass dieses offenbar häufig auftretende Problem nicht ergründet und gelöst werden kann.

Viele Grüße
hawaiian

PS:
Eine "Alternativfrage" hätte ich auch noch. Seit einer der letzten Neueinspielungen taucht bei einer Datenbankabfrage folgender Hinweis auf:
Deprecated: file_exists(): Passing null to parameter #1 ($filename) of type string is deprecated …

Der maßgebliche php-Code lautet:
PHP:
if (file_exists($row->wm)) echo '<img src="'.$row->wm.'" width="25" height="25">';

Bislang bereitete der Code keine Schwierigkeiten. Nun aber scheint er überholt zu sein. Auch insoweit bin ich noch nicht fündig geworden, gebe aber zu, infolge des anderen Problems noch nicht intensiv geforscht zu haben.
 
Hast du mal den Datenträger, sprich HDD oder SSD, überprüft, ob dieser vielleicht ein Problem hat? Ich selber benutze zwar kein XAMPP, habe MariaDB, Apache und PHP einzeln installiert, aber diese Probleme kenne ich nicht. Als Test könntest du das Data-Verzeichnis mal auf einen USB-Stick legen und in der my.ini unter der Sektion mysqld das Verzeichnis eintragen, z.B.

datadir="e:/data"

Die Fehlermeldung sagt aus, dass in $row->wm kein Wert vorhanden ist, dass könnte auch mit dem Datenbank-Problem zusammenhängen.
 
Hallo m.scatello,

zunächst mal vielen Dank für deine Antwort.

Ja, Datenträger ist in Ordnung. Ich habe Xampp (neueste Version 8.1.5) gestern nun neu installiert. Tja, was soll ich sagen. Ich konnte MySQL öffnen, habe eine Datenbank angelegt und Tabellen importiert, anschließend ein paar Datensätze angelegt. Das Ganze wollte ich dann, wie gehabt, als sql-Datei zur Sicherung exportieren. Das aber ging nicht (erstmals überhaupt), egal, welchen Browser ich genutzt habe. Also habe ich wieder recherchiert und bin auf einer englischsprechenden Seite auf den Hinweis gestoßen, dass die Versionen 8.1.4 und 8.1.5 insoweit einen Bug aufweisen. Jedenfalls meine ich, das so verstanden zu haben. Ist das nicht zum Verzweifeln?

Heute habe ich nun wieder Version 8.1.2 installiert. Und jetzt geht gar nichts mehr. Jetzt kann ich MySQL öffnen, aber Apache nicht mehr. Ich bin nun erstmal am Ende, werde eine Pause machen, alles deinstallieren und anschließend einen neuen Versuch starten.

Zu der Fehlermeldung Deprecated: file_exists():: Der Code sollte bewirken (und das tat er auch), dass, wenn zutreffend, ein Bild erscheinen oder aber der Tabellenbereich leer bleiben sollte. In phpMyAdmin ist dann entweder xxx.png hinterlegt oder die Spalte ist mit „Null“ gekennzeichnet. Lasse ich „if (file_exists($row->wm))“ weg, wird anstatt des Bildes dessen Platzhalter sichtbar. Und das schaut nun wirklich nicht sehr schön aus. Deshalb also file_exists. Und, wie gesagt, dies hat bis vor kurzem bestens funktioniert.
 
Und, wie gesagt, dies hat bis vor kurzem bestens funktioniert.
Ändert aber nichts an der Tatsache, dass das falsch ist. Richtig wäre
PHP:
if ($row->wm && file_exists($row->wm))

Und was XAMPP angeht, das ist nicht mein Ding. XAMPP hat immer wieder mal Fehler und liefert auch zumindest für mich einen zu großen Overhead, den ich nie brauche, daher habe ich bei mir alles selber installiert, was gar nicht so schwer ist. MariaDB und Apache habe ich dabei als Dienst eingerichtet, der Rest ist wirklich nur etwas Konfiguration.
 
So, alles deinstalliert, Festplatten einschließlich Registry gesäubert, Xampp 8.1.2 nochmals neu installiert, Datenbank angelegt, Tabelle importiert und ein paar neue Datensätze angelegt. Spannung, ob Export klappt. Ja! Scheint also tatsächlich ein Bug zu sein in den neuesten beiden Versionen.

Xampp beendet. Erneute Spannung. Klappt der Neustart? Ja! Soweit also alles wieder in Ordnung. Mal sehen, wie lange.

Die eigentliche Ursache des geschilderten Problems konnte ich ja nach wie vor nicht finden. Vielleicht gibt es hier noch den einen oder anderen Tipp dazu. Mir kam noch der Gedanke, ob nicht der Übergang des PC's in den Ruhezustand das "unerwartete Beenden von MySQL" auslösen könnte.

Dir, m.scartello, nochmals meinen Dank. Ich konnte jetzt auch deine "file_exists"-Richtigstellung erfolgreich testen. Ein Lichtblick an diesem ansonsten trüben Sonntag. :)
 
  • Kann es sein, dass das Problem mit Windows 11 zusammenhängt? Unter Windows 10 jedenfalls ist das nie passiert. Hat da vielleicht jemand etwas gehört oder gelesen?
Erwartest du jetzt eine ehrliche oder höfliche Antwort?

Was wirft denn netstat aus?
MySQL crasht auch, wenn der Port, der MySQL zugewiesen ist, bereits von einem anderen Programm genutzt wird
 
Erwartest du jetzt eine ehrliche oder höfliche Antwort?
Sorry, aber ich verstehe die Frage nicht. Eine unehrliche Antwort wird niemandem nützen, aber warum sollte sie deswegen unhöflich sein? :unsure:

Danke für den Hinweis auf den Port. Diese Möglichkeit scheidet aus, wie ich in meinem Eingangsposting schon geschildert hatte.
 
Zurück