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

  • Ascan

    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 🙂

    Antworten
    • Sebastian

      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!

      Antworten
  • Peter Hölzer

    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.

    Antworten
    • Sebastian

      Hallo Peter.
      Vielen Dank für die Rückmeldung. Das freut mich sehr.
      Schöne Feiertage!

      Antworten
  • David

    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

    Antworten
    • Sebastian

      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

      Antworten
  • Petra

    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

    Antworten
    • Sebastian

      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

      Antworten
  • Eva

    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.

    Antworten
  • User

    Große Hilfe! Bei mir war es der table „db“. Vielen Dank!!!

    Antworten
    • Sebastian

      Hallo.
      Danke für den Kommentar. Das freut mich!
      Viele Grüße!

      Antworten
  • Jan

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

    Antworten
    • Sebastian

      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

      Antworten
  • Michael

    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.

    Antworten
  • Bernd Bund

    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?

    Antworten
    • Sebastian

      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

      Antworten
  • Holger

    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.

    Antworten
    • Holger

      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…

      Antworten
      • Sebastian

        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

        Antworten
        • Holger

          Okay danke. Nun verstehe ich es. MfG

          Antworten
  • Tanja

    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

    Antworten
    • 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

      Antworten
      • Sebastian

        Hallo Tanja.

        Schön, dass Dein Problem behoben ist. Ich wünsche Dir weiterhin viel Erfolg!

        Viele Grüße!
        – Sebastian

        Antworten
      • Andre

        Hallo Tanja,

        war ein Super Tip von dir. Vielen Dank

        Antworten
  • Rolf Schädlich

    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

    Antworten
  • Tobias

    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.

    Antworten
    • Sebastian

      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!

      Antworten
  • Stephan

    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

    Antworten
    • Sebastian

      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

      Antworten
      • Tanja

        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

        Antworten
        • Sebastian

          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

          Antworten
  • Georg

    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.

    Antworten

Leave a comment

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.