# Backup-Frage



## redi78 (2. Dez. 2007)

Hallo Leute,

ich habe ein kleines Problem mit der Backupfunktion in ISPConfig.

Es laufen bei mir 4 Websites. Generell funktioniert die Backupfunktion mit Download bei keiner. Problem ist das sich die generierte *.zip Datei nicht öffnen lässt. Diese ist fehlerhaft und ca. nur 300KB groß.

Backup per FTP funktioniert bei 3 Webs wunderbar. Nur beim 4. Web (ca. 800 MB groß) kommt nach einigerzeit ein Popup welches abfragt ob ich die backup.php ausführen möchte oder nicht. Bei ja wird wieder nur eine ca. 300KB grosse *.zip Datei erstellt die sich nicht öffnen lässt.

Hat jemand eine Idee?

Danke und lg,
redi78


----------



## Till (2. Dez. 2007)

Wenn Du Webseiten mit 800 MB hast, dann solltest Du die Sicherung als tar.gz Cronjob durchführen, die ISPConfig Backup Funktion ist nur für kleine Kunden-Websites zur direkten Bedienung durch die Kunden gedacht, da bei zu großen Websites der Webbrowser einen Timeout erhält.


----------



## redi78 (21. Sep. 2008)

Hallo Leute, 

habe nun folgendes script erstellt und auf den server geladen.


```
#!/bin/bash # Titel: Backup-Script 
# Description: Sicherung von /var/log anlegen und automatisch auf einen festgelegten FTP-Server hochladen oder in ein Verzeichnis verschieben. 
# Version 1.0


# Allgemeine Angaben

# MYSQL_USER=[***]
# MYSQL_PASS=[***]
# FTP_SERVER=[***]
# FTP_USER=[***]
# FTP_PASS=[***]

# Festlegung des Datums - Format: 20050710
DATE=`date +"%Y%m%d"`

# Das Script

# Backup-Verzeichnis anlegen
cd ../ 
mkdir /backup
cd /backup
mkdir log

# Verzeichnisse die ins Backup integriert werden sollen 
# rsync -az --delete --delete-after /srv /backup
# rsync -az --delete --delete-after /etc /backup
cd ../
rsync -az --delete --delete-after /var/log /backup/log

# cd /backup/mysql

# Sicherung der Datenbanken
# mysqldump -AaCceQ --user=*** --password=*** -r mysql.dbs
# mysqldump -AaCceQ -u $MYSQL_USER -p$MYSQL_PASS -r mysql.dbs

cd /backup/log

# Alle Dateien mit tar.bz2 komprimieren
# tar cjfp files-$DATE.tar.bz2 srv
# tar cjfp etc-$DATE.tar.bz2 etc
tar cjfp logs-$DATE.tar.bz2 log
# tar cjfp mysql-$DATE.tar.bz2 mysql

# Alle komprimierten Dateien per FTP auf den Backup-Server laden
# ftp ftp://$FTP_USER:$FTP_PASS@$FTP_SERVER *$DATE* 21

# Alle komprimierten Dateien auf den Backup-Server verschieben
mv *$DATE* /media/backup/BackupNeu/log/

# Anschliessend alle auf den Server angelegten Dateien wieder löschen
rm -r -f /backup
```

Wenn ich es manuell ausführe, also mit dem Befehl: sh ./backup_log.sh dann läuft es so wie es soll.

Nun möchte ich das ganze als cronjob automatisieren.
Befehl:
crontab -e
10 11 * * * root /root/scripts/backup_log.sh

Nur leider wird der Job nicht ausgeführt. Kann mir jemand weiterhelfen?

Danke und lg,
redi78


----------



## Till (21. Sep. 2008)

Du musst alle Programme in dem Script mit absoluten Pfaden aufrufen.


----------



## redi78 (21. Sep. 2008)

mhh wie meinst du das absolute Pfade. Die Pfadangaben müssten so doch stimmten und zeigen genau auf die Scripte.


----------



## Till (21. Sep. 2008)

Statt:

rsync -az --delete --delete-after /var/log /backup/log

z.B.

/usr/bin/rsync -az --delete --delete-after /var/log /backup/log

und auch z.B. für mkdir etc. Du findest die Korrekten Pfade mit dem Programm which:

z.B.

which rsync

Das alles ist notwendig, da ein Cronjob die Pfade nicht kennt bzw. die path Variable nicht gesetzt ist, wie dies bei einem auf der Shell eingeloggten User der Fall ist.


----------



## redi78 (21. Sep. 2008)

Hallo Till,

habe jetzt das Skript entsprechend abgeändert. Nur leider passiert nach wie vor nichts:


