Open Source im professionellen Einsatz

MySQL: Wartung, Überwachung, Problembehebung

Gekonnt reparieren

Auch eine zuverlässige Software wie MySQL kommt nicht ohne Wartung über die Runden. Fragmentierte Tabellen, seltsame Fehlermeldungen oder korrupte Datenbanken treten zwar selten auf, kommt es aber dennoch zu solchen Problemen, hilft sich der Admin mit Bordmitteln einfach selbst.

MySQL gilt als Webdatenbank schlechthin. Auf Linux ist sie das am häufigsten eingesetzte Management-Werkzeug - wohl auch, weil kaum Probleme im Betrieb zu erwarten sind. Denn in der Regel summt die Datenbank fröhlich vor sich hin und liefert derweil klaglos alle Daten, die der Benutzer benötigt.

Aber auch MySQL[1] kommt nicht ohne Wartung aus. Kleine Probleme wie fragmentierte Tabellen sind relativ leicht auch für Anfänger in den Griff zu bekommen. Defekte Datenbanken erfordern schon mehr Know-how, denn die Rettungsaktion besteht aus mehreren Schritten. Wie der Administrator Probleme mit einem MySQL-Server löst, erläutert dieser Beitrag.

Voraussetzung für einen vernünftigen Serverbetrieb ist ein durchdachtes Setup. Dabei sind verschiedene Dinge zu beachten. Am wichtigsten jedoch ist, dass die Tabellen möglichst effizient sind. Effizient ist eine Tabelle, bei der die Datentypen aller Spalten nur genau so groß sind, wie sie tatsächlich sein sollen. So gibt es beispielsweise eine ganze Reihe unterschiedlicher Integer-Datentypen bei MySQL: Sie unterscheiden sich nicht nur in der größten Zahl, die sie aufnehmen können, ihr Speicherbedarf differiert ebenfalls. Je größer eine Zahl werden kann, desto mehr Speicher benötigt MySQL auch für die Daten, die abgelegt werden.

Datenbanks größter Feind

Die Tabellen mögen noch so effizient angelegt sein, im Laufe der Zeit gerät die Ordnung trotzdem durcheinander. Der Grund: Fragmentierung. Eine Tabelle fragmentiert, wenn Anwender einzelne Teile löschen. Das führt dazu, dass irgendwo in der Datendatei von MySQL ein Loch entsteht. Normalerweise ist dies kein Problem, denn die gelöschten Zeilen protokolliert MySQL in einer verketteten Liste. Kommen wieder Zeilen zur Tabelle hinzu, dann recycelt die Datenbank die freien Positionen und das Datenloch ist wieder gefüllt. Das ist alles gut, schön und effizient.

Nur funktioniert es nicht, wenn die Tabelle Felder mit Datentypen enthält, deren Länge variabel ist, etwa »varchar«, »blob« oder »text«. Es ist also recht wahrscheinlich, dass die einzufügenden Daten mehr Platz benötigen als vorher durch Löschen frei geworden ist. Die neuen Daten passen nicht und MySQL sucht einen anderen Platz. Die Tabelle bleibt somit löchrig wie Schweizer Käse und verschwendet Platz.

Auch die zweite Art der Tabellenfragmentierung entsteht durch Daten mit variabler Länge. Nicht nur das Löschen von Spalten mit solchen Daten führt zur Fragmentierung. Es reicht schon, dass der Anwender eine Zeile ändert. Im Prinzip ist dies das Gleiche, wie eine vorhandene Zeile zu löschen und eine neue mit längeren Daten einzufügen. Die Daten passen nicht mehr gänzlich in das vorherige Feld und liegen fortan zerstückelt in der Datenbankdatei.

Der Fragmentierung an den Kragen gehen

Gegen fragmentierte Tabellen kann der Admin selbst einiges tun. Es gibt einen MySQL-Befehl und auch ein externes Hilfsprogramm, um die Tabellen zu defragmentieren. Der SQL-Befehl trägt den Namen »optimize table« (Abbildung 1). Das Kommando erwartet mindestens den Namen einer Tabelle als Parameter. Möchte der Verwalter mehrere Tabellen bereinigen, trennt er deren Namen einfach per Komma voneinander.

Abbildung 1: Der Optimize-Table-Befehl benötigt - abhängig von der Größe der Tabelle - oft mehrere Minuten für den Durchlauf.

Abbildung 1: Der Optimize-Table-Befehl benötigt - abhängig von der Größe der Tabelle - oft mehrere Minuten für den Durchlauf.

Während »optimize table« läuft, ist die entsprechende Tabelle gesperrt. Der Durchlauf entfernt nicht nur die Fragmentierung, sondern sortiert zusätzlich die Indizes. Das Optimize-Table-Kommando sollte der Admin regelmäßig aufrufen, da es zur Routinewartung gehört. Um die Optimierung der Tabelle zu automatisieren, eignet sich ein Skript, das der Cron-Daemon zum Beispiel in Monatsabständen aufruft.

Diesen Artikel als PDF kaufen

Als digitales Abo

Als PDF im Abo bestellen

comments powered by Disqus

Ausgabe 07/2013

Preis € 6,40

Insecurity Bulletin

Insecurity Bulletin

Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...

Linux-Magazin auf Facebook