# Automatisches Web und SQL Backup



## psprofi (16. Juni 2008)

Hallo.

Gibt es eine Möglichkeit automatisch ein tägliches Web und SQL backup zu machen und dieses dann in einem Ordner zu verstauen, der außerhalb des öffentlichen webs ist aber per FTP verfügbar ist?


MfG
psprofi


----------



## Till (16. Juni 2008)

Setze die Optiom:

$go_info["server"]["do_automated_backups"] = 1;

in der Datei /home/admispconfig/ispconfig/lib/config.inc.php


----------



## psprofi (16. Juni 2008)

Erstmal Danke.
Wo werden die Backups dann gespeichert?

Werden die Backups auch automatisch gelöscht?

Muss ich nach der Änderung noch etwas machen?

In welchem Abstand werden wie backups gemacht?


----------



## Till (16. Juni 2008)

Zitat von psprofi:


> Wo werden die Backups dann gespeichert?


Im Unterverzeichnis "backup" des Webs.



> Werden die Backups auch automatisch gelöscht?


Nein.



> Muss ich nach der Änderung noch etwas machen?


Nein.



> In welchem Abstand werden wie backups gemacht?


Jede Nacht.


----------



## Blackwolf (14. Juli 2008)

Ich habe jetzt mal das automatische Backup laufen lassen.  In jedem Web (3) im jeweiligen Backupordner befindet sich eine Datei namens:  "backup_2008_07_14.zip" ... soweit so gut.

Strato stellt auf meinem Server einen Ordner namens "/private-backup" zur Verfügung, der bei einer evtl. Neuinstallation des Servers nicht berührt wird, infolgedessen als Backupspace ideal ist.  Deshalb meine Fragen:

1. ... ist es möglich, ISP-Config zu veranlassen, die automatischen Backups dorthinzu schreiben und wenn ja ... wie?

2. ... ist es - falls 1. bejaht wird - möglich, den Backupdateien individuelle Namen zuweisen zulassen, also z.B. "web11_backup_2008_07_14.zip" damit nicht das zuletzt gefertigte Backup die anderen überschreibt und wenn ja ... wie?

3. Wie ist es möglich, die Backups in einem evtl. notwendigen Fall wieder zurückzuspielen?  Da innerhalb des *.zip-Files weitere Zip-Files existeieren, müsste man sich - imho - einzeln durch das entpackte Backup hangeln, alles auspacken und dann mit "cp  " wieder zurückspielen.

Das müsste doch einfach gehen, oder?

Und abschliessend ...  4. Gibt es eine Möglichkeit, ISPConfig zu veranlassen, ein komplettes Backup (ISPConfig mit allen wichtigen Dateien, die kompletten Webs nebst ihrer SQL-Datenbanken) en bloc zu sichern, um im Falle eines kompletten Server-Absturzes das Backup ebenfalls en bloc zurückzusichern und damit den Urszustnd ohne nachträgliche Konfigurationsfummelei wieder herstellen zu können?

Falls ja, wie? Falls nein, welche Dateien resp. welche Pfade sind "händisch" zu sichern, um in einem späteren Notfall ISPConfig nebst Webs wieder "kampftauglich" zu haben?

Greetz Blackwlf


----------



## huschi (14. Juli 2008)

Zu 3. hab ich auf die Schnelle auch nichts gefunden. :?
Aber 1. und 2. kannst Du einfach mit Shell-Scripten lösen ohne in ISPConfig einzugreifen.
4. kannst Du ebenfalls selber backen: "mysqldump" und "tar czf ... /var/www/" reichen aus.

Ein Script könnte wie folgt aussehen (ungetestet!):

```
#!/bin/sh
#finde alle backup-Verzeichnisse
    #finde darin alle backup_-Dateien die älter als ein Tag sind
        #und lösche diese

find /var/www/ -name 'backup' -type d -maxdepth 2 -exec \
    find \{\} -mtime +1 -name 'backup_*' -exec \
        rm \{\} \
    \;
\;
```
huschi.


----------



## Blackwolf (14. Juli 2008)

*@ huschi ...*

 die Lösung ist bei mir "Plan-B"

... aber es muß doch möglich sein, ISP-Config eine Variable zu übergeben, die das aktuelle Web in dem das Backup geschrieben wird auszulesen und dann dem Dateinamen voranzustellen, oder?

Mal sehen, ob Till 'ne Idee hat.


----------



## huschi (14. Juli 2008)

