WordPress von localhost auf Webserver umziehen

Zahlreiche Plugins werden auf wordpress.org angeboten, um Backups von einer WordPress-Installation zu machen und diese auf Wunsch anschließend auf einen anderen Server zu übertragen. Ein manuelles Klonen ist allerdings auch schnell gemacht. Es gibt hierbei mindestens zwei mögliche Vorgehensweisen, eine einfache und eine bessere. Und dann gibt's da noch die einfach beste...

Einfache Möglichkeit: WordPress mit den eigenen Bordmitteln umziehen

WordPress selbst bietet eine Export- und Importfunktion, mit deren Hilfe die Inhalte einer WordPress-Installation, beispielsweise der lokalen Testversion oder Entwicklungsumgebung, zu einer anderen übertragen werden können. Die Vorgehensweise ist im Grunde selbsterklärend. Bei meinen Tests allerdings funktionierte der Import von Attachments (Bildern) nicht, daher hier ein Workaround, der zudem den Vorteil bietet, dass interne Verlinkungen von einem Beitrag zum anderen nach dem Server-Wechsel erwartungsgemäß funktionieren:

  1. Im WP-Backend der lokalen bzw. Quell-Installation unter Werkzeuge -> Daten exportieren auswählen, um "Alle Inhalte" in einer WXR-Datei (WordPress eXtended RSS) auf der Festplatte zu speichern. Sie wird dort in der Form name.wordpress.datum.xml abgelegt.
  2. Diese Datei mit einem Texteditor öffnen und per Suchen&Ersetzen-Funktion alle internen Referenzen der Art http://localhost/wordpress1 oder http://www.QuellDomain.de suchen und durch http://www.ZielDomain.de ersetzen; anschließend abspeichern.
  3. Ins Backend der Ziel-Installation wechseln, den Menüpunkt "Daten importieren" wählen, als Format "WordPress" auswählen und ggf. zunächst das dann angebotene Plugin installieren. Anschließend die eben erzeugte XML-Datei von der Festplatte auswählen und importieren (den Punkt "Import Attachments" bei diesem Workaround nicht anwählen). Falls die Autoren der Ursprungs-Installation noch nicht angelegt sind, macht das Import-Skript dies automatisch. Eine Zuordnung der Beiträge und Seiten zu bereits existierenden Autoren ist über die angebotenen Auswahlfelder auch möglich.
  4. Zuletzt mit einem FTP-Programm alle Inhalte der Quell-Installation im Ordner wp-content/uploads in den entsprechenden Ordner der Ziel-Installation übertragen.

Danach sollten alle Beiträge, Seiten, Kommentare, benutzerdefinierten Felder, Kategorien, Tags, benutzerdefinierten Inhaltstypen und auch Bilder, Videos, Sounds in der Ziel-Installation angekommen sein. Auch ggf. selbst angelegte Navigationsmenüs werden importiert (aber nicht aktiviert), bei mehrmaligem Import allerdings werden die einzelnen Menüpunkte dummerweise vervielfacht.

Diese simple Transfer-Möglichkeit setzt ein auf dem Ziel-Server installiertes WordPress voraus. Beiträge und Seiten, die bereits auf dem Ziel-WordPress vorhanden sind, werden hierbei nicht überschrieben. Der Import mit den WP-Bordmitteln eignet sich daher im Grunde nur für eine einmalige Überspielung. Überarbeitungen beispielsweise von Beiträgen auf localhost und anschließendes erneutes Übertragen auf den Live-Server sind so nicht möglich. Nicht übertragen werden zudem Plugins, Themes sowie Konfigurationen zum Beispiel von Widgets, Menüs, Einstellungen der Punkte Permalinks, Diskussion, Medien... Bei der nachfolgend beschriebenen Art hingegen wird mit nur geringem Mehraufwand ein nahezu identisches WordPress-Abbild erzeugt.

