Daily PuTTY

Das Anfertigen einer Datensicherung wird meist völlig zurecht als störend empfunden. Es unterbricht oder hemmt den normalen Arbeitsablauf für Minuten oder sogar Stunden. Vielleicht überlegt man überdies zuvor noch einen Virencheck durchführen zu lassen, um zumindest eine saubere Kopie zu erzeugen. Dann dauert der ganze Prozeß nochmals länger. Und wann hat man jemals eine Datensicherung aufgrund von plötzlichem Datenverlust benötigt? Bisher wurde doch eine Sicherung mit anschließender Rücksicherung nur im Migrationsfall oder einem geplanten prophylaktischen HD-Tausch durchgeführt. Wie auch immer, Kopienahme der Datenbestände hat auch etwas beruhigendes.

Bei WordPress bezieht sich die Datensicherung auf zwei Bereiche. Da ist zum einen die MySQL Datenbank für WordPress mit seinen elf Tabellen (das entspricht der aktuellen WP-Standardinstallation). Dort werden die Artikel, Kommentare, Bezüge und strukturelle Daten abgelegt. Dieses Datenzentrum verdient natürlich sicherungstechnisch die höchste Aufmerksamkeit. An die Datenbank und seine Tabellen gelangt man mittels geeigneter MySQL-Clients. Das könnte zum Beispiel phpMyAdmin sein.

Der zweite Bereich betrifft die WordPress Installation. Eigentlich den variablen Teil davon. WordPress selbst ist ja jederzeit in der aktuellsten Version verfügbar und somit aus dem Stand wiederherstellbar. Individuelle Daten liegen aber beispielsweise in dem Ordner mit den eigenen Themen, und dem Ordner mit den sogenannten Multimedia-Daten. Für die Sicherung der gesamten WordPress Installation oder Teilen davon würde man zum Beispiel auf einen FTP-Client wie Filezilla zurückgreifen müssen.

Wie, was und wann man auch immer sichern mag, in der Regel benötigt man zwei verschiedene Abläufe und das ist für eine regelmäßige Datensicherung nicht gerade förderlich. Einige Web-Hoster bieten ihren Kunden einen SSH-Zugang (Secure Shell) zu ihrem reservierten Datenbereich an. Mittels eines geeigneten SSH-Clients kann man vom lokalen Arbeitsplatz auf den SSH-Server des Hosters und damit auf die eigenen Datenstrukturen und verfügbaren Programme zugreifen. Ein gut nutzbarer SSH-Client ist zum Beispiel PuTTY.

PuTTY selbst als GUI, bringt auch einige Kommandozeilen Tools mit, die es dem Anwender gestatten eine Sicherung beider Datenbereiche zusammenzufassen und über eine Batch-Datei (Windows) automatisiert ablaufen zu lassen. Hier zunächst exemplarisch der Aufruf von PuTTY auf der Kommandozeile eines Terminalfensters:

> c:\"program files (x86)"\putty\putty
  -ssh -P 22 -l ssh-user -pw ssh-password
  hostname_oder_ip

Die beiden Informationen zu ssh-user und ssh-password wurden natürlich zuvor vom Web-Hoster bekanntgegeben. An dieser Stelle sei ausdrücklich angemerkt, daß es selbstverständlich nicht state of the art ist, sich, wie in diesem Beispiel, durch die Mitgabe eines gewöhnlichen Paßworts beim Server zu authentifizieren. Richtig, weil sicherer, wäre die Public-Key-Authentifizierung mit privatem und öffentlichem Schlüssel. Aber das ist ein anderes Thema.

Mit dem vorstehenden PuTTY-Befehl hat man sich jetzt also erfolgreich in den Server eingewählt. Für eine Online-Session ist das bestens geeignet, aber für einen Batch-Ablauf vollkommen unbrauchbar. Hierfür gibt es das Kommandozeilen-Tool plink:

> c:\"program files (x86)"\putty\plink
  -ssh -P 22 -l ssh-user -pw ssh-password
  hostname_oder_ip
  /usr/bin/program_to_run