Ändere in /root/ispconfig/scripts/shell/backup.php in den 3 Zeilen ab Zeile 126 folgenden Eintrag in den danach:
$backup_dir/$backup_file_name
$backup_dir/*$web_id-*$backup_file_name

huschi.


----------



## redi78 (14. Juli 2008)

Hi Leute,

mhhh also bei mir funkt die manuelle Backup Geschichte in ISPConfig auch nur bei kleinen Mysql Datenbanken. Wenn ich zb. eine DB mit über 35 MB backupen möchte, erhalte ich immer so eine art Timeout. PHP hat ja mit grossen DBs Probleme. Das wird dann wohl auch so mit dem automatischen Backup sein.

Gibts hierfür eine Lösung? Oder muss ich dann sowieso händisch sichern?

lg redi78


----------



## Blackwolf (14. Juli 2008)

@ huschi

Ich hab's geändert ....

mal sehen, was über Nacht passiert ....

(oder kann man das händisch anschubsen?)


----------



## redi78 (14. Juli 2008)

Hallo Leute,

gibts da auch für mein Problem eine Lösung?

lg redi78


----------



## Blackwolf (14. Juli 2008)

*@ redi78*

Also ich sichere meine Datenbanken via cronjob mit einem Script ... zum einen separat, also jede für sich und dann alle in einem script noch einmal extra.

Ersteres zum gezielten wiederherstellen eines Webs,... letzteres zum Absichern bei einem Komplett-Server-Crash.

Greetz ...
Blackwlf


----------



## Blackwolf (15. Juli 2008)

*@Huschi ...*

Das hat schonmal geklappt. 

Ich hab jetzt im /backup ein Zip mit dem Namen "13-backup_2008_07_15", ... in den anderen Webs also entsprechend.

Jetzt fehlt mir nur noch die Fundstelle, in der ich das Backup-Verzeichnis ändern kann.


Wenn ich die Anweisung hier wie folgt richtig interpretiere:


```
[Zeile 110 - 119 in der backup.php]
// Move file in /backup directory
                [COLOR=Red][B]$backup_dir = $httpd_root ."/web".$web_id."/backup";[/B][/COLOR]
                $web_user = fileowner($web_pfad);
                $web_group = filegroup($web_pfad);
                if(!@is_dir($backup_dir)) {
                  mkdir($backup_dir,0755);
                } else {
                  [B][COLOR=Green]exec("rm -rf $backup_dir/*");[/COLOR][/B]
                }
```
... dann wird in *dieser *Zeile die location des Backup-Verzeichnisses festgelegt. Wenn ich diese Zeile in:


```
[COLOR=Red][B][COLOR=Black]$backup_dir = [/COLOR]"/private-backup";[/B][/COLOR]
```
... ändere, dann müsste ISPConfig die Backups doch dorthin schreiben (Schreibrechte vorausgesetzt) "private-backup" liegt auch wie angegeben im Rootverzeichnis des Servers.

Weiterhin ....

... möchte ich verhindern, das ISPConfig die alten Backups löscht, was ich *dieser *Zeile entnehme.

Kann ich die Zeile einfach löschen, sodaß der Code später so aussieht:


```
// Move file in /backup directory
                [COLOR=Black]$backup_dir = "/private-backup";[/COLOR]
                $web_user = fileowner($web_pfad);
                $web_group = filegroup($web_pfad);
                exec("mv $tgz_name $backup_dir/$web_id-$backup_file_name");
                chown("$backup_dir/$web_id-$backup_file_name",$web_user);
                chgrp("$backup_dir/$web_id-$backup_file_name",$web_group);

                // Delete temp file
                exec("rm -rf $tmp_dir");
```
Damit müsste ich ...

... die Backups nach "private-backup" verlagert haben ...
... eine Backup-Historie aufbauen ...

... die ich dannn nach eigenem Gusto händisch oder via Script "ausflöhen" kann.

Oder irre ich mich?

Greetz ...
Blackwlf


----------



## Till (15. Juli 2008)

Das sollte eigentlich so funktionieren.


----------



## huschi (15. Juli 2008)

Zitat von redi78:


> Wenn ich zb. eine DB mit über 35 MB backupen möchte, erhalte ich immer so eine art Timeout.


Konkrete Fehlermeldung?



> PHP hat ja mit grossen DBs Probleme.


Aber es ist mysqldump der den Dump erzeugt.


huschi.


----------



## Blackwolf (16. Juli 2008)

*@ Till und huschi*

Könnt ihr nochmal kurz über die Syntax hier huschen:

```
// Move file in /backup directory
                [B][COLOR=Red]$backup_dir = "/private-backup"."/web-".$web_id;[/COLOR][/B]
                $web_user = fileowner($web_pfad);
                $web_group = filegroup($web_pfad);
                if(!@is_dir($backup_dir)) {
                  mkdir($backup_dir,0755);
                } [COLOR=Green][I][B](vormals else)[/B][/I][/COLOR]
                if(@fileowner($backup_dir) != $web_user) {
                  chown($backup_dir,$web_user);
                }
                if(@filegroup($backup_dir) != $web_group) {
                  chgrp($backup_dir,$web_group);
                }

                exec("mv $tgz_name $backup_dir/$web_id-$backup_file_name");
                chown("$backup_dir/$web_id-$backup_file_name",$web_user);
                chgrp("$backup_dir/$web_id-$backup_file_name",$web_group);
```
*Hier*:
... soll im bestehenden Verzeichnis "/private-backup" ein Verzeichnis namens (z.B.) "web-11" erzeugt werden, in die dann das Backup geschrieben wird ... also:

/private-backup/web-11/11-backup_2008_07_16.zip

*Hier:*
... habe ich die Else-Anweisung gekippt, da ich den rm-Befehl unterbinden will, was natürlich die "If-Anweisung" obsolet macht, aber ich möchte ihn am Anfang einmalig das Verzeichnis schreiben lassen.

Gilt Till's Kommentar:


			
				Zitat von Till:
			
		

> Das sollte eigentlich so funktionieren.


... noch immer? 

Greetz ...
Blackwlf


----------



## huschi (16. Juli 2008)

Ich sehe adhoc keinen Fehler. Aber Testen mußt das sowieso Du selber.
Falls Du Quota aktiviert hast und Dein Backup-Verzeichnis auf der selben Platte wie die Webs liegen, solltest Du die chown und chgrp überdenken.


huschi.


----------

