MySQL macht “Peng”…

Heute hatte ich es wieder einmal mit einem abgeschossenen MySQL-Server zu tun, dieses Mal von einem Neukunden. Zur Abwechslung hat dieses Mal der Hoster (!) an der Maschine herumgespielt und sie ohne den Kunden zu informieren während des Betriebs neu gestartet — ohne die Dienste herunterzufahren.

Da fässt man sich nur noch an den Kopf. Das Resultat war natürlich klar — die Datenbank war kaputt.

Was tun… Einen Dump des aktuellen Stands der Datenbank ziehen ging nicht. Schreibzugriffe verhindern per LOCK ging nicht. Per MySQL reparieren ging auch nicht, denn die betroffenen Tabellen waren zum Teil InnoDB-Tabellen, die man lt. MySQL nicht reparieren kann. Ich habe dann den MySQL-Server neu installiert und vorher /var/lib/mysql aufgeräumt. Nun wirds interessant: Ein einige Stunden altes Backup, von dem ich annahm, dass es keine Fehler hatte, konnte ich zwar einspielen. Beim ersten Starten des MySQL-Daemons wurde kein Fehler angezeigt — bei den folgenden Neustarts aber schon: Fehlerhafte Tabellen…. WTF?

Das konnte nicht sein. Ein Problem mit dem Dateisystem konnte es auch nicht sein. Testweise habe ich die MySQL-Dateien auf eine andere Partition geschoben. Das Ergebnis war das gleiche. So langsam gingen mir die Ideen aus, wie ich das Problem schnell beheben konnte. Die nächste Idee: Wenn InnoDB-Tabellen nicht repariert werden können, nehmen wir eben MyISAM-Tabellen. Also den Dump entsprechend manipuliert und wieder eingespielt — voila. Ohne REPAIR wohlgemerkt.

Der Kunde war gerettet und der Abend gleich mit.