
Sollte man ja eigentlich wissen: ein Backup in Ehren kann keiner verwehren. Bisher habe ich brav jede Woche auf meinem Windows-Arbeitsrechner mit Filezilla meinen Webspace runtergeladen.
Natürlich laufen auf der Webpräsenz täglich Prozesse, die mir die Datenbank wegsichern. Die DB-Dumps nehme mit dem FTP-Download dann auch mit.
Das war bisher Handarbeit, zumal ich den Backup anschliessend noch gezipped habe: eine grosse Datei kopiert sich auf die Sicherungsmedien immer noch schneller als 10.000++ kleine Dateien. Irgendwie habe ich bis dato keine bessere Lösung gefunden.
Aber ich bin ja von Beruf Admin und Admins sind faul. Also geht das jetzt besser – mit den kostenlosen Tools NcFTP-Client und 7zip und Windows Bordmitteln:
NcFTP-Client ist ein FTP-Client für die Kommandozeile ähnlich dem ftp von Microsoft. Dazu bringt NcFTP-Client noch eine ganze Reihe von weiteren Tools mit. Uns soll hier besonders das ncftpget interessieren. Damit kann man nämlich per Kommandozeile komlette Verzeichnisbäume abziehen.
Syntaxbeispiel:
md tmp
cd tmp
ncftpget -R -u username -p passwort ftp://servername/pfad/
Damit zieht ncftpget rekursiv (-R) mit dem angegebenen Userinfos den Server “ftp://servername/pfad/” in das aktuelle Verzeichnis “tmp”.
Wunderbar! Jetzt soll das Verzeichnis noch gezipped werden. Dazu installieren wir uns das Paket 7-zip, einen recht schmucklosen aber hervorragenden Komprimierer. Der bringt dann auch noch dankenswerterweise ein Kommandozeilentool namens 7z mit.
Syntaxbeispiel:
7z a -tzip ..\webbackup.zip *
Damit packt 7z alle Dateien und Verzeichnisse (*) in ein neues Archiv (a) des Typs ZIP (-tzip), wobei das neue Archiv “webbackup.zip” heisst und im übergeordneten Verzeichnis liegt (..\).
Klasse! Wir haben den Server abgezogen und die Dateien gezipped – jetzt sollen die runtergeladenen Files und Verzeichnisse noch gelöscht werden:
cd ..
rd /s /q tmp
Es wird das Verzeichnis “tmp” und alle Unterverzeichnisse (/r) ohne Nachfrage (/q) gelöscht.
Jetzt möchte man natürlich noch wissen, wann der Backup gemacht wurde, um ggfs. gezielt eine ältere Version einzuspielen. Dazu muss die Zipdatei mit dem Datum versehen werden. Ein Klassiker für den Befehl for:
for /f “delims=. tokens=1,2,3″ %%a in (‘echo %date%’) do set datum=%%c.%%b.%%a
rename webbackup.zip %datum%.zip
Ok, es werden also die ersten drei Objekte, die mit einem “.” getrennt sind aus der Ausgabe “echo %date%” (13.03.2009) ausgelesen und in die Variable “datum” in umgekehrter Reihenfolge geschrieben (set datum=%%c.%%b.%%a).
Anschliessend wird die ZIP-Datei umbenannt und heisst dann 2009.03.13.zip.
Der Ablauf ist zur Übersicht etwas umständlicher, als ich es in meiner eigenen Batch realisiert habe. Da geht das in etwa so:
for /f “delims=. tokens=1,2,3″ %%a in (‘echo %date%’) do set datum=%%c.%%b.%%a
md tmp
cd tmp
ncftpget -R -u username -p passwort ftp://servername/pfad/
7z a -tzip ..\%datum%.zip *
cd..
rd /s /q tmp
Drumherum sind noch ein paar Abfragen, ob bestimmte Dateien und Verzeichnisse existieren (if exist dateiname goto) usw. Aber das würde hier nur verwirren. Jedenfalls kann man sich mit diesem Grundgerüst prima eine saubere Datensicherung seiner Webpräsenz erstellen. Wer einen permanent laufenden Rechner hat muss die angepasste Batch nur in die geplanten Tasks in der Systemsteuerung eintragen und alles andere läuft automatisch.
Einziger Wermutstropfen: das Passwort des FTP-Servers steht im Klartext in der Batch. Bequemlichkeit vs. Sicherheit.
Letzte Kommentare