WordPress-Serverumzug unter Linux

Es gibt viele Möglichkeiten, eine bestehende Webseite mit einer WordPress-Installation auf einen neuen Server umzuziehen:

  • die WordPress-eigenen Ex- und Import-Funktionen,
  • Backupplugins,
  • Backup mit phpMyAdmin und Bearbeitung mit einem Editor,
  • und die Nutzung der linuxeigenen Bordmittel.

Für die erstgenannten Möglichkeiten existieren viele und gute Anleitungen.
Die letztgenannte Möglichkeit wird eher selten genutzt, weil viele Hostingangebote keinen Shell-Zugang zur Webseite per SSH bieten. Hat man jedoch diese Möglichkeit, stellen die linuxeigenen Bordmittel eine interessante Alternative dar. Diese Art des Serverumzugs von WordPress bietet nämlich zwei nicht zu unterschätzende Vorteile: Zuverlässigkeit und Geschwindigkeit.
Hier also meine Anleitung zum Serverumzug per shell. Die Anleitung richtet sich an Anwender mit Linuxkenntnissen. Die Angaben in den spitzen Klammern <> sind dabei jeweils durch die eigenen Daten zu ersetzen. Ich freue mich über jede Rückmeldung zu dieser Anleitung und über jeden Kommentar!

WordPress umziehen mit ssh unter linux

Die alte Webseite sichern

Auf dem alten Server einloggen. Der Zugang kann unter Windows z.B. mit dem Programm putty erfolgen. Nach dem Einloggen befinden wir uns automatisch im Homeverzeichnis und nutzen zur Befehlseingabe die bash als Shell.
Falls dies nicht zutrifft oder nur zur Sicherheit:
bash
cd ~

Zuerst sichern wir die komplette WordPress-Installation:
tar -capsf wp_install_full.gz /<pfad-zur-wordpress-installation>
Damit haben wir alle Dateien in einem komprimierten Archiv zusammengefaßt.

Für eine komplette Sicherung fehlt noch die Datenbank, die kommt jetzt dran. Für die Sicherung der alten Mysql-Datenbank benötigen wir die Zugangsdaten, also bitte bereithalten:
mysqldump <alte datenbank> -u <alter Benutzer> -p > mydump.sql

Wo es nur geht benutzt WordPress vollständige URIs und Pfadangaben. Wir müssen daher den Domainnamen und die Pfade der alten Installation auf die neuen Gegebenheiten anpassen:
cat mydump.sql | sed -e 's|<alter Domainname>|<neuer Domainname>|g;s|<alter Pfad>|<neuer Pfad>|g' > mydump_new.sql
Beispiel: Für diese Webseite würde der Befehl wie folgt lauten:
cat mydump.sql | sed -e 's|xn--webseiten-fr-menschen-jic.de|webseiten-fuer-menschen.de|g;s|/srv/www/xn--webseiten-fr-menschen-jic.de|/srv/www/webseiten-fuer-menschen.de/|g' > mydump_new.sql

Wir kopieren das Datei- und das Datenbankbackup auf den neuen Server. Dazu benötigen wir die SSH-Zugangsdaten für den neuen Server:
scp wp_install_full.gz mydump_new.sql <neuer shellbenutzer>@<neuer server>:~

Die neue Webseite vorbereiten

Auf dem alten Server sind wir fertig. Wir loggen uns daher aus und auf dem neuen Server wieder ein. Wie vorher schon stellen wir sicher, daß wir die bash benutzen und uns im Homeverzeichnis befinden:
bash
cd ~

Im Homeverzeichnis befinden sich jetzt die beiden Dateien wp_install_full.gz und mydump_new.sql, die wir vom alten Server herüber kopiert haben.

Zuerst stellen wir die Datenbank wieder her, dazu benötigen wir die Zugangsdaten für die neue Mysql-Datenbank:
mysql <neue Datenbank> -u <neuer Benutzer> -p < ~/mydump_new.sql