```
#!/bin/bash # Titel: Backup-Script 
# Description: Sicherung von /var/log anlegen und automatisch auf einen festgelegten FTP-Server hochladen oder in ein Verzeichnis verschieben. 
# Version 1.0


# Allgemeine Angaben

# MYSQL_USER=[]
# MYSQL_PASS=[]
# FTP_SERVER=[]
# FTP_USER=[]
# FTP_PASS=[]

# Festlegung des Datums - Format: 20050710
DATE=`date +"%Y%m%d"`

# Das Script

# Backup-Verzeichnis anlegen
cd ../ 
/bin/mkdir /backup
cd /backup
/bin/mkdir log

# Verzeichnisse die ins Backup integriert werden sollen 
# rsync -az --delete --delete-after /srv /backup
# rsync -az --delete --delete-after /etc /backup
cd ../
/usr/bin/rsync -az --delete --delete-after /var/log /backup/log

# cd /backup/mysql

# Sicherung der Datenbanken
# mysqldump -AaCceQ --user=--password=-r mysql.dbs
# mysqldump -AaCceQ -u $MYSQL_USER -p$MYSQL_PASS -r mysql.dbs

cd /backup/log

# Alle Dateien mit tar.bz2 komprimieren
# tar cjfp files-$DATE.tar.bz2 srv
# tar cjfp etc-$DATE.tar.bz2 etc
/bin/tar cjfp logs-$DATE.tar.bz2 log
# tar cjfp mysql-$DATE.tar.bz2 mysql

# Alle komprimierten Dateien per FTP auf den Backup-Server laden
# ftp ftp://$FTP_USER:$FTP_PASS@$FTP_SERVER *$DATE* 21

# Alle komprimierten Dateien auf den Backup-Server verschieben
/bin/mv *$DATE* /media/backup/BackupNeu/log/

# Anschliessend alle auf den Server angelegten Dateien wieder löschen
/bin/rm -r -f /backup
```
cron befehl: 
10 12 * * * root /root/scripts/backup_log.sh


Bitte um Hilfe.

Danke und lg,
redi78


----------



## Till (21. Sep. 2008)

Wie hast Du denn den Cronjab abgelegt? Rufe bitte mal als root user auf:

crontab -e

und füge dann diese Zeile ein:

10 12 * * * /root/scripts/backup_log.sh &> /dev/null


----------



## redi78 (21. Sep. 2008)

mhhh meine crontab sieht jetzt so aus:


```
30 00 * * * /root/ispconfig/php/php /root/ispconfig/scripts/shell/logs.php &> /dev/null
59 23 * * * /root/ispconfig/php/php /root/ispconfig/scripts/shell/ftp_logs.php &> /dev/null
59 23 * * * /root/ispconfig/php/php /root/ispconfig/scripts/shell/mail_logs.php &> /dev/null
59 23 * * * /root/ispconfig/php/php /root/ispconfig/scripts/shell/cleanup.php &> /dev/null
0 4 * * * /root/ispconfig/php/php /root/ispconfig/scripts/shell/webalizer.php &> /dev/null
0,30 * * * * /root/ispconfig/php/php /root/ispconfig/scripts/shell/check_services.php &> /dev/null
15 3,15 * * * /root/ispconfig/php/php /root/ispconfig/scripts/shell/quota_msg.php &> /dev/null
40 00 * * * /root/ispconfig/php/php /root/ispconfig/scripts/shell/traffic.php &> /dev/null
05 02 * * * /root/ispconfig/php/php /root/ispconfig/scripts/shell/backup.php &> /dev/null
45 04 * * * root /usr/bin/updatedb &> /dev/null
22 12 * * * /root/scripts/backup_log.sh &> /dev/null
```
keine reaktion:


