Warum der WordPress-Standard-Export nicht ausreicht
WordPress bietet unter Werkzeuge > Daten exportieren eine eingebaute Exportfunktion. Sie erzeugt eine XML-Datei, die Beiträge, Seiten, Kommentare und Medieneinträge enthält. Beim Import auf der Zielwebsite versucht WordPress, die verlinkten Mediendateien über HTTP herunterzuladen und neu einzubinden.
Das klingt praktisch. In der Praxis funktioniert es für kleine Medienbibliotheken gerade so, bei größeren Mengen aber oft unzuverlässig oder überhaupt nicht. Timeouts, Speicherlimits, fehlgeschlagene HTTP-Requests oder serverseitige Beschränkungen sorgen dafür, dass ein Teil der Dateien nicht importiert wird, ohne dass eine Fehlermeldung erscheint. Das Ergibst ist eine halb befüllte Medienbibliothek und keine zuverlässige Möglichkeit, zu prüfen, was fehlt.
FTP als Alternative hat ein anderes Problem: Die Dateien landen im wp-content/uploads-Verzeichnis, sind aber der Datenbank unbekannt. WordPress behandelt Dateien im Upload-Verzeichnis nicht automatisch als Medieneinträge. Ohne entsprechenden Datenbankeintrag existieren die Dateien für WordPress faktisch nicht.
Die saubere Lösung: rsync + Media Sync Plugin
Der zuverlässigste Weg für die Übertragung einer WordPress Medienbibliothek kombiniert zwei Schritte: die Dateien werden mit rsync auf den Zielserver übertragen, anschließend registriert das Plugin Media Sync die übertragenen Dateien in der WordPress-Datenbank.
Schritt 1: Dateien mit rsync übertragen
rsync ist ein Kommandozeilen-Tool zur Dateiübertragung, das auf nahezu jedem Linux-Server verfügbar ist. Es überträgt nur Dateien, die auf dem Zielserver noch nicht vorhanden oder veraltet sind, und ist damit deutlich effizienter als FTP. Große Medienbibliotheken mit mehreren Gigabyte lassen sich so zuverlässig und vollständig übertragen.
Der grundlegende Befehl für die Übertragung des Upload-Verzeichnisses von Server A auf Server B lautet:
rsync -avz --progress /var/www/quellwebsite/wp-content/uploads/ benutzer@zielserver:/var/www/zielwebsite/wp-content/uploads/
Die Optionen im Einzelnen:
-asteht für Archivmodus und erhält Dateiberechtigungen, Zeitstempel und Verzeichnisstrukturen-vgibt eine ausführliche Ausgabe aus, damit man den Fortschritt verfolgen kann-zkomprimiert die Daten während der Übertragung, was besonders bei schlechten Verbindungen sinnvoll ist--progresszeigt den Fortschritt pro Datei
Wer SSH-Zugriff auf beide Server hat, kann rsync direkt von Server zu Server ausführen. Wer nur auf einen Server direkt zugreifen kann, überträgt die Dateien zunächst lokal und dann weiter auf den Zielserver. Alternativ funktioniert der Befehl auch in umgekehrter Richtung, wenn man vom Zielserver aus auf den Quellserver zugreift.
Nach dem Befehl sollte das uploads-Verzeichnis auf dem Zielserver identisch mit dem Quellserver sein. Die Dateistruktur mit Jahr- und Monatsordnern bleibt dabei vollständig erhalten.
Natürlich funktioniert das auch über FTP und den Umweg über den eigenen PC. Das ist jedoch etwas umständlicher und dauert deutlich länger.
Schritt 2: Dateien mit Media Sync in die Medienbibliothek eintragen
Nach der Dateiübertragung befinden sich alle Mediendateien physisch im richtigen Verzeichnis – WordPress kennt sie aber noch nicht. Hier kommt das Plugin Media Sync ins Spiel.
Media Sync ist ein kostenloses Plugin, das das uploads-Verzeichnis scannt und Dateien, die dort vorhanden, aber nicht in der Medienbibliothek eingetragen sind, identifiziert und importiert.
Nach der Installation und Aktivierung des Plugins findet man es unter Einstellungen > Media Sync. Die Oberfläche ist bewusst schlicht gehalten: Ein Scan-Button durchsucht das Upload-Verzeichnis und listet alle Dateien auf, die noch nicht in der Datenbank registriert sind. Vor dem ersten echten Import empfiehlt sich die Option Dry Run, die den Scan simuliert, ohne tatsächlich Einträge zu erstellen. So lässt sich prüfen, ob die richtigen Dateien gefunden werden.
Ist man mit dem Ergebnis zufrieden, deaktiviert man Dry Run und startet den Import. Media Sync legt für jede Datei den entsprechenden Datenbankdatensatz an und macht sie damit in der WordPress-Medienbibliothek verfügbar.
Ein wichtiger Hinweis: Bei sehr großen Medienbibliotheken kann der Import aufgrund von Serverlimits wie max_execution_time oder memory_limit abbrechen. In diesem Fall empfiehlt es sich, zunächst nur einen einzelnen Unterordner zu scannen, um die Serverreaktion zu testen. In den Plugin-Einstellungen lässt sich die Batch-Größe anpassen, was bei knappen Serverlimits helfen kann. Bei anhaltenden Problemen lohnt es sich, max_execution_time und memory_limit in der php.ini temporär zu erhöhen.
WordPress Medienbibliothek übertragen: Was mit den Metadaten passiert
Ein berechtigter Einwand gegen diese Methode: Gehen dabei Metadaten wie Alt-Text, Bildtitel oder Beschreibungen verloren?
Die Antwort hängt davon ab, wie die Übertragung aufgebaut wird. Media Sync legt neue Datenbankeinträge an, befüllt aber nur die Grunddaten, also Dateiname, Pfad, Dateityp und Erstellungsdatum. Alt-Texte, Beschreibungen und andere Metadaten, die in der Quell-Installation gepflegt wurden, werden dabei nicht übertragen.
Wer diese Metadaten erhalten möchte, hat zwei Möglichkeiten. Entweder überträgt man zusätzlich zur Dateiübertragung per rsync auch einen Datenbankexport der Mediendatensätze aus der Quell-Installation, was technisches Datenbankwissen erfordert. Oder man nutzt den WordPress-Standard-Export ausschließlich für die Mediendaten und kombiniert ihn mit der rsync-Übertragung: Der Standard-Export liefert dabei die Metadaten, während rsync die eigentlichen Dateien sicherstellt. In diesem Fall sollte man beim Import die Option „Dateianhänge herunterladen” deaktivieren, da die Dateien bereits vorhanden sind.
WP-CLI als Alternative um die WordPress Medienbibliothek zu übertragen
Wer auf WP-CLI Zugriff hat, kann die Registrierung der Dateien auch ohne Plugin erledigen. Der Befehl wp media import importiert Dateien direkt in die Medienbibliothek:
wp media import /var/www/zielwebsite/wp-content/uploads/**/*.jpg --path=/var/www/zielwebsite
Der Vorteil: keine Plugin-Abhängigkeit. Der Nachteil, auf den auch in der WordPress-Entwickler-Community hingewiesen wird: WP-CLI importiert alle Dateien inklusive der von WordPress automatisch generierten Thumbnail-Varianten als separate Medieneinträge. Vor dem Import müssen deshalb alle generierten Bildgrößen aus dem Upload-Verzeichnis entfernt werden, was bei großen Bibliotheken aufwändig ist. Für die meisten Anwendungsfälle ist Media Sync daher die praktischere Wahl.
Kurzcheck: Welcher Weg für welchen Fall?
Kleine Medienbibliothek bis etwa 200 Dateien ohne kritische Metadaten: Der WordPress-Standard-Export mit aktivierter Option „Dateianhänge herunterladen” funktioniert in der Regel ausreichend zuverlässig.
Große Medienbibliothek mit mehreren tausend Dateien: rsync für die Dateiübertragung, Media Sync für die Datenbankregistrierung.
Metadaten müssen erhalten bleiben: Datenbankexport der Medieneinträge kombiniert mit rsync, oder Standard-Export nur für Metadaten ohne Datei-Download.
Serverumgebung mit WP-CLI-Zugriff und technischem Hintergrund: wp media import nach vorheriger Bereinigung der Thumbnail-Varianten.
Fazit
Die WordPress Medienbibliothek zuverlässig zu übertragen ist kein komplizierter Prozess, sobald man das zugrunde liegende Problem versteht: Dateien und Datenbankeinträge müssen getrennt behandelt werden. rsync erledigt die Dateiübertragung vollständig und effizient, Media Sync übernimmt die Registrierung in WordPress. Beide Tools sind kostenlos, gut erprobt und bewältigen auch große Medienbibliotheken ohne die Timeouts und Zuverlässigkeitsprobleme, die den WordPress-Standard-Import bei größeren Datenmengen plagen.
Wenn du bei einer Website-Migration Unterstützung brauchst oder die Übertragung Teil eines größeren Projekts ist, kannst du dich gerne bei mir melden.