Bessere Möglichkeit: WordPress klonen mit phpMyAdmin und SQL

Ein Hinweis vorab: Im Netz finden sich zahlreiche Anleitungen des nachfolgend beschriebenen Verfahrens. Einige davon allerdings, z. B. die bei Google gut positionierte und daher viel beachtete Schritt-für-Schritt-Anleitung WordPress vom lokalen Server auf eine Domain übertragen von Elmastudio, machen einen Fehler: Sie berücksichtigen nicht, dass WordPress vieles in der Datenbank in Form sogenannter serialized data ablegt. Die Folge ist, dass Konfigurationen von Plugins, Widgets, Menüs etc. nach dem Einspielen der Datenbank von WordPress nicht mehr ausgelesen werden können. Hintergrundbilder im Header sind nicht mehr sichtbar, benutzerdefinierte Menüs müssen nachträglich wieder ihren gewünschten Positionen zugeordnet werden, Textfelder in Widgets sind komplett verschwunden... Die folgende Anleitung sorgt für einen WordPress-Umzug ohne Nacharbeiten (allerdings auch: ohne Gewähr), wirkt auf den ersten Blick dafür aber etwas umständlicher.

  1. Datenbank exportieren. Im Gegensatz zu obigem Vorgehen wird dieser Export direkt innerhalb der Datenbankanwendung ausgeführt bzw. zum Beispiel mit Hilfe der Datenbank-Verwaltungsoberfläche phpMyAdmin. PhpMyAdmin wird mit einem Internet-Browser aufgerufen. Bei einer lokalen Installation mittels des Uniform Servers lautet der URL http://localhost/us_phpmyadmin/, bei XAMPP ist es http://localhost/phpmyadmin/. Bei Online-Installationen hängt es vom jeweiligen Provider ab, bei all-inkl.com beispielsweise lautet die Adresse http://www.DeineDomain.de/mysqladmin/

    phpMyAdmin - Datenbank exportierenPhpMyAdmin listet links alle Datenbanken auf -> die gewünschte anklicken und dann oben rechts den Menüpunkt "Exportieren" auswählen. Als "Art des Exports" genügt in der Regel die Variante "schnell", bei umfangreichen Datenbanken allerdings kann es später zu Import-Problemen kommen. Hier ist dann "Angepasst – zeige alle möglichen Optionen an" die bessere Wahl, um in den aufklappenden Optionen die Komprimierung auf "GZip" zu stellen. Abschließendes Drücken auf den OK-Button speichert den Datenbank-Export in einer SQL-Datei auf der Festplatte.

  2. Neue Datenbank anlegen. Auf dem Ziel-Server muss nun eine leere Datenbank angelegt werden, in die die eben exportierten Daten dann eingespielt werden. Auch hier hängt das Vorgehen stark vom jeweiligen Provider ab - im Zweifel hilft eine hoffentlich gute Service-Hotline. Ein Beispiel: Bei all-inkl.com muss eine neue Datenbank über die Administrationsoberfläche KAS angelegt werden; einloggen, Menüpunkt "Datenbank" auswählen und dann auf "neue Datenbank anlegen" klicken. Erst danach lässt sich die Datenbank über phpMyAdmin bearbeiten.

    Die beim Anlegen der Datenbank zugeteilten Kennungen (Datenbankname, Username und Paßwort) werden später noch benötigt!

  3. Daten importieren. Nun in phpMyAdmin des Ziel-Servers einloggen, die neu erstellte Datenbank auswählen und dann oben den Menüpunkt "Importieren" wählen. Über den Button "Datei auswählen" kann nun die in Schritt 1 erzeugte SQL-Datei hochgeladen werden.

    phpMyAdmin: Import erfolgreich
    Der Import dauert in der Regel nur einige Sekunden, danach sollte eine Erfolgsmeldung erscheinen.

  4. Alten gegen neuen URL austauschen. Mittels des folgenden SQL-Scripts werden nun die in der Datenbank noch auf den alten Speicherort bzw. die alte Domain verweisenden URL gegen die neuen ausgetauscht. Durch diese selektive Art des Suchens&Ersetzens mittels der SQL-Befehle wird die serialisierte Form der Daten nicht zerstört. (Thanks to Neil Gee for this script!).
    UPDATE wp_options SET option_value = replace(option_value, 'http://www.oldurl', 'http://www.newurl') WHERE option_name = 'home' OR option_name = 'siteurl';
    
    UPDATE wp_posts SET guid = replace(guid, 'http://www.oldurl','http://www.newurl');
    
    UPDATE wp_posts SET post_content = replace(post_content, 'http://www.oldurl', 'http://www.newurl');
    
    UPDATE wp_postmeta SET meta_value = replace(meta_value,'http://www.oldurl','http://www.newurl');
    

    In phpMyAdmin den Menüpunkt "SQL" anwählen, die vier UPDATE-Befehle in das Script-Fenster einfügen und die Platzhalter www.oldurl und www.newurl in allen vier Zeilen austauschen gegen den alten URL (z. B. http://localhost/wordpress1, siehe "WordPress-Adresse (URL)" unter Einstellungen -> Allgemein in der Quell-Installation von WordPress) und den neuen URL. Ein abschließender Klick auf den OK-Button startet die Austausch-Aktion.
    phpMyAdmin: SQL-Befehle

  5. WordPress-Dateien auf Server kopieren. Mit einem FTP-Programm (z. B. WinSCP, FileZilla) werden nun alle Dateien und Ordner der lokalen bzw. der Quell-Installation von WordPress auf den Ziel-Server übertragen. Eine Installation von WordPress ist nicht erforderlich.
     
  6. wp-config und htaccess anpassen. Im letzten Schritt müssen noch die Zugriffsdaten für die Datenbank auf dem Webserver in der Datei wp-config.php angepasst werden (Datenbankname, Username und Paßwort aus Schritt 2). Und schließlich sollte die von der lokalen Installation übertragene .htaccess komplett geleert werden, um sie anschließend vom Online-WordPress neu beschreiben zu lassen: Ins neue Backend einloggen (auch die Login-Daten der Quell-Installation wurden übertragen!) und unter Einstellungen -> Permalinks auf "Speichern" oder "Änderungen übernehmen" klicken. Falls die .htaccess beschreibbar ist, bestätigt das Blog-System dies mit der Meldung: "Permalink-Struktur aktualisiert".

Einen kleinen Haken gibt's eventuell doch: Textfelder innerhalb von Widgets sind von den URL-Änderungen nicht betroffen. Diese Texte, die auch HTML-Links z. B. in der Form http://localhost/... enthalten können, werden in der Tabelle wp_options als serialized data ins Feld widget_text geschrieben. Daher können hier Verweise auf die Quell-Installation nicht umgeschrieben werden auf die Ziel-Installation, ohne die serialisierte Form zu zerstören. Ähnliches gilt bei manchen Themes für Hintergrundbilder.

Empfohlene Möglichkeit: Serialisierter Datenbank-Dump mit dem Plugin Migrate DB

Plugin: Migrate DBIm Gegensatz zur eben beschriebenen manuellen Methode sorgt das Plugin Migrate DB für einen kompletten Austausch des URL. Nötigenfalls berechnet das Plugin betroffene serialized-data-Sätze neu, um ihre Gültigkeit zu bewahren. Außerdem werden eventuell in der Datenbank abgelegte Datei-Pfade angepasst (solche Pfadangaben werden allerdings selten genutzt). Für einen Umzug einer WordPress-Installation von localhost auf einen Live-Server oder auch von einem Server auf einen anderen reicht die kostenlose Version aus.

  1. Plugin auf dem Quell-WordPress installieren und aktivieren.
  2. Im Backend unter Werkzeuge -> Migrate DB das Plugin aufrufen und die Felder entsprechend der eigenen WP-Installation ausfüllen. (Kleiner Trick zum Herausfinden des Ziel-Pfades: Falls WordPress auf dem Ziel-Server bereits installiert ist, einfach dort ebenfalls das Plugin installieren, um dann im aktivierten Plugin den "file path" abzulesen. Oder schlicht beim Hoster nachfragen.)
  3. Auf "Export Database" klicken. Die erzeugte Datei wird in der Regel im Download-Ordner des Browsers abgespeichert.
  4. Mittels phpMyAdmin die Datenbank auf dem Ziel-Server aufrufen, falls bereits vorhanden, oder eine neue erstellen. Die vom Plugin erzeugte Datei importieren (siehe oben unter: 2. Neue Datenbank anlegen und 3. Daten importieren). Bei einer bereits vorhandenen Datenbank werden die darin befindlichen WordPress-Tabellen durch das Import-Script komplett gelöscht, bevor die neuen Daten eingespielt werden!
  5. Abschließend WordPress-Dateien auf den Ziel-Server kopieren (siehe oben, Punkt 5) und ggf. wp-config.php und .htaccess anpassen (siehe oben, Punkt 6).

Nachtrag: Hier noch ein aktueller Screenshot vom Plugin WP Migrate DB, das inzwischen etwas modifiziert wurde. Das Übertragungsprotokoll (http:) muss nun nicht mehr angegeben werden, was sinnvoll ist, falls http: und https: gemischt verwendet werden.

Plugin: WP Migrate DB (Screenshot)
Die im Januar 2015 aktuelle Version 0.6.1 des Plugins "Migrate DB". Unter "Advanced Options " sind einige nette Möglichkeiten aufgeführt, um z. B. Spam-Kommentare und die automatisch gespeicherten Beitrags-Revisionen nicht in den Export, der jetzt "Migrate" heißt, aufzunehmen.

20 Gedanken zu „WordPress von localhost auf Webserver umziehen

  1. Vielen Dank für den wirklich SEHR SEHR HILFREICHEN Artikel.
    Alte gegen neue URL austauschen über SQL hat bei mir leider überhaupt nicht hingehauen.
    Am Ende war es so einfach: htaccess leeren, wie neu beschreiben. Manchmal kann es so einfach sein. Es muss nur jemanden geben, der darauf hinweist.
    Danke dafür!!!

    1. Anstatt z.B.: localhost/wordpress muss man die ip adresse setzen also: "ip adresse/wordpress"

  2. Leider wird die Migrationsdatei bei mir zu groß, um sie wieder zu importieren... Hat da jemand eine Lösung??

    1. Hi Stefan,

      die muss aber recht groß sein!

      Komprimiert hast Du sie (bei Migrate DB haken setzen: Compress file with gzip)? Außerdem unter "Advanced Options" Exclude post revisions und spam und ggf. noch transients anhaken.
      Wenn das nicht ausreicht, wird's knifflig, es sei denn, Du hast Konsolen-Zugriff (als Ersatz für PHPmyAdmin) - ggf. beim Provider nachfragen. Vielleicht kann der auch die Ausführungszeit in der php.ini und vermutlich für Apache hochsetzen. Und dann gibt's noch die Möglichkeit, die Datenbank aufzusplitten.

    2. Du kannst jede einzelne Tabelle seperat exportierten und jeweils einzeln importieren. Sollten deine Dateien immer noch zu groß sein, kannst du ein Tool wie mysqldumper oder speziell für den Import bigdump nutzen, damit klappen auch die größten Exporte / Importe.

  3. Hallo,
    herzlichen Dank für diese sehr gute Anleitung. Aktuell gibt es bereits die Version 0.8 vom WP Migrate DB Plugin.
    Besonders der Tipp, das Plugin auf der abzulösenden Seite zu Instalieren, hat sehr geholfen, auf den Pfad beim Hoster wäre ich ohne diesen Tipp nie gekommen.

    So war der Umzug im Nu perfekt erledigt.

    Viele Grüße
    Rüdiger

    1. Prima, danke für die Rückmeldung. Und ja, meinen Tipp find ich selbst auch recht clever [Smiley].

  4. Danke für deinen hilfreichen Artikel.

    Ich habe eine Multisite vom Webserver zu Lokal geklont. Die Seite lässt sich auch lokal aufrufen. Bei wp-admin Anmeldung ist mein Login nicht mehr gültig. Hast Du eine Idee was da schief gelaufen sein könnte?

    Gruß Silvio

  5. Hallo und vielen Dank für die super Beschreibung!!

    Mit Migrate DB hat es endlich funktioniert!!!!!

  6. Hallo,

    vielen Dank für die Auflistung der Vor- und Nachteile.
    Ich möchte meine Bitnami Installation mit phpMyAdmin und SQL klonen.
    Unter http://localhost/phpmyadmin/index.php werde ich nach einem User und einem Passwort gefragt.
    Frage: Habe ich irgendwas übersehen - wo bekomme ich das denn her? Zumindest kann ich mich nicht erinnern, jemals einen User angelegt zu haben :-(. Falls doch, wie kann ich denn das Passwort zurücksetzen?

    Vielen Dank für einen Hinweis.

    1. Hi Jacqueline, da bin ich nun auch verblüfft. - Hab gegoogelt, vielleicht so:
      user: root oder administrator
      password: bitnami oder das von Dir bei der Installation angegebene
      Geht's damit?

  7. Ich habe mir diesen Artikel in die Lesezeichen gesetzt, weil der Umzug von Local-to PublicNet notwendig wird. Danke für die detaillierten Informationen.

  8. Moin,
    Was heißt denn alle wordpress Daten?
    Ich habe deine Variante 3 ausprobiert und anscheinend beim einbinden der Dateien einen Fehler gemacht.
    Migrate DB klappt super.
    Lokal habe ich mit xampp gearbeitet und wordpress ist im unterordnet von xampp installiert. Also habe ich den kompletten Ordner wordpress mit Filezilla kopiert.

    Anfangs hatte ich auf dem 1und1 Webspace noch wordpress installiert um den zielpfad auslesen zu können. Nach kopieren der Daten war dann die Seite schlicht weiß...
    Deinstallieren von WordPress und zuweisen der Domain zu einem webspace-ordner in dem die wordpress Dateien liegen klappt auch nicht

    1. Hi Patrick,
      vermutlich hast Du oben Punkt 6 übersehen oder übersprungen: 6. wp-config und htaccess anpassen (Details siehe oben). Richtig?

  9. Danke Danke Danke! Habe mehrere Anleitungen ausprobiert, keine hat funktioniert - bis ich deine entdeckt habe! Super erklärt!

  10. Hi,

    Danke für die gute Beschreibung. Beim Schauen nach dem Migrate Plugin, habe ich ein ähnliches Plugin gefunden: "All in one WP Migration". Der Name ist Programm, man kann sogar die Adressen ersetzen lassen. Anschließend wird man nur noch vom Plugin gebeten, die Permalinks anzupassen, da dies nicht ganz funktioniere.
    Bei mir hat das von der Datenbank über Seiten, Beiträge, etc. bis hin zu allen Plugin und deren Einstellungen (!!!) gut funktioniert. Kann ich nur empfehlen! Es bietet auch eine Backup-Funktion, die ich sicherlich öfter nutzen werde.

    Danke, dass ich mit deiner Hilfe auf das Plugin gestossen bin. Für mich sieht es wie die "beste" Lösung aus. ;-) Schaue es dir doch mal an!

    VIele Grüße,
    Marius

Kommentare sind geschlossen.