```
top - 12:22:38 up 2 days, 14:15,  1 user,  load average: 0.73, 0.60, 0.56
Tasks: 117 total,   1 running, 114 sleeping,   2 stopped,   0 zombie
Cpu(s):  1.3% us,  0.0% sy,  0.0% ni, 98.7% id,  0.0% wa,  0.0% hi,  0.0% si
Mem:    515940k total,   398456k used,   117484k free,    13736k buffers
Swap:  1220900k total,    18960k used,  1201940k free,   237608k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                       
25969 www-data  16   0 28788   9m 3516 S  1.7  2.0   0:03.93 apache2                                       
    1 root      16   0  1564  528  460 S  0.0  0.1   0:01.61 init                                          
    2 root      34  19     0    0    0 S  0.0  0.0   0:01.50 ksoftirqd/0                                   
    3 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 watchdog/0                                    
    4 root      10  -5     0    0    0 S  0.0  0.0   0:00.22 events/0                                      
    5 root      10  -5     0    0    0 S  0.0  0.0   0:00.00 khelper                                       
    6 root      10  -5     0    0    0 S  0.0  0.0   0:00.00 kthread                                       
    8 root      10  -5     0    0    0 S  0.0  0.0   0:00.21 kblockd/0                                     
    9 root      20  -5     0    0    0 S  0.0  0.0   0:00.00 kacpid                                        
  108 root      15   0     0    0    0 S  0.0  0.0   0:00.13 pdflush                                       
  109 root      15   0     0    0    0 S  0.0  0.0   0:00.00 pdflush                                       
  111 root      17  -5     0    0    0 S  0.0  0.0   0:00.00 aio/0                                         
  110 root      15   0     0    0    0 S  0.0  0.0   0:06.85 kswapd0                                       
  698 root      10  -5     0    0    0 S  0.0  0.0   0:00.00 kseriod                                       
 1789 root      10  -5     0    0    0 S  0.0  0.0   0:00.00 khubd                                         
 1880 root      15   0     0    0    0 S  0.0  0.0   0:12.70 kjournald                                     
 2076 root      12  -4  2108  544  368 S  0.0  0.1   0:00.45 udevd                                         
 2882 root      20   0     0    0    0 S  0.0  0.0   0:00.00 shpchpd_event                                 
 2919 root      11  -5     0    0    0 S  0.0  0.0   0:00.00 kgameportd                                    
 3008 root      11  -5     0    0    0 S  0.0  0.0   0:00.00 scsi_eh_0                                     
 3009 root      10  -5     0    0    0 S  0.0  0.0   0:00.12 usb-storage                                   
 3011 root      11  -5     0    0    0 S  0.0  0.0   0:00.00 scsi_eh_1
```

also der cron funkt trotzdem nicht. wenn ich da script manuell aufrufe funktionierts:   sh ./backup_log.sh


----------



## redi78 (21. Sep. 2008)

woran kann es liegen? hat jemand eine idee? ich weiss nicht mehr weiter.


----------



## redi78 (22. Sep. 2008)

hat schon jemand eine idee?


----------



## Till (22. Sep. 2008)

Und wenn Du die aktuelle Version auf der Shell startest, läuft sie problemlos?


----------



## redi78 (22. Sep. 2008)

hi till,

ja wie gesagt. wenn ich sie manuell auf der shell mittels sh ./backup_log.sh starte dann funktionierts.

allerdings ist mir aufgefallen, dass ich das script mit sh ... aufrufen muss. nur mit ./backup_log.sh funktionierts nicht.


----------



## Till (22. Sep. 2008)

Ok, dann hast Du vermutlich vergessen es ausführbar zu machen:

chmod +x backup_log.sh


----------



## redi78 (22. Sep. 2008)

mhhh ok ja das kann sein. mal sehen obs dann funktioniert. ich geb diesbezüglich noch bescheid.


----------



## redi78 (22. Sep. 2008)

achja was mir noch eingefallen ist, es gibt ja eine crontab die in /etc/crontab liegt. das ist die system weite.
und dann gibt es ja noch die userbezogene: aufruf mittels crontab -e.

welche sollte ich denn verwenden. ich mein es funktioniert bei beiden nicht.


----------



## Till (22. Sep. 2008)

Ich würde die userbezogene nehmen, also einfach crontab -a als root. Dort musst Du dann auch nicht den User angeben.

Kannst Du denn Dein Script jetzt auf der Shell ohne vorangestelltes sh ausführen?


----------



## redi78 (23. Sep. 2008)

mhh dann bekomme ich folgendes:



> root@Server1:~/scripts# backupmysql.sh
> -bash: backupmysql.sh: command not found
> root@Server1:~/scripts# ./backupmysql.sh
> /bin/bash: # Titel: Backup-Script: No such file or directory
> root@Server1:~/scripts#


----------



## Till (23. Sep. 2008)

Ändere die Zeile:

#!/bin/bash # Titel: Backup-Script 


in:

#!/bin/bash


----------



## redi78 (23. Sep. 2008)

mhh jetzt erhalte ich folgende meldung:



> root@Server1:~# cd /root/scripts
> root@Server1:~/scripts# ./backupmysql.sh
> ./backupmysql.sh: line 15: /bin/date=20080923: No such file or directory


----------



## Till (23. Sep. 2008)

Und Du bist sicher, dass es schon mal funktioniert hat?? Na egal, dann poste mal Zeile 15 aus dem Script.


----------



## redi78 (24. Sep. 2008)

Hi Till,
ja da bin ich mir ganz sicher. Hier das komplette Script:


