WordPress Datenbank umziehen mit der Kommandozeile

Irgendwann trifft es alle einmal: Die Website muss umziehen. Vielleicht weil der Provider gewechselt werden soll oder weil ein Klon auf der lokalen Entwicklungsumgebung benötigt wird. Grundsätzlich lässt sich der Umzug a) mit Plugins oder b) mit der Kommandozeile erledigen.

In diesem Tutorial möchte ich den Umzug mit der Kommandozeile zeigen. Doch erst einmal möchte ich auf die Frage eingehen:

Warum überhaupt ein Umzug mit der Kommandozeile?

Die meisten entscheiden sich wahrscheinlich eher für ein Plugin. Jedenfalls gibt es schier unzählige Tutorials bei denen beschreiben wird, wie eine Website mit Hilfe eine Plugins umgezogen wird. Dagegen finden sich kaum Infos über den Umzug mit der Kommandozeile.

Die Umzugs-Plugins kommen der gewohnten Arbeitsweise entgegen. Sie sind schnell installiert und können zum Teil sogar von technisch eher unversierten Leuten verwendet werden. Es gibt ein Formular, wo die Umzugsdaten eingetragen werden. Ein Knopfdruck und ab geht die Post.
In einer idealen Welt…

In der Realität kann so ein Umzug mit einem Plugin sehr ernüchternd sein. Wer es nicht glaubt, schaue mal in die Supportforen von solchen Plugins. ;-)

Mein Argument für den Umzug mit der Kommandozeile ist Zuverlässigkeit. Ich hatte leider in der Vergangenheit viele Probleme beim Umzug von größeren WordPress-Datenbanken (>mehrere hundert MB groß) auf eng beschnittenen Webservern (v.a. wegen kurzer Laufzeiten von Scripten) Auf der Suche nach einer verlässlichen Alternative bin ich schließlich auf die Kommandozeile gestoßen. Seit zwei Jahren arbeite ich auf diese Weise. Ich transferiere fast täglich Datenbanken von meiner lokalen Entwicklungsumgebung zum Liveserver bei den Kunden und umgekehrt. Seit ich den Weg über die Kommandozeile nehme, ist mir beim Umzug noch nie ein Problem aufgetreten!

Darüber hinaus ist die Kommandozeile ein sehr mächtiges und nützliches Tool für das täglichen Arbeiten auf dem Rechner. Dazu vielleicht später mal mehr in einem anderen Beitrag.

Deine Kommandozeile, das unbekannte Wesen

Die Kommandozeile – aka Terminal aka Konsole aka Befehlszeile aka CLI – ist auf jedem Betriebssystem zu finden. Aber genutzt wird sie wahrscheinlich nur von einer Minderheit. Es gibt sehr viele Vorbehalte selbst bei gestandenen Entwicklern und Entwicklerinnen.

Kommandozeile

Die Kommandozeile: nur ein unscheinbares Fenster mit einem blinkenden Cursor.

Die Kommandozeile ist der Ein-/Ausgabebereich zur textbasierten Steuerung des gesamten Computersystems. Es werden mit der Tastatur Befehle eingetippt und Ergebnisse ausgegeben.

Weil es keine grafische Oberfläche gibt, kommt die Kommandozeile bzw. die Programme, die darüber laufen, mit weniger Ressourcen aus als vergleichbare Programme mit einer grafischen Bedienoberfläche. Und sie sind dadurch vergleichsweise schneller.

Aber das ist längst nicht alles. Es gibt sehr viel kleine Kommandozeilenprogramme, die alle miteinander kombiniert werden können und sich automatisieren lassen.

Die Bash = Standard-Kommandozeile unter Linux

Es gibt viele Komandozeilenprogramme. ich verwende in meinem Beitrag das wohl verbreitetste: die Bash. Falls Ihr ein anderes Programm benutzt, sollten meine Beispiele genauso funktionieren.

Ich werde hier keine Einführung in die Bash geben. Die unten genannten Beispiele sind selbsterklärend und für alle nachvollziehbar. Allerdings kann es nicht schaden, sich mal grundsätzlich mit dem Konzept und Arbeitsweise auseinanderzusetzen.

Datenbank-Umzug

Im folgenden Beispiel erkläre ich, wie eine WordPress-Datenbank von einem Liveserver auf einen Server mit einer anderen Domain umgezogen wird.

Liveserver: http://wpdbash.test/

Testserver: http://local.wordpress.dev/

Für den Umzug ergeben sich folgende Schritte:

  1. Datenbank (Dump) vom Liveserver exportieren
  2. Dump komprimieren
  3. Transfer zum Testserver
  4. Dump dekomprimieren
  5. Dump importieren
  6. URLs im Dump an den Testserver anpassen

Zum Einsatz kommt dafür: Das Kommandozeilenprogramm Bash und die WP-CLI.

Eine wichtige Grundvoraussetzung ist außerdem, dass ein Zugriff per ssh auf die beiden Server möglich ist.

WP-CLI ist dein Freund

Die WP-CLI ist ein Kommandozeilenprogramm, das sehr viele nützliche Kommandos für die Arbeit mit WordPress bereit hält. Es erleichtert uns viele Arbeitsschritte und macht den Umzug ganz sicher.

