Die Datenbank aufräumen und optimieren

 

Bei einer Bildergalerie denkt man beim Aufräumen zuerst an alte Fotos. Die Datenbank dahinter gerät leicht aus dem Blick, obwohl sich auch dort mit den Jahren einiges ansammelt. Nehmen wir eine Galerie mit 2.000 Fotos in 25 Kategorien: In der Datenbank stehen dafür 2.000 kurze Zeilen für die Bilder, 25 für die Kategorien, eine Handvoll Einstellungen und ein Konto für die Verwaltung. Das ist überschaubar und ändert sich nur, wenn Sie selbst etwas hochladen oder löschen. Eine Tabelle wächst aber ganz ohne Ihr Zutun weiter. Wer die Datenbank aufräumen und optimieren will, sucht deshalb zuerst diese eine Tabelle und setzt dort gezielt an, statt überall ein bisschen zu löschen.

Datenbank aufräumen: Ein Besen fegt lose Datenblöcke und Staub von einem Datenbank-Zylinder mit sauber geordneten Zeilen weg

Erst messen, dann löschen

Bevor Sie irgendetwas löschen, verschaffen Sie sich einen Überblick. In phpMyAdmin klicken Sie links auf den Namen Ihrer Datenbank. Die Übersicht zeigt jede Tabelle mit der Zahl ihrer Zeilen und ihrer Größe. Bei InnoDB-Tabellen steht vor der Zeilenzahl oft eine Tilde, weil phpMyAdmin dort nur schätzt. Für die Frage, wo der Ballast liegt, reicht diese Schätzung völlig. In einer Galerie ergibt sich fast immer dasselbe Bild:

TabelleWächst durchAufräumen?
admin_logjede Anmeldung, jeden Fehlversuch, jeden Upload und jede Änderungja, alte Einträge regelmäßig
bilderIhre Uploads und FTP-Importenein, das sind Ihre Inhalte
kategorieneue Kategoriennein, das sind Ihre Inhalte
einstellungnichts, immer 16 Zeilennein
adminnichts, meist eine Zeilenein

Zeigt die Übersicht bei Ihnen weitere Tabellen, gehören sie zu einer anderen Anwendung, die dieselbe Datenbank nutzt, etwa einem Blog. Die lassen Sie beim Aufräumen der Galerie in Ruhe, auch wenn sie groß sind. Dafür ist die jeweilige Anwendung selbst zuständig.

Zuerst eine vollständige Sicherung

Bevor Sie die Datenbank aufräumen, exportieren Sie sie einmal vollständig. In phpMyAdmin wählen Sie die Datenbank aus, dann oben „Exportieren“, Format SQL, und speichern die Datei mit dem Datum im Namen, etwa galerie_2026-10-12.sql. Öffnen Sie sie kurz in einem Texteditor: Steht dort für jede Tabelle ein CREATE TABLE und eine Reihe INSERT INTO, ist der Export brauchbar. Eine Datei von wenigen Byte ist ein Warnsignal.

Dieser Export enthält nur die Datenbank. Ihre Fotos im Ordner bilder/ und die Datei inc/config.php mit den Zugangsdaten sichern Sie getrennt per FTP. Für das Aufräumen genügt der Export, für einen Umzug oder Serverschaden brauchen Sie alle drei Teile.

Was Optimieren wirklich bringt

Löscht man viele Zeilen, wird die Datei der Tabelle auf dem Server nicht automatisch kleiner. Der Platz bleibt reserviert und wird nach und nach mit neuen Einträgen gefüllt. Erst „Tabelle optimieren“ in phpMyAdmin oder der Befehl OPTIMIZE TABLE schreibt die Tabelle neu und gibt den freien Platz ab. Bei InnoDB-Tabellen antwortet MySQL dabei mit „Table does not support optimize, doing recreate + analyze instead“. Das klingt nach einem Fehler, ist aber die normale Antwort: Die Tabelle wird neu aufgebaut, und genau das war gewollt.