Anschließend entpacken wir die WordPress-Installation ins Homeverzeichnis:
tar xvzf wp_install_full.gz

Damit liegt die Webseite relativ unter dem alten Pfad im Homeverzeichnis. Mit mv schieben wir sie ins neue Verzeichnis. Bitte beachten: der alte Verzeichnispfad wird hier mittels ‚./‘ relativ angegeben, da wir vom Homeverzeichnis ausgehen. Den neuen Verzeichnispfad geben wir in diesem Beispiel absolut an, also mit führendem Schrägstrich ‚/‘.
mv ./<alter Verzeichnispfad>/{.[^.]*, *} /<neuer Verzeichnispfad>
Das Konstrukt {.[^.]*, *} veranlaßt die Bash, zuerst alle versteckten Dateien zu verschieben, also die, die mit einem Punkt beginnen. Danach kommen die übrigen Dateien an die Reihe.

Jetzt muß nur noch die wp-config.php für die neue Datenbank angepaßt werden. Die neuen Zugangsdaten können am einfachsten von Hand mit einem Zeileneditor wie nano oder vi eingetragen werden. Datei sichern und fertig.

Weil es aber auf dem alten Host schon so schön war, bemühen wir hier nochmals den Stromeditor sed. Hierbei entsteht eine neue Datei, deren Rechte dem jeweiligen Server angepaßt werden müssen:
cd /<neuer Verzeichnispfad>
cat wp-config.php | sed -e 's|<alter DB-Host>|<neuer DB-Host>|g;s|<alter DB-Name>|<neuer DB-Name>|g;s|<alter DB-Benutzer>|<neuer DB-Benutzer>|g' > wp-config-new.php && mv wp-config-new.php wp-config.php
chmod go-rw wp-config.php # Manche Server benötigen in der Gruppe Leserechte z.B. durch chmod 640 wp-config.php, bitte prüfen

Fertig. Durch das direkte Kopieren von Server zu Server (und damit dem Umgehen des DSL-Upload-Flaschenhalses) kann ein Serverumzug in dieser Form in weniger als einer Stunde vonstatten gehen. Netterweise ziehen wir auf diese Weise gleich die Google- und Bing-Siteverifikation mit um und ersparen uns die sonst oft notwendige Neuinstallation von WordPress.

Serverumzug ohne Domainwechsel

Wenn die Webseite nur den Server wechselt, nicht aber den Domainnamen, empfiehlt sich ein erweitertes Vorgehen:
Wir richten eine neue Subdomain ein, z.B. new.<domain.tld>. Beim Umschreiben auf dem alten Host verwenden wir dann statt einer neuen Domain diese Subdomain:
cat mydump.sql | sed -e 's|<www.domain.tld>|new.<Domain.tld>|g;s|<alter Pfad>|<neuer Pfad>|g' > mydump_new.sql

Auf dem neuen Host das System wie oben beschrieben aufspielen und unter new.<Domain.tld> ausgiebig testen. Wenn der Test zufriedenstellend ausfällt:

  • die Datenbank des neuen Hosts wiederum mittels mysqldump sichern
  • mit sed auf den eigentlichen Domainnamen umschreiben
  • mit mysql wieder aufspielen
  • auf der alten Webseite die Kommentarfunktion sperren und auf den Serverumzung hinweisen
  • Domain umziehen oder im DNS-A-Record die neue IP-Adresse eintragen

Die Webseite auf dem neuen Server ist damit parallel zur alten Webseite online. Die Zugriffe gehen auf den neuen Server, sobald sich die neue IP-Adresse im DNS verbreitet hat. Bis auf die gesperrten Kommentare der alten Webseite gibt es damit praktisch keine Ausfallzeiten.

Hinterlassen Sie eine Antwort

Ihre Email-Adresse wird niemals veröffentlicht. Pflichtfelder sind mit * gekennzeichnet.