Windows: Webserver-Backup per FTP

ncftpget

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.

, , , , ,

18 Responses to Windows: Webserver-Backup per FTP

  1. Willi 14. März 2009 at 10:02 #

    Hi Stephan,

    ich habe da vielleicht eine Lösung für dein Wermutstropfen Problem ;-)
    Guck mal hier http://www.freeware-archiv.de/BatToExeConverter-Batch.htm damit lassen sich batch dateien in Exe Files Konvertieren.

    • Stephan A. 14. März 2009 at 10:07 #

      @Willi: herzhaften Dank! Das ist die Lösung nicht nur für meinen Wermutstropfen sondern auch für ein paar Scripts, die im Büro laufen müssen und bei denen man sich aus Sicherheitsgründen irgendwelche Abfragen gebastelt hat.
      Dangee :-) )

  2. Willi 14. März 2009 at 10:15 #

    Bütte immer wieder gern :-)

  3. Torsten 14. März 2009 at 13:57 #

    Sehr schöne Anleitung. Habe vor einiger Zeit mal eine ähnliche Anleitung veröffentlicht: http://www.feldstudie.net/2008/01/17/tutorial-sicherung-des-webspace-mittels-cron-und-bashscript/
    Vielleicht kannste damit Dein Script noch ein bisschen tweaken. Fauler geht immer. :P

  4. m@rtin 14. März 2009 at 18:27 #

    genau so etwas habe ich gesucht, danke stephan!

  5. Carsten Knobloch 17. März 2009 at 22:39 #

    Hui, Trackback gar nicht angekommen?

  6. Stephan A. 17. März 2009 at 22:45 #

    @cashy: im Dashboard schon, bei den Kommentaren allerdings nicht. Ich such grad, obs ein Fehler bei mir ist (neues Theme oder so)

  7. matzle 18. März 2009 at 11:40 #

    Hallo Stephan,

    ich finde solche einfachen Batchdateien super. Die sind einfach hilfreich.
    Ich habe allerdings zwei Probleme mit deiner Lösung (ich habe sie bei Cashy als Paket herunter geladen):
    1. Durch das cd tmp wird die ncftpget.exe nicht mehr gefunden. Deshalb habe ich den Zeilenanfang so abgeändert: ..\ncftpget -R -u
    Das 1. Problem konnte ich so lösen, die Daten werden jetzt geholt.
    2. Dann kommt aber ein Error nach dem Aufruf von 7-Zip, wo ich nicht mehr weiter komme: 7-Zip cannot find the code that works with archives.
    Hat jemand eine Idee, woran das liegen mag? Ich benutze Vista64bit und habe 7-Zip fest installiert.
    Ich habe bei Cashy auch schon gelesen, daß jemand anderes dieses Problem hat. Ich hoffe, daß das gelöst werden kann.

    MfG
    Matthias

    • Stephan A. 18. März 2009 at 11:52 #

      Hi Matzle,

      ich habe den Pfad zu 7zip (%programfiles%\7-zip) in meinen Path aufgenommen.
      Alternativ kannst Du 7z.exe auch mit der absoluten Pfadangabe in der Batch aufrufen:

      %programfiles%\7-zip\7z.exe usw…

      Dann sollte es klappen!

  8. matzle 18. März 2009 at 13:16 #

    Vielen Dank, mit %programfiles% hat es geklappt, allerdings erst, als ich den gesamten Pfad in ” ” gesetzt habe, weil sonst ein Leerzeichen im Pfad gewesen wäre. Das sieht jetzt so bei mir aus: “%programfiles%\7-Zip\7z.exe” a -tzip ..\%datum%.zip *.

  9. Philipp 20. April 2009 at 01:41 #

    Bitte “7z” durch “7za (standalone)” ersetzen, dann funktioniert’s. Hier ist meine Version: http://www.jeaphi.com/ftpbackup_7za.zip

    Bis bald,
    Philipp

  10. Jimly 27. April 2010 at 10:11 #

    Hi Stephan, hi NcFTP User!

    versuche mich gerade mit “ncftpget -R -u username -p passwort ftp://servername/pfad/
    Leider funktioniert der Rekursive -R Parameter nicht wirklich (bei mir?)!
    Führe ich den Befehl aus, so werden nur die Dateien im Root (= /pfad/) des Webverzeichnisses gesichert und alle Unterverzeichnisse, aber keine Dateien in den Unterverzeichnissen!
    Dafür enthält jedes Unterverzeichniss sich nochmals…
    Bsp.: /root/*.* alle Dateien
    /root/UV1/UV1 keine Dateien
    /root/UV2/UV2 keine Dateien
    /root/UV3/UV3 keine Dateien

    Hat jemand eine Idee woran es leigen könnte?

    Habe hier NCFTP 3.2.4 im Einsatz!

    Danke im Voraus!

    Jimly

    • Jimly 30. April 2010 at 23:54 #

      Es scheint, daß nicht jedes FTP Programm mit jedem Webserver kann.
      Einfach mal manuell einen Connect mit FTP und ncFTP machen und einen cd und dir ausführen. Da stellt man schnell fest, daß nicht jeder Server bei jedem dieser Programme dasselbe zurückmeldet!
      Für diesen (meinen) Fall muss ich von einem Server mit Wget -r , vom anderen Server mit ncFTPget -R den Inhalt lesen.

      Es geht nicht überall Wget wie auch nicht ncFTPget – also studieren geht über probieren!

      Ist zwar komisch, ist aber so.

      • Stephan A. 2. Mai 2010 at 14:00 #

        Da sag noch einer, dass sich alle zu 100% an die Standards halten ;-)

        Danke für die Infos!

Trackbacks/Pingbacks

  1. Horst Scheuer - 16. März 2009

    Interessanter Artikel zum Thema Backup per ftp http://tinyurl.com/am2nn2

  2. Caschys Blog - 18. März 2009

    Automatisiertes Backup der Daten eines http://FTP...

    Bin via Twitter über einen wunderbaren Beitrag von Stephan gestolpert. Wer automatisiert (unter Windows) Daten von seinem FTP sichern will, der sollte auf jeden Fall sein Tutorial “Windows: Webserver-Backup per FTP” lesen – quasi als Erweite…

  3. Off Topic: Sicher ist sicher « Semper Tiro - 19. März 2009

    [...] separat gesichert werden. Zur automatisierten Datensicherung eines Webservers über FTP gibt es hier einen guten Artikel (via Caschy, der auch die benötigten Programme zu einem kleinen Download-Paket geschnürt [...]

  4. Optimiert: Webserver-Backup mit ftpsync | Stephan A. aus B. - 4. September 2009

    [...] hatte ja hier schonmal beschrieben, wie ich unter Windows mit ncpget und 7zip meinen Webspace abziehe. Caschy hat [...]

Hinterlasse eine Antwort