Ob sich der Befehl lohnt, verrät bei MyISAM-Tabellen die Spalte „Überhang“ in der Tabellenübersicht von phpMyAdmin. Sie zeigt genau den Platz, den gelöschte Zeilen hinterlassen haben und den das Optimieren zurückholt. Steht dort bei admin_log zum Beispiel 4 MiB, schrumpft die Tabelle um diese 4 MiB, steht dort nichts, ändert der Befehl nichts. Bei InnoDB-Tabellen zeigt die Spalte nur einen Strich, obwohl der Platz ebenfalls frei wird. Dort vergleichen Sie einfach die Spalte „Größe“ vor und nach dem Optimieren.

Ein Wundermittel ist der Befehl in keinem Fall. Nach ein paar hundert gelöschten Zeilen merken Sie nichts davon. Spürbar wird er erst, wenn Sie Zehntausende Protokolleinträge auf einmal entfernt haben, und auch dann vor allem an der Größe Ihrer Sicherungen. Lassen Sie ihn deshalb nach großen Löschaktionen laufen und sonst in Ruhe.

Vier Handgriffe, die mehr schaden als nutzen

Wenn Sie die Datenbank aufräumen, geht selten durch Zögern etwas kaputt, fast immer durch einen Klick zu viel. Diese Fälle sollten Sie kennen, bevor Sie in phpMyAdmin auf rote Schaltflächen drücken:

  • „Löschen“ statt „Leeren“: phpMyAdmin bietet beides direkt nebeneinander an. Leeren entfernt die Zeilen, Löschen die ganze Tabelle samt Aufbau. Fehlt eine der fünf Tabellen, funktioniert die Galerie nicht mehr.
  • Bilder per SQL entfernen: Die Zeile verschwindet, aber Original, Vorschaubild und die Kopie für die große Ansicht bleiben im Ordner liegen und belegen weiter Speicherplatz.
  • Die Tabelle admin leeren: Danach gibt es kein Konto mehr, mit dem sich jemand in der Verwaltung anmelden kann.
  • Ergebnis sofort erwarten: Die Galerie speichert Abfragen standardmäßig 350 Sekunden lang im Ordner cache/. Änderungen direkt in der Datenbank sehen Besucher deshalb erst nach einigen Minuten.

Ein fester Rhythmus statt guter Vorsätze

Feste Termine helfen mehr als der Plan, „bei Gelegenheit“ aufzuräumen. Wie oft Sie die Datenbank aufräumen, hängt davon ab, wie viel in der Verwaltung passiert. Für eine private oder kleine Vereinsgalerie genügt diese Einteilung, wer täglich hochlädt, wählt kürzere Abstände.

AufgabeWoWie oft
Systemprotokoll auf „Zugang gesperrt“ und viele Fehlversuche durchsehenVerwaltung, „Systemprotokoll“monatlich
Alte Protokolleinträge löschenVerwaltung, „Systemprotokoll“vierteljährlich
Datenbank exportierenphpMyAdmin, „Exportieren“vor jedem Aufräumen und jedem Update
Tabellen optimierenphpMyAdmin, „Tabelle optimieren“nach großen Löschaktionen

Datenbank aufräumen im Bildergalerie-Script

Das Bildergalerie-Script kommt mit fünf Tabellen aus: admin, admin_log, bilder, kategorie und einstellung. Kommentare, Bewertungen und eine Besucherstatistik gibt es im Script nicht, entsprechende Tabellen fallen also gar nicht erst an. Die Datenbank bleibt deshalb klein, der Speicherplatz einer Galerie steckt fast vollständig in den Bilddateien im Ordner bilder/. Neu installierte Galerien ab Version 3.15 legen die Tabellen als InnoDB an, ältere Installationen laufen meist noch mit MyISAM. Am schnellsten wächst admin_log, das Systemprotokoll: Jede Anmeldung, jeder Fehlversuch, jeder Upload und jede gespeicherte Einstellung erzeugt dort eine Zeile.

Für das Systemprotokoll brauchen Sie kein SQL. In der Verwaltung öffnen Sie den Menüpunkt „Systemprotokoll“ und klicken auf „Einträge älter als 90 Tage löschen“. Die Einträge der letzten 90 Tage bleiben stehen, und das Aufräumen selbst landet als „Protokoll aufgeräumt: … Einträge gelöscht“ mit der tatsächlichen Zahl im Protokoll. Die jüngsten Einträge braucht das Script: Die Anmeldesperre nach fünf Fehlversuchen in fünf Minuten zählt genau diese Zeilen.

Rechenbeispiel: ein Bot probiert Passwörter

