Eigenreparatur WordPress-Datenbank

Vor einiger Zeit ist dummerweise der vServer, auf dem unter anderem dieser Blog läuft, ziemlich heftig abgeschmiert. Seither hatte ich das Problem, dass in der Media Gallery („Medienübersicht”) im Backend von WordPress ohne erkennbares System Vorschau-Tumbnails von Bildern nicht angezeigt und stattdessen durch ein generisches Icon ersetzt wurden. Gestern und heute habe ich mich endlich mal auf die Suche nach der Ursache gemacht.

Um die Sache etwas abzukürzen, hier die Erklärung: WordPress speichert die eigentliche Existenz von Bildern in der Datenbanktabelle posts, schreibt aber gleichzeitig noch je Foto zwei Einträge in die Tabelle postmeta, wobei einer davon in einem serialisierten Format viele Metadaten wie Auflösung und EXIF-Daten speichert. Auf diese Daten greift WordPress unter anderem zurück, um die Medienübersicht aufzubauen und just diese postmeta-Datenbanktabelle war beim eingangs erwähnten Systemabsturz beschädigt worden, sodass diverse Einträge fehlten. Dies sorgte dann für die Default-Darstellung mit Standard-Icon statt einem richtigen Thumbnail.

Also hieß es, irgendwie diese Metadaten auf der Basis von posts-Einträgen und den eigentlichen Bilddateien im Dateisystem zu rekonstruieren. Ein erster Versuch mittels der WordPress-Funktion zum Neu-Erzeugen von Thumbnails scheiterte – hier werden anscheinend nur Thumbnail-Dateien neu erzeugt, aber nicht die Metadaten in der Datenbank korrigiert. Zum Glück bringt WordPress dennoch einige Funktionen mit, welche insbesondere das serialisierte Metadatenformat erzeugen und auch in der Datenbank speichern. Konkret sind das wp_generate_attachment_metadata und wp_update_attachment_metadata aus /wp-admin/includes/image.php. Schnell noch ein paar „umhüllende” Zeilen PHP ‘drumherum geschrieben und schon konnte das Rekonstruieren der Daten losgehen. Inzwischen sollte nun so weit wieder alles in Ordnung sein. 🙂

Nachtrag: Neben den verlorengegangenen Datenbankeinträgen hatte die postmeta-Tabelle außerdem noch die AUTO_INCREMENT-Eigenschaft des Primärschlüssel-Feldes „meta_id” verloren, wodurch die meisten Tabellen-INSERTs (die von einem existierenden AUTO_INCREMENT ausgingen und daher meta_id nicht explizit setz(t)en), scheiterten. Möglicherweise war auch das der Grund, warum die oben genannte automatische Thumbnail-Reparatur nicht wie gewünscht funktionierte.

0 comments on “Eigenreparatur WordPress-Datenbank

1 Pings/Trackbacks für "Eigenreparatur WordPress-Datenbank"

Schreibe einen Kommentar