WordPress Multisites in 5 Schritten einfach umziehen

#cli #tutorials #wordpress

Ein Erfahrungsbericht mit Multisites & WP-CLI

Eine WordPress-Seite von einem Server auf einem anderen zu verschieben ist in der Regel kein Problem. Bei den zahlreichen Migration-Plugins und Migration-Services liegt der Fokus aber ganz klar auf einzelnen Seiten.
Ist es also genau so einfach ein ganzes Netzwerk von verknüpften WordPress-Seiten aka WordPress Multisite umzuziehen?

Wir sagen Ja und so geht es:

Command Line Interface für WordPress

WP-CLI

Das Command Line Interface für WordPress (kurz: WP-CLI) bietet eine effektive Schnittstelle, um auf unterschiedlichste Weise mit WordPress zu arbeiten. Angefangen bei Standard-Funktionen wie der Installation oder der Wartung der Seite können auch weiterführende Funktionen wie das Regenerieren von Thumbnails oder Konfigurieren der Benutzerberechtigungen direkt aus dem Terminal administriert werden.

Wie WP-CLI installiert wird, ist ausführlich in den Tutorials auf der offiziellen Seite erklärt. Für Mac/XAMPP Benutzer gibt es zudem eine Video-Anleitung auf YouTube.
Mit diesem Tool wollen wir im Folgenden eine Multisite in nur fünf Schritten umziehen.

 

Der komplette Multisite-Umzug
in nur 5 Schritten

 

Schritt 1:
Export der bestehenden Datenbank

WP-CLI erlaubt das Arbeiten mit der Datenbank über wp db
Die einfachste Möglichkeit die in der wp-config.php angegebene Datenbank zu exportieren sieht demnach so aus:

wp db export

Alternativ ist auch der Export per Gzip in ein Verzeichnis nach Wahl möglich:

wp db export - | gzip > ~/migration/database_export.sql.gz

 

Schritt 2:
Upload der Dateien auf den neuen Server

Auf dem neuen Server sollten sich natürlich alle benötigten Dateien (WordPress Core, Themes, Plugins, Uploads,…) befinden. Dies kann entweder über ein System zur Versionskontrolle (wir nutzen dafür Git) oder einfach per manuellem Upload durchgeführt werden.

Auch die im ersten Schritt exportierte Datenbank sollte sich im WordPress-Verzeichnis auf dem neuen Server befinden.

 

Schritt 2.1:
Update der WordPress-Konfigurationsdatei

In der WordPress-Konfigurationsdatei (siehe: wp-config.php) auf dem neuen Server muss nun die neue Datenbankverbindung (Name, Benutzer, Passwort) und bei einem Domainwechsel DOMAIN_CURRENT_SITE aktualisiert werden. Dieser Schritt ist wichtig, um den im nächsten Schritt folgenden Import durchzuführen.

 

Schritt 3:
Import der Datenbank

Nachdem die richtige Datenbankverbindung in die WordPress-Konfigurationsdatei eingetragen wurde, kann man die exportierte Datei auf dem neuen Server wieder importieren:

wp db import database_export.sql

 

Schritt 4:
Domain Suchen & Ersetzen

WordPress speichert in der Regel alle Verlinkungen als absolute Links in der Datenbank ab. Ändert sich die Domain, hilft normales Suchen & Ersetzen oft nicht weiter und sollte insbesondere bei Multisites unter allen Umständen vermieden werden, da die Einträge teilweise serialisiert abgespeichert sind (z.B. als JSON encodierte Strings). Um diese serialisierten Daten richtig zu aktualisieren und Primärschlüssel (Primary Key Values) beizubehalten empfiehlt sich wp search-replace

Um einen Fehler beim Aktualisieren der Domain zu vermeiden, kann vorab die Option --dry-run genutzt werden, um zu sehen, welche Datenbanktabellen von der Änderung betroffen wären:

wp search-replace website.dev website.com --dry-run

Nach dem Testlauf folgt die eigentliche Aktualisierung:

wp search-replace website.dev website.com

Daraufhin sollte im Terminal eine Erfolgsmeldung zu sehen sein:

Success: Made 1234 replacements.

 

Schritt 5:
Ungenutzte Dateien löschen

Nach dem Import wird die SQL-Exportdatei nicht mehr benötigt und kann dementsprechend vom Server entfernt werden.

rm database_export.sql

 

Fazit zur Multisite Migration

Fazit zur Multisite Migration  
Nun sollte die neue Seite, bzw. die Seiten wie gewohnt verfügbar sein. Die WordPress Multisite Migration ist damit abgeschlossen und das Multisite-Netzwerk komplett identisch (inkl. Benutzer, Widgets, Beiträge, IDs…) zu dem bisherigen Netzwerk.


Probleme beim Umzug von WordPress Multisites