Das Tool plink ist sozusagen das Gegenstück zu putty für die Kommandozeile. Es verbindet sich in gleicher Weise mit dem Server, und setzt einen Befehl ab. Alle Ausgaben der aufgerufenen Programme auf STDOUT/STDERR erfolgen natürlich, wie bei putty auch, auf dem SSH-Client, also dem lokalen Arbeitsplatz. Anschließend wird die Verbindung wieder beendet.

Über diesen Weg gibt es also die Möglichkeit die Datenbank mittels mysqldump zu sichern. Bleibt noch die Aufgabe gezielt Dateien oder ganze Verzeichnisse auf den Client zu ziehen. Das Tool pscp, das gemeinsam mit PuTTY ausgeliefert wird, leistet genau diese Arbeit:

> c:\"program files (x86)"\putty\pscp
  -l ssh-user -pw ssh-password
  -r hostname_oder_ip:/www/htdocs/blog-user/wordpress
  c:\users\win-user\wordpress

Hier kopiert pscp das Host-Verzeichnis …/wordpress rekursiv (-r) und speichert es im Verzeichnis des Windows-Users ebenfalls unter …\wordpress ab. Die Dokumentation zu PuTTY und den Tools ist sehr ausführlich und somit zur Lektüre empfohlen.

Jetzt bleibt nur noch das Ganze sinnvoll in einem Skript oder einer Batch-Datei zusammenzufügen. Eine grobe Struktur ist nachfolgend dargestellt:

@echo off
::
:: 1. Sicherungsordner (S_jjjjmmtt_hhmmss) anlegen
::
for /f "tokens=1-3 delims=/.- " %%A in ('date /T') do (
    set TT=%%A& set MM=%%B& set JJJJ=%%C)
set Datum=%JJJJ%%MM%%TT%
for /f "tokens=1-3 delims=:, " %%A in ('echo %time%') do (
    set hh=%%A& set mm=%%B& set ss=%%C)
set Uhrzeit=%hh%%mm%%ss%
set Verzeichnis=S_%Datum%_%Uhrzeit%
mkdir c:\users\win-user\%Verzeichnis%
::
:: 2. Servereinwahl und Ausführung des Befehls 'mysqldump'
::
c:\"program files (x86)"\putty\plink -ssh -P 22 ^
  -l ssh-user -pw ssh-password ^
  hostname_oder_ip ^
  /usr/bin/mysqldump -u mysql-user -pmysql-password ^
  --opt ^
  --skip-extended-insert ^
  --databases ^
    wordpress ^
  --tables ^
    wp_commentmeta ^
    wp_comments ^
    wp_links ^
    wp_options ^
    wp_postmeta ^
    wp_posts ^
    wp_terms ^
    wp_term_relationships ^
    wp_term_taxonomy ^
    wp_usermeta ^
    wp_users ^
  > c:\users\win-user\%Verzeichnis%\blogdump.sql
::
:: 3. Download Dateien/Verzeichnisse
::
c:\"program files (x86)"\putty\pscp ^
  -l ssh-user -pw ssh-password ^
  -r hostname_oder_ip:/www/htdocs/blog-user/wordpress/wp-content/themes/my-themes ^
  c:\users\win-user\%Verzeichnis%
::
c:\"program files (x86)"\putty\pscp ^
  -l ssh-user -pw ssh-password ^
  -r hostname_oder_ip:/www/htdocs/blog-user/wordpress/my-media ^
  c:\users\win-user\%Verzeichnis%
::

Im ersten Schritt wird im aktuellen Client-Verzeichnis ein Ordner zur Aufnahme der Sicherungsdateien erstellt. Dieser Ordner erhält einen Namen bestehend aus dem Präfix »S«, dem aktuellen Datum gefolgt von der aktuellen Uhrzeit. Im zweiten Schritt erfolgt der Dump der WordPress Datenbank für ausgewählte Tabellen. Die Ausgabe (STDOUT) von mysqldump wird in den zuvor erstellten Sicherungsordner umgeleitet. Im dritten Schritt werden noch einige Verzeichnisse in den Sicherungsordner kopiert. Weitere Dateien/Verzeichnisse könnten hier noch folgen. Für einen Echteinsatz müßten unbedingt noch die Errorlevel abgeprüft werden. Außerdem könnte der Aufruf parametrisiert erfolgen, um den Umfang der Sicherungsmaßnahme zu steuern.
rh2011-08-001