automatisches Backup vom Blog mittels NAS

oder auch Projekt:

Go-Go-Gadgetto-Webspacebackup

Ich habe mir ein kleines Script geschrieben, mit dem ich von meinen Webspace ein Backup ziehen kann, incl. MySQL Datenbank.
Problematisch zb bei www.all-inkl.de ist deren Backupverhalten und die aufpreispflichtigen Cronjobs. Also musste eine Lösung her die das kostenlos kann. Ich dachte dabei sofort an eine vollautomatische Lösung welche auf meinem NAS läuft. Leider ist mein NAS, ein Zyxel NSA220 Plus, im Funktionsumfang nicht soo umfangreich wie die diverser Hersteller. Andere NAS Systeme haben stellenweise schon von Haus aus eine solche Funktion.

Also habe ich etwas gegoogelt, gescriptet, probiert, gebastelt und schlussendlich auch eine Lösung gefunden welche grundlegend so abläuft:

  1. erzeugen eines SQL-Dumps mittels eines PHP-Scriptes
  2. download der Daten via FTP incl des SQL-Dumps
  3. tar und zip der Daten und ablegen nach Datum
  4. löschen des temporären Downloadordners

Auf den Webserver musste ich nur ein kleines Script schieben, welches mir das Backup der Datenbank anlegt. Das Script habe ich hier kopiert und ein wenig angepasst. Geändert habe ich das dynamische generieren der Dateinamen dahingehend, dass das Script jetzt immer erstmal das alte Backup löscht und nachher unter dem selben Dateinamen ein neues File erzeugt. Sonst hätte ich ja nach einigen Wochen den Webspace mit DB-Backups vollgeschrieben.

[code]
<?php

######## einstellungen #############################################

$db_name = "DATENBANKNAME";
$db_passwd = "DATENBANKPASSWORT";

$sql_file = "dump_" . $db_name . ".sql";
$datei = $sql_file . ".gz";
####################################################################

exec("mysqldump -u $db_name -p'$db_passwd' --allow-keywords --add-drop-table --complete-insert --quote-names $db_name > $sql_file");
unlink("$datei");
exec("gzip $sql_file");

$datei = $sql_file . ".gz";
$link = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
$link = str_replace(basename(__FILE__),$datei,$link);
echo "Downloadlink: <a href='" . $link . "'>" . $datei . "</a>";

?>[/code]
Dieses niedliche Script habe ich "dbbackup.phpx" genannt und in einen extra dafür angelegten Ordner auf dem Webserver gepackt. Es muss natürlich entsprechende Schreibrechte auf dem Webspace haben....es muss ja ein Backupfile anlegen ;-) Dieser Datenbank-Dump liegt dann auf dem Webspace und kann damit mittels FTP mitgesichert werden.

Damit waren das auch schon die Vorbereitungen, welche am Webspace gemacht werden mussten. Jetzt konnte ich mich um das Thema NAS kümmern.

Als erstes musste ich feststellen, dass ich mir das mal wieder alles zu einfach vorgestellt hatte. Mein NAS hat keinen FTP-Client. Nur einen Server. *grummel*
Also eben schnell via SSH aufs NAS und einen installiert:

[code]wget http://ffp.wolf-u.li/additional/net-ftp/ncftp-3.2.4-1.tgz[/code]

[code]funpkg -i ncftp-3.2.4-1.tgz[/code]

Damit wäre Problem FTP-Client schon mal erledigt.
Ich habe einen Ordner auf dem NAS erzeugt und mir darin ein bash-Script mit dem Namen "backup_webspace.sh" angelegt:
[code]
wget http://pfad_zum_Datenbank-backupscript.phpx > /dev/null
sleep 5
ncftpget -R -u "USERNAME" -p "PASSWORD" FTP_Webserver /Pfad_auf_dem_NAS/ /Pfad_am_Remote_Server/
datum=`date -I`
tar -czf /Pfad_auf_dem_NAS/Backup_WP.$datum.tar.bz/Pfad_auf_dem_NAS/Wordpress/
rm -rf /Pfad_auf_dem_NAS/Wordpress
[/code]
*je nach Auflösung eures Bildschirmes kann es sein, dass im Code zeilenumbrüche sind, welche dort nicht hingehören -> Aufpassen!

In dem Script natürlich die Daten und Pfade entsprechend ändern und auch ausführbar machen [code]chmod +x backup_webspace.sh [/code]

Dieses Script enthält eigentlich die gesamte Logik. Ist ja nicht viel. Mittels "wget" starten wir das PHP-Script welches das Backup der Datenbank anlegt. Dafür hat es 5 Sekunden Zeit. "ncftpget" zieht sich rekursiv den gesamten Webspace, "tar" tar´t und zipt es (Nein, Tartar ist etwas anderes) und legt es nach Datum ab. Schlussendlich lösche ich noch den temporären Downloadordner.

Wenn man jetzt auf dem NAS das Script "backup_webspace.sh" aufruft legt es eine Sicherung des Webspaces incl. Datenbank auf dem NAS ab. Yeah!

Dieses wirre, zu Einsen und Nullen gewordene Hirngespinst Script auf dem NAS kann man jetzt auch recht sexy einfach in den Crontab legen und regelmäßig ausführen lassen.

[code]crontab -e[/code]

 Auf den Erfolg einen Kaffee.