```
#!/bin/bash
# Description: Sicherung von allen Mysql-Datenbanken anlegen und automatisch auf einen festgelegten FTP-Server hochladen oder in ein Verzeichnis verschieben. 
# Version 1.0


# Allgemeine Angaben

# MYSQL_USER=[***]
# MYSQL_PASS=[***]
# FTP_SERVER=[***]
# FTP_USER=[***]
# FTP_PASS=[***]

# Festlegung des Datums - Format: 20050710
/bin/date=`date +"%Y%m%d"`

# Das Script

# Backup-Verzeichnis anlegen 
cd /..
/bin/mkdir /backup
cd /backup
/bin/mkdir mysql

# Verzeichnisse die ins Backup integriert werden sollen 
# rsync -az --delete --delete-after /srv /backup
# rsync -az --delete --delete-after /etc /backup
# rsync -az --delete --delete-after /var/log /backup

cd /backup/mysql

# Sicherung der Datenbanken
/usr/bin/mysqldump -AaCceQ --user=*** --password=*** -r mysql.dbs
# mysqldump -AaCceQ -u $MYSQL_USER -p$MYSQL_PASS -r mysql.dbs

cd /backup

# Alle Dateien mit tar.bz2 komprimieren
# tar cjfp files-$DATE.tar.bz2 srv
# tar cjfp etc-$DATE.tar.bz2 etc
# tar cjfp logs-$DATE.tar.bz2 log
/bin/tar cjfp mysql-$DATE.tar.bz2 mysql

# Alle komprimierten Dateien per FTP auf den Backup-Server laden
# ftp ftp://$FTP_USER:$FTP_PASS@$FTP_SERVER *$DATE* 21

# Alle komprimierten Dateien auf den Backup-Server verschieben
/bin/mv *$DATE* /media/backup/BackupNeu/mysql/

# Anschliessend alle auf den Server angelegten Dateien wieder löschen
/bin/rm -r -f /backup
```


----------



## Till (24. Sep. 2008)

Die Zeile:

/bin/date=`date +"%Y%m%d"`

muss lauten:

date=`/bin/date +"%Y%m%d"`

da das date vorne eine Variable und nicht das Programm date ist.


----------



## redi78 (24. Sep. 2008)

hi till,

also wenn ichs jetzt händisch mit ./backupmysql.sh ausführe läufts durch und funktioniert auch korrekt.

allerdings wird er cron noch immer nicht gestartet. syslogeintrag ist aber da:



> Sep 24 10:35:01 Server1 /USR/SBIN/CRON[16600]: (root) CMD (root    /root/scripts/backupmysql.sh &> /dev/null)


----------



## Till (24. Sep. 2008)

Laut dem Log Eintrag wird der Cron aber gestartet. Woher weißt Du denn, dass er nicht gestaret wurde?


----------



## redi78 (24. Sep. 2008)

Hallo Till,
ich wollte mir das log des scripts bei der ausführung durch cron schreiben lassen:

10 11 * * * /root/scripts/backupmysl.sh > /root/scripts/mysqltestlog.log

da die datei erstellt worden ist (welche leer gewesen ist) muss ich annehmen, dass der cronjob ausgeführt wird. jedoch muss dann noch ein fehler im script sein, weil es nicht abgearbeitet wird. hat noch jemand eine idee?


----------



## redi78 (24. Sep. 2008)

ja du hast recht till, der cron wird gestartet. jedoch kann ich das backup nicht auffinden. top zeit auch keinen laufenden prozess diesbezüglich an. ich vermute es hängt noch irgendwo.


----------



## redi78 (24. Sep. 2008)

also leute herzlichen dank für eure hilfe,
jetzt funktionierts.

folgendes habe ich gemacht:


> /bin/mv *$DATE* /media/backup/BackupNeu/mysql*/*


nämlich lediglich das "/" nach mysql entfernt. sieht jetzt so aus:



> /bin/mv *$DATE* /media/backup/BackupNeu/mysql


jetzt läuft es.

lg redi78

p.s.: mhhh eigentlich ein komischer fehler


----------



## redi78 (13. Aug. 2009)

Hallo Leute,

leider ist es jetzt soweit das ich mal eine Datenbank aus der Sicherung zurückspielen muss. Mit diesem Skript habe ich ja von allen Datenbanken einen Dump gemacht.

Die Frage die sich jetzt stellt ist, wie kann ich nur eine einzelne Datenbank davon wieder zurück sichern?

Vielen Dank für eure Hilfe.

lg redi78


----------



## Till (13. Aug. 2009)

Wenn das Backup einer mysql DB mit dem Befehl mysqldump gezogen wurde, dann kannst Du es mit phpmyadmin wieder einspielen oder mit dem Kommandozeilen mysql client. Vorher aber die Datenbank leeren (nicht löschen), in die Du das Backup einspielen willst.

Auf der Kommandozeile geht das z.B. so:

mysql -u root -p datenbankname < /pfad/zu/datenbankbackup.sql

Wobei "datenbankname der Name der Zieldatenbank ist und "/pfad/zu/datenbankbackup.sql" der Pfad zur Backupdatei.


----------



## redi78 (13. Aug. 2009)

Hey Till,

danke für die rasche Antwort.

Liebe Grüsse an das gesamte Team,
redi78


----------