Ich muss ehrlich gestehen, dass ich die WP-CLI bisher nicht ernsthaft verwendet hatte, weil ich mir die extra Installation zu aufwendig war und ich die URL-Anpassung mit einem vorhandenen Bash-Tool erledigt hatte. Dank eines freundlichen Hinweises von David Stingl weiß ich nun aber, dass ich ab jetzt und in aller Zukunft meine Faulheit überwinden und die WP-CLI einsetzen werde!

Auch auf die Einführung der WP-CLI möchte ich hier verzichten. Installation und Anwendung ist – wie man es bei WordPress nicht anders gewohnt ist – umfassend und verständlich.

Schritt 1: Datenbank vom Liveserver exportieren

Ich gehe davon aus, dass der Liveserver irgendwo bei einem Hoster steht. Der Testserver befindet sich auf einer Vagrant Entwicklungsumgebung auf dem eigenen Computer.

Um von der Bash auf dem lokalen Rechner zum Liveserver zu gelangen verwendet man ssh:

ssh user@wpdbash.test

ssh – Startet ssh
user – Loginname für ssh Zugriff
wpdash.test – die Adresse des Liveservers

Anschließend fragt die Kommandozeile noch nach dem Passwort. Nach der erfolgten Einwahl ist das „Innere“ des Liveservers erreicht. Jetzt kann die Datenbank vom Liveserver exportiert werden. Das wird im Schritt 2 erklärt.

Aber zuvor sollte erst mal ein Sicherheitsbackup von der Datenbank angefertigt werden:

wp db export sicherheitsbackup.sql

wp – startet WP-CLI
db export – exportiert die Datenbank
sicherheitsbackup.sql – der Dateiname des Sicherheitsbackups

Das Sicherheitsbackup bleibt unangetastet. Für den „Fall der Fälle“ lässt es sich später so zurückspielen:

wp db import sicherheitsbackup.sql

Jetzt weiter mit dem eigentlichen Export:

wp db export wpdbash.sql

Es wurde nun also die Kopie der Datenbank (Dump) angelegt, die im weiteren für den Umzug verwendet wird.

Schritt 2: Dump komprimieren

Dieser Schritt ist zwar für den eigentlichen Umzug nicht notwendig. Aber durch die Komprimierung wird der Dump kleiner und lässt sich somit schneller über das Internet übertragen.

gzip wpdbash.sql

Vom gzip-Programm wurde der Dump umbenannt in: wpdbash.sql.gz

Schritt 3: Transfer zum Testserver

Die Arbeit auf dem Liveserver ist getan. Die ssh-Verbindung kann abgebrochen werden:

exit

Nun geht es in der Bash auf dem lokalen System weiter. Der Dump wird transferiert:

scp user@wpdbash.test:/liveserver/pfad/wpdbash.sql.gz /lokaler/pfad/wpdbash.sql.gz

scp – startet den Transfer
user – Loginname für ssh Zugriff
wpdbash.test – die Adresse des Liveservers
:/liveserver/pfad/wpdbash.sql.gz – Pfad auf dem Liveserver zum Dump
/lokaler/pfad/wpdbash.sql.gz – Pfad auf dem lokalen Rechner, wo der Dump hin soll

Schritt 4: Dump dekomprimieren

gzip -d wpdbash.sql.gz

-d – Dekomprimiert den Dump und benennt ihn wieder um: wpdbash.sql

Schritt 5: Dump importieren

wp db import wpdbash.sql

Schritt 6: URLs an den Testserver anpassen

Der Dump wurde nun in die WordPress Datenbank des Testservers importiert. Im letzten Schritt müssen noch die Pfade an die Testumgebung angepasst werden. Dazu reicht es, die URLs zu ersetzen:

wp search-replace 'wpdbash.test' 'local.wordpress.dev'

wp – startet WP-CLI
search-replace – startet das Suchen und Ersetzen Programm der WP-CLI
‚wpdbash.test‘ – das zu ersetzende (Liveserver)
‚local.wordpress.dev‘ – das Ersetzende (Testserver)
–export=wpdbash.sql – Die Datenbank wird in die Datei wpdbash.sql exportiert

Fertig! Die Datenbank wurde damit auf den Testserver übertragen. :-)

This entry was posted on by .

Heiko Mamerow

Buddhist, Vater, Freund, Internetseitenbauer, Sportler, Musikliebhaber & Verkehrsteilnehmer ;-)

3 Gedanken zu „WordPress Datenbank umziehen mit der Kommandozeile

  1. Bernhard

    Schöne Anleitung. Leider noch mit einem kleinen Fehler. Beim Search-Replace arbeitest du auf der Datenbank, nicht auf der Datei. Nach dem Import sind die Pfade also wieder falsch.

    Ich mache es meistens so, dass ich zuerst den Dump importieren und dann ersetze. Das geht aber nur lokal ohne Probleme, da es hier ja nicht schlimm ist, wenn die Pfade nicht sofort stimmen.

    1. Heiko Mamerow Beitragsautor

      Hallo Bernhard, besten Dank für den Hinweis. Ich hatte auf Grund des Hinweises beim Meetup, die URL-Ersetzen vom Liveserver auf den Testserver angepasst und dabei die Reihenfolge übersehen. Habe es angepasst. :-)

Kommentare sind geschlossen.