Ab und zu kommt es vor, dass nach dem Umzug von Multisites das ein oder andere Problem auftaucht. Hier eine Liste der am häufigsten auftretenden Probleme und die dazu passende Lösung:

  • Fehlermeldung beim Import via WP-CLI:
    ERROR 1049 (42000): Unknown database 'wordpress'
    MySQL kann keine Datenbank mit dem Namen ›wordpress‹ finden, in welche der Import erfolgen soll. Die Datenbank kann manuell via phpMyAdmin oder übers Terminal (MySQL/SQL Cheatsheet) angelegt werden.

    create database wordpress;
  • Fehlermeldung beim Import via WP-CLI:
    ERROR 1064 (42000): You have an error in your SQL syntax.
    Es gibt einen Fehler in der exportieren SQL-Datei. Warnungen oder Notizen die im Terminal beim Export per STDOUT zu sehen sind, finden sich oftmals in den ersten Zeilen der SQL-Datei wieder. Sobald diese Zeile entfernt wird, kann der Import durchgeführt werden.
  • Falsche Weiterleitungen & Loops:
    Probleme mit Weiterleitungen treten oftmals im Zusammenhang mit der .htaccess oder der wp-config.php auf. Details zur Fehlerbehebung sind hier zu finden:

    Benutzer des Domain Mapping Plugins sollten zudem immer auch einen prüfenden Blick auf die sunrise.php werfen.

  • Fehlende Bilder in der Mediathek:
    Bei manuell definierten Upload-Pfaden kommt es manchmal zu dem Problem, dass die Bilder auf der Seite oder der Mediathek nicht geladen werden.
    Den Upload-Pfad kann man in den Seitenoptionen manuell eingetragen werden.

    WordPress Netzwerkverwaltung » Seiten » Bearbeiten

    Im Tab ›Einstellungen‹ kann unter ›Upload Path‹ der absolute Pfad angegeben werden.

  • Pluginspezifische Skripte werden im Admin-Bereich nicht geladen:
    Ebenfalls ein Problem im Zusammenhang mit dem Domain Mapping Plugin und dem folgenden Filter:

    add_filter( 'plugins_url', 'domain_mapping_plugins_uri', 1 );

    Der entsprechende Lösungsansatz ist hier zu finden:


Bonus:

Einzelne Inhalte nachträglich in eine Multisite importieren

Zunächst gilt es die richtige Seite im Netzwerk zu lokalisieren, um sicherzustellen, dass der Import im Kontext der richtigen Seite stattfindet. Über wp site list sehen wir alle Seiten des Multisite Netzwerks, die wir später über die Option --url="<site_url>" ansprechen wollen:

wp site list --field=url

Anschließend können wir die Inhalte aus einem XML-Dokument (z.B. manuell aus WordPress exportierte Inhalte) in eine spezielle Seite importieren:

wp import --url="<site_url>" import.xml --authors=create

Je nach Umfang des Imports kann über die Option --skip=image_resize hinzugefügt werden, womit das Anpassen der Bildgrößen vorerst übersprungen wird, was den Import deutlich beschleunigt. Die Thumbnails können jederzeit nachträglich und unabhängig vom Import neu generiert werden:

wp media regenerate --url="<site_url>" --yes

Tipp für Theme- & Plugin-Entwickler:
Im Kontext der Theme Unit Tests gibt es einen vorgefertigten Datensatz zum Testen:

http://wptest.io/

http://wptest.io/

 

Einzelne Inhalte nachträglich aus einer Multisite löschen

Ist beim Import etwas schief gegangen oder muss der Testdatensatz wieder entfernt werden, gibt es den entsprechenden Befehl zum löschen, der die Inhalte in den Papierkorb von WordPress verschiebt.

Wie beim Lokalisieren der Multisite gilt es die zu löschenden Inhalte vorab zu finden:

wp post list --url="<site_url>" --format=ids

Der Befehl wp post list kann dabei beliebig verfeinert werden (WP-CLI Cheatsheet). Um alle Beiträge aus der Mediathek einer Seite im Netzwerk aufzulisten, könnte der Befehlt beispielsweise so aussehen:

wp post list --url="<site_url>" --post_type='attachment' --format=ids

Sobald die Auswahl stimmt, kann das Snippet mit dem Befehl zum Löschen kombiniert werden. Der Zusatz --force löscht die Inhalte direkt und ohne den Umweg über den Papierkorb.

wp post delete --url="<site_url>" $(wp post list --url="<site_url>" --format=ids) --force

 

Community-Erweiterungen für WP-CLI

Community  
Etliche WordPress Plugins erweitern das Spektrum der Befehle für das WordPress CLI. Eine ständig wachsende Liste der Plugins ist auf GitHub zu finden.

 

Ihr Kommentar