Als Webserver für die Entwicklung meiner Applikationen und Webseiten benutze ich die umfangreichen Funktionen von XAMPP.
Seit dem ich auf einer XAMPP Version mit einer PHP 7.x Version entwickle, habe ich bereits öfter das Problem gehabt, dass sich aus heiterem Himmel die MySQL Datenbank nicht mehr starten ließ. Das zeigte sich wie folgt: Beim Klick auf den MySQL „starten“ Button sah für 2 Sekunden zunächst alles aus wie immer. Nach ca. 2 Sekunden dann beendete sich MySQL und im XAMPP Control Panel Log Fenster wurde folgender Fehler angezeigt:
12:29:33 [mysql] Statusänderung erkannt: gestartet
12:29:35 [mysql] Statusänderung erkannt: gestoppt
12:29:35 [mysql] Fehler: MySQL wurde unerwartet beendet
12:29:35 [mysql] Ursache könnte ein geblockter Port, fehlende Abhängigkeiten,
12:29:35 [mysql] fehlende Berechtigungen, ein Absturz oder ein Abbruch einer anderen Methode sein.
12:29:35 [mysql] Drücke den Logs Button um error logs zu sehen und prüfe
12:29:35 [mysql] im Windows Event Viewer für weitere Hinweise
12:29:35 [mysql] Wenn du weitere Hilfe benötigst, kopiere den kompletten Inhalt des Log Fensters
12:29:35 [mysql] und füge ihn als Ergänzung in einem neuen Forum Eintrag hinzu.
…hilft auch, ist aber nicht sehr Elegant
Nach einigem Herumprobieren habe ich mich – letztendlich auch aus zeitlichen Gründen – entschlossen die XAMPP Software in einem anderen Verzeichnis erneut zu installieren. Nachdem ich in der „frischen“ Installation die Funktion der MySQL Datenbank getestet hatte, habe ich dann die DB-Dateien aus dem mysql/data Verzeichnis der defekten Installation in die „frische“ Umgebung kopiert … und zwar zunächst nur für einzelnen (aktuelle) Projekte.
Dann war erstmal Ruhe und alles funktionierte prima.
…bis heute Morgen: Das gleiche Problem trat wieder auf. MySQL ließ sich nicht starten. Grund genug, mir die Sache etwas genauer anzuschauen…
Wer suchet, der findet…
Zunächst habe ich mir natürlich das MySQL Logfile angesehen. Allerdings war dort kein Hinweis auf kritische Fehler zu finden. Auch als ich den Abbruch mehrfach forciert habe, gab es keine neuen Erkenntnisse in dieser Logdatei. Also Sackgasse.
Die nächste Idee, die mysql.exe über die Kommandozeile zu starten zeigte das gleiche Verhalten: nach wenigen Sekunden beendete sich mysql.exe wieder. Hier gab es lediglich den Fehler „cannot connect to localhost (Error unknown)“
Dann habe ich mich kurz von den vielen Google Treffern zu diesem Problem iritieren lassen und habe mir die Nutzung des MySQL Standard-Ports 3306 auf meinem Rechner angesehen. Das Ergebnis war vorhersehbar: kein Programm oder Dienst außer MySQL nutzt diesen Port. Also wieder Sackgasse.
Letzte Station wäre dann noch das windowseigene System-Log. Soetwas kennt man eher als „system.log“ von Unix Systemen. In der Welt der normalen Windows Benutzer hat man eher keinen Bedarf sich die Details zu Systemereignissen anzusehen.
Start der Windows Ereignisanzeige über das Startmenü oder
%windir%\system32\eventvwr.msc /s
Darin finden man eine Aufsummierung der Events in den verschiedenen Fehlerklassen. Um herauszufinden, ob in der Ergenisanzeige Fehler durch den MySQL Abbruch ankommen, habe ich mir die Zählerstände gemerkt, den Fehler provoziert und die Zählerstände nach der Aktualisierung der Ereignisanzeige verglichen.
…und siehe da, es gab neue Meldungen in der Klasse „Fehler„. Bis zu der Fehlerquelle „MySQL“ hat man sich dann schnell durchgeklickt und findet:
Fatal error: Can't open and lock privilege tables: Incorrect key file for table '.\mysql\user'; try to repair it
For more information, see Help and Support Center at http://www.mysql.com.
Also haben wir es mit einer korrupten Tabelle der MySQL Infrastruktur zu tun. Die Tabelle „user“ scheint defekt zu sein.
Lösung…
Zum Glück bringt MySQL eine Reperatur-Funktion für Tabellen mit. Diese lässt sich wie folgt auf die betroffene Tabelle anwenden:
Um eine Tabelle reparieren zu können muss der MySQL Dienst gestartet werden. Haha, wird sich der Eine oder Andere denken, „Genau das ist doch das Problem!“. Aber es geht über die Kommandozeile unter Zuhilfenahme eines weiteren Aufrufparameters:
mysqld --skip-grant-tables
Dieser Aufruft startet MySQL quasi ein einer Art „Light“ Modus.
In einem weiteren Fenster kann man dann einen MySQL-Client starten:
....mysql\bin>mysql
MariaDB [(none)]> use mysql
Database changed
MariaDB [mysql]> repair table user use_frm;
+------------+--------+----------+-------------------------------------+
| Table | Op | Msg_type | Msg_text |
+------------+--------+----------+-------------------------------------+
| mysql.user | repair | warning | Number of rows changed from 0 to 11 |
| mysql.user | repair | status | OK |
+------------+--------+----------+-------------------------------------+
2 rows in set (0.02 sec)
MariaDB [mysql]> exit
Bye
Anschliessend kann der MySQL „Light“ Modus wieder beendet bzw. geschlossen werden. MySQL lasst sich nun wieder wie gewohnt starten und stoppen.
Fazit
Die Windows Ereignisanzeige ist ein wertvolles Hilfsmittel um, zunächst unklare scheinende Fehler, besser analysieren zu können.
Leider konnte ich nicht herausfinden, warum die „user“ Tabelle plötzlich korrupt wurde. Vielleicht kann ich bei zukünftigen fehlern ein Muster erkennen.
Ich hoffe dieser Beitrag kann jemandem dabei helfen dieses Problem schnell zu lösen.
32 thoughts to “Fehler: MySQL wurde unerwartet beendet”
Moin und herzlichen Dank !!!
Ich habe mir zwei .bat – und eine .sql – Datei geschrieben:
sql1.bat
C:/xampp/mysql/bin/mysqld –skip-grant-tables
sql2.bat
C:/xampp/mysql/bin/mysql mysql <sql3.sql
sql3.sql
repair table db use_frm;
exit
Damit geht es im Nu 🙂
Hallo.
Danke für die Rückmeldung! Das Ist sicherlich eine gute Idee. Hoffentlich kommt es nicht so oft zum Einsatz. Falls doch, sollte dem Fehler mal genauer auf den Grund gegangen werden.
Viele Grüße!
Hallo Sebastian,
deine Anleitung hat mir zu 100% geholfen. Ohne diese hätte ich keine Chance gehabt, das Problem zu lösen (außer vielleicht xampp komplett neu zu installieren). Die Tabelle db war der Bösewicht.
Vielen Dank.
Hallo Peter.
Vielen Dank für die Rückmeldung. Das freut mich sehr.
Schöne Feiertage!
Hallo lieber Sebastian, vielen Dank für diese ausführliche Fehlerbehebung, nur leider scheint es bei mir keine Tabelle zu sein, die diese Fehlermeldung und den Stop von MySql verursacht, sondern bei den msc Events steht diese Fehlermeldung: „mysqld.exe: Error on close of C:\xampp\mysql\data\aria_loq_control‘ (Errcode: 9 „BAd file descriptor“)
Was kann ich da machen??? O_O
Ich bin leider kompletter Neuling mit dem Programm und leider auch was Codeeingabe anbelangt…also bitte wirklich einfach erklären ^^ wenn ich einen Neustart machen müsste, verliere ich dann die lokal gespeicherten Homepagedaten? Ich bin echt gerade verzweifelt.. vielen vielen Dank für Deine Hilfe? LG David
Hallo David.
Du könntest mnal verssuchen die Datei C:\xampp\mysql\data\aria_loq_control um zu benennen, sofern sie vorhanden ist. Möglicherweise scheint hier der Zugriff auf die Datei gestört zu sein. Also öffne das Verzeichni C:\xampp\mysql\data\ im Dateiexplorer markiere die Datei und drücke F2 oder klicke mit der rechten Maustaste auf die Datei und wähle „Umbenennen“. Verändere dann den Dateinamen und drücke Enter. Jetzt versuche MySQL zu starten.
Viel Erfolg.
Viele Grüße,
Sebastian
Hi Sebastian,
ich habe gerade deine Seite gefunden und versucht, den Befehl mysqld –skip-grant-tables einzugeben, mir wird allerdings gesagt, „mysql“ konnte nicht gefunden werden… Kannst du mir helfen? Danke schonmal und schöne Ostern!
LG, Petra
Hallo Petra.
Danke für deinen Kommentar. Ohne die Details zu kennen klingt das für mich so als ob du mysqld aus einem anderen Verzeichnis aufruftst, bzw. der Pfad zum MySQL bin nicht in der Liste der bekannten Pfade ist (%PATH%). Versuche mal in das …mysql/bin Verzeichnis zu wechseln und den befehl nochmal auszuführen.
Viel Erfolg.
Viele Grüße,
Sebastian
Hallo Sebastian,
vielen Dank! Ich hatte das gleiche Problem und konnte es mit Hilfe dieser Anleitung (und der Rückfragen dazu) beheben. Es war nur etwas schwierig, der Windows Ereignisanzeige eine aussagekräftige Fehlermeldung abzugewinnen. Nach einigem Hin- und Herklicken und Aktualisieren kam endlich: mysqld.exe: Table‘.\mysql\db‘ is marked as crashed and last (automatic?) repair failed
Es waren (bzw. sind) bei mir InnoDB-Tabellen. Ich erinnere mich auch dunkel, dass ich das letzte Mal vor dem Crash den Apache und den MySQL-Server nicht gestoppt hatte, bevor ich Windows runtergefahren habe.
Große Hilfe! Bei mir war es der table „db“. Vielen Dank!!!
Hallo.
Danke für den Kommentar. Das freut mich!
Viele Grüße!
>…bis heute Morgen: Das gleiche Problem trat wieder auf. MySQL ließ sich nicht starten. Grund genug, mir die Sache etwas genauer anzuschauen…
Ich glaub das Problem tritt generell bei ISAM Datenbanken unter Xampp auf, seit einem Update im Herbst 2019 (oder war es doch 2018?).
Die Ursache ist glaub ich das Herunterfahren des Windows-Rechners während noch die MySQL Hintergrunddienste laufen. Windows scheint die Prozesse aber so richtig mal zu killen 🙂
Von daher vor dem Runterfahren im Xampp Control Panel immer den MySQL (und Apache) Dienst stoppen und Xampp ordnungsgemäß beenden. Seitdem ich das mache habe ich die Abstürze nicht mehr.
Hallo Jan.
Vielen Dank für deinen Kommentar! Ich hatte die gleiche Vermutung. Seit einiger Zeit versuche ich vor dem Herunterfahren bzw. Energiespar-Modus den MySQL Prozess zu beenden. Ich kann bestätigen, dass dies das Vorkommen des Problems verringert oder sogar behebt. Manchmal vergesse ich das Beenden jedoch, hatte aber bisher Glück, dass der Fehler nicht mehr aufgetreten ist. Ich vermute, dass der Fehler durch das „Stören“ einer Schreib- oder Wartungsaktion der Datenbank durch das Herunterfahren hervorgerufen wird.
Viele Grüße,
Sebastian
Auch bei mir ist das Problem mehrfach aufgetaucht. Die in dem unten genannten YouTube-Video gezeigte Reparatur funktionierte auch hier. Interessant dabei, dass in diesem Zusammenhang Tabellen im InnoDB-Format „zerschossen“ wurden. MyISAM hingegen überstanden den Crash unbeschadet. Nachdem ich ich in allen Datenbanken die Tabellen auf MyISAM umgestellt habe, trat der Fehler zwar wieder auf, nur nicht mehr ganz so folgenschwer.
Meines Erachtens nach hängen diese Abstürze mit einem der letzten Windows-Update zusammen.
Hallo, ich habe das gleiche Problem.
1.
C:\xampp7_neu\mysql\bin>mysqld –skip-grant-tables
2021-04-10 18:07:39 0 [Note] mysqld (mysqld 10.3.16-MariaDB) starting as process 2744 …
also funktioniert das wohl.
2. Neues Fenster
C:\xampp7_neu\mysql\bin>mysql
ERROR 2002 (HY000): Can’t connect to MySQL server on ‚localhost‘ (10061)
Wie mache ich am besten weiter?
Hallo Bernd.
Wenn Du „mysqld –skip-grant-tables“ im ersten Fenster gestartet hast, dann prüfe doch mal bitte, ob im XAMPP Control Panal das MySQL Modul als laufend angezeigt wird. Wenn ich mysqld per Command Line starte, dann ändert sich auch entsprechend der Status im XAMPP Control Panel.
Das von Dir beschriebene Verhalten hatte ich so noch nicht erlebt. 🙁
Viele Grüße,
Sebastian
Hallo Sebastian,
ich habe seit kurzem auch das gleiche Problem , dass mysql nicht mehr startet. Der Eventviewer sdagt, dass ein Problem mit der Tabelle ‚.\mysql\db‘ besteht:
Fatal error: Can’t open and lock privilege tables: Table ‚.\mysql\db‘ is marked as crashed and last (automatic?) repair failed
Mein Problem ist, ich blicke nicht wo ich „mysqld –skip-grant-tables“ einfgeben muss? Kommandozeile???
Wäre über Hilfe sehr dankbar.
konnte den Fehler beheben, dadurch dass ich ein Backup von der db-Tabelle eingespielt habe. Scheint wieder so zu funktionieren wie es sollte. Warum die Tabelle korrupt war ist nun die Frage…
Hallo Holger.
Vielen Dank für Deinen Kommentar. Leider habe ich ihn zu spät gelesen. Freut mich, dass der Fehler behoben werden konnte. Aber zu Deiner ursprünglichen Frage: den Befehl „mysqld –skip-grant-tables“ gibst Du auf der Eingabeaufforderung ein. Dazu wechselst Du (in der Eingabeaufforderung (Command Line)) in das Verzeichnis in dem bei Dir MySQL installiert ist. Bei mir ist das „C:\apache\mysql\bin“. Ich hoffe das hilft Dir weiter, falls Du nochmal in die Not kommst das Problem lösen zu müssen.
Viele Grüße,
– Sebastian
Okay danke. Nun verstehe ich es. MfG
Hallo Sebastian,
vielen Dank für Deine superschnelle Antwort!
– Ich lasse beide Fenster offen.
– Wenn ich im ersten Fenster jenen Befehl eingegeben hatte, erscheint nachfolgendes, und ich habe vermutet, daß dies ok. sei:
2020-09-30 20:20:30 0 [Note] Using unique option prefix ‚key_buffer‘ is error-prone and can break in the future. Please use the full name ‚key_buffer_size‘ instead.
2020-09-30 20:20:30 0 [Note] mysqld (mysqld 10.4.11-MariaDB) starting as process 13424 …
Nochmals vielen Dank für Deine Hilfe! Habe parallel gestern Abend auch versucht, XAMPP neu zu installieren, scheitere aber an der Verknüpfung der bisher installierten WORDPRESS mit jener neuen Datenbank. Jedes Mal wird WordPress komplett neu installiert und ich sehe keine von meinen bisherigen Dateien. 🙁
Viele Grüße
Tanja
Hallo Sebastian,
ich habe nach langer Internetrecherche und „Try & Error-Kopieren“ herausgefunden:
1. https://www.youtube.com/watch?v=rk7rBOFLMys
2. Bei mir waren anscheinend genau jene Dateien korrupt: aria_log, multi-master.info.
Es reichte final aus, jene Dateien aus dem Back-up zu kopieren und jetzt läuft es wieder.
Daher vielen Dank für Deine bisherige Hilfe!
Schöne Grüße
Tanja
Hallo Tanja.
Schön, dass Dein Problem behoben ist. Ich wünsche Dir weiterhin viel Erfolg!
Viele Grüße!
– Sebastian
Hallo Tanja,
war ein Super Tip von dir. Vielen Dank
Hallo Sebastian,
vielen Dank für den Tipp. Aber bei mir kommt nach dem Start von mysql der Fehler: ERROR 2002 (HY000): Can’t connect to MySQL server on ‚localhost‘ (10061)
Da werde ich in dieser Richtung weiter suchen.
Viele Grüße, Rolf
Habe deinen Lösungsansatz ausprobiert. Allerdings crasht MySQL auch bei dieser Methode nach zwei Sekunden wieder.
Da das Problem bei mir regelmäßig auftritt, werde ich mir wohl eine andere Entwicklungsumgebung suchen müssen.
Hallo.
Leider kann ich das Problem nicht nachstellen. Daher würde ich nochmal enpfehlen Google zu bemühen und nach anderen Lösungsansätzen zu suchen.
Viel Erfolg!
Hallo Sebastian, leider bin ich nicht in der Lage die Reparatur nachzuvollziehen. Bin nicht so versiert. Ich würde mich über deine Unterstützung freuen. Gekommen bin ich bis C:\xampp\mysql\bin>mysql und bekomme dann folgende Fehlermeldung: ERROR 2002 (HY000): Can’t connect to MySQL server on ‚localhost‘ (10061)
Vielen Dank im Voraus
Hallo.
Wichtig ist, dass du zwei Fenster mit der Eingabeaufforderung öffnest:
Im ersten Fenster startest du MySQL mit dem Befehl: [PFAD zu MySQL\bin]\mysqld –skip-grant-tables
Im zweiten Fenster kannst du dann einfach [PFAD zu MySQL\bin]\mysql starten.
Versuche das nochmal. Viel Erfolg!
Sebastian
Hallo Sebastian,
ich habe gleiches Problem wie Stefan, habe aber exakt in einem separaten DOS-Fenster versucht, MySQL wie folgt zu starten, immer mit gleichem Ergebnis wie bei Stefan:
– cd c:\xampp\mysql\bin – um den Pfad zu wechseln, dann eingetippt: MySql
– ohne den Pfad vorher zu wechseln: c:\xampp\mysql\bin\mysql
– Pfad gewechselt mit cd c:\xampp\mysql\bin dann eingetippt: start Mysql
Leider bekomme ich in allen 3 Fällen obige Fehlermeldung. Im ersten Fenster zuvor meine ich, daß alles richtig verlaufen ist. Weist Du evtl. Rat? Herzlichen Dank vorab!
Viele Grüße
Tanja
Hallo Tanja.
Ich muss nochmal nachfragen: Hat der Start des Dienstes im …\mysql\bin Verzeichnis mit dem Befehl „mysqld –skip-grant-tables“ funktioniert? Wichtig ist, dass Du dieses Fenster offen lässt bzw. den Dienst im DOS Fenster nicht beendest.
Viele Grüße,
Sebastian
Ich hatte das gleiche Problem und bin nach vielen Versuchen auf diesen Tipp gestoßen – in wenigen Sekunden war das Problem behoben. Vielen Dank für diese Anleitung.