Angenommen, ein Bot versucht sich jeden Tag 200-mal mit falschen Zugangsdaten anzumelden. Nach einem Jahr stehen dann rund 73.000 Zeilen in admin_log. Klicken Sie einmal im Quartal auf den Knopf, sieht die Kurve anders aus. Der erste Klick nach drei Monaten löscht noch nichts, weil kein Eintrag älter als 90 Tage ist. Ab dem zweiten Klick fällt die Tabelle jedes Mal von rund 36.000 auf etwa 18.000 Zeilen zurück.

Animiertes Liniendiagramm: Ohne Aufräumen wächst admin_log in zwölf Monaten auf 73.000 Zeilen, mit dem Knopf alle drei Monate pendelt die Tabelle zwischen 18.000 und 36.000 Zeilen
Der Knopf hält das Systemprotokoll dauerhaft bei höchstens rund 36.000 statt 73.000 Zeilen.

Danach gibt der Befehl OPTIMIZE TABLE `admin_log`; in phpMyAdmin den frei gewordenen Platz zurück. Wollen Sie einen anderen Zeitraum, etwa 30 Tage, geht das nur per SQL: DELETE FROM `admin_log` WHERE `zeit` < UNIX_TIMESTAMP() - 30 * 86400; Die Spalte zeit enthält dabei kein Datum, sondern Sekunden seit 1970, deshalb die Rechnung mit 86400 Sekunden pro Tag.

Verwaiste Bildeinträge müssen Sie nicht per SQL suchen. Fehlt zu einem Eintrag die Originaldatei, blendet die Galerie das Bild nur aus und löscht den Datensatz bewusst nicht, damit beim Zurückspielen einer Sicherung keine Beschreibung verloren geht. Unter „Bilder verwalten“ erscheint der Eintrag als Karte „Datei fehlt“. Dort laden Sie die Datei per FTP wieder hoch oder entfernen den Eintrag mit „Löschen“. Bilder und Kategorien löschen Sie besser nie per SQL, denn dabei bleiben die Dateien und Vorschaubilder auf dem Server liegen. Wenn Sie die schlanke Datenbank selbst sehen wollen, können Sie das Bildergalerie-Script kostenlos herunterladen und nach ein paar Wochen einen Blick ins Systemprotokoll werfen.

Häufige Fragen

Diese Fragen kommen beim Aufräumen einer Galerie-Datenbank am häufigsten.

Wie optimiere ich Tabellen in phpMyAdmin?

Wählen Sie links die Datenbank aus, markieren Sie in der Tabellenliste die gewünschten Tabellen mit einem Häkchen und wählen Sie unter der Liste im Auswahlfeld „Mit Auswahl“ den Eintrag „Tabelle optimieren“. Bei einer Galerie genügt meist admin_log. Die Meldung „doing recreate + analyze instead“ ist bei InnoDB normal und kein Fehler.

Welche Daten kann ich gefahrlos löschen?

In einer Galerie sind das praktisch nur alte Einträge im Systemprotokoll, und dafür gibt es den Knopf in der Verwaltung. Bilder, Kategorien und Einstellungen sind Ihre Inhalte, die räumen Sie über die Verwaltung auf und nicht in der Datenbank. Gehören weitere Tabellen zu einer anderen Anwendung, lassen Sie sie unberührt.

Was ist der Unterschied zwischen Tabelle leeren und Tabelle löschen?

Leeren ist wie das Ausräumen einer Schublade: Die Schublade bleibt, der Inhalt ist weg. Löschen entfernt die Schublade gleich mit. Für eine Galerie ist beides nur beim Systemprotokoll vertretbar, und auch dort ist der Knopf für Einträge älter als 90 Tage die schonendere Wahl.

Darf ich im Bildergalerie-Script die Tabelle admin_log komplett leeren?

Technisch ja, die Galerie läuft weiter. Sie verlieren aber den Nachweis, wer sich wann angemeldet hat, und eine laufende Anmeldesperre ist sofort aufgehoben. Der Knopf „Einträge älter als 90 Tage löschen“ ist meist die bessere Wahl.

Verwandte Themen

Diese Artikel schließen direkt an: phpMyAdmin, Sicherung und Pflege der Galerie sowie die Frage, wie Sie ohne eingebaute Besucherstatistik zu Zahlen kommen.