PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Backup via Cronjob


Zero111
25.10.2009, 02:17
Um Serverabstürze und Datenverlust zu vermeiden sind regelmäßige Backups Pflicht!!

Nur die meisten sind zu faul diese regelmäßig zu erstellen und wundern sich warum nach einen datenverlust nur 2 Monate alte Daten zu verfügung stehen *g*

Da ich selber auch faul bin hab ich nen script gebastelt dass via Cronjob ausgeführt wird und einmal täglich SQL und Datenbestand sichert und dieses auf ein FTP Server auslagert:

Zur Einrichtung:

Ich habe in den Script 2 Temp Verzeichnisse voreingestellt:

/home/sql (für die Datenbank)
/home/backup (für die Zip)

Diese kann man natürlich ändern..
Jedoch sollten diese Verzeichnisse vor den ersten scriptstart vorhanden sein..

Das Script benötigt Zip und lftp

Ich gehe jetzt davon dass die Verzeichnisse nicht geändert werden:


ich hab es im root Ordner geschmissen /root
Name: backup.sh

##!/bin/sh

#################################################
#################################################
#################################################
##### #####
##### Backup Script #####
##### #####
##### Version 1 #####
##### #####
##### #####
##### Sichert SQL Datenbanken #####
##### #####
##### und Webspace #####
##### #####
##### auf einen FTP Server #####
##### #####
#################################################
################## by Zero111 ###################
#################################################


#################################################
##### #####
##### Initialisierung #####
##### #####
#################################################

echo "[`date '+%d.%m.%Y %H:%M:%S'`] Initialisierung"

# Aktuelles Datum im Format DD.MM.YYYY generieren
DATUM=`date '+%d.%m.%Y'`

###
### Verzeichnisse und Dateinamen
###

# Name der Backup-Datei
BACKUP_FILE="Backup-${DATUM}.zip"

# temporaerer Speicherort des Backup-Archivs
BACKUP_TMP="/home/backup/"

# kompletter Pfad zum Backup
BACKUP=${BACKUP_TMP}${BACKUP_FILE}

# temporarer Speicherirt der Datenbanken
SQL_TEMP="/home/sql/"

# Dateiname der Datenbank 1
DB_1="Datenbank_1${DATUM}.gzip"

# Dateiname der Datenbank 2
DB_2="Datenbank_2${DATUM}.gzip"

# Verzeichnisse die gesichert werden sollen
BACKUP_DATA="/home/sql /verzeichnis2 /verzeichnis3..."

###
### Zugaenge und Passwoerter
###

#### Datenbank 1 ####

# Host
DB_HOST_1="localhost"

# User
DB_USER_1="Username"

# Passwort
DB_PASSWORT_1="Passwort"

# Name
DB_NAME_1="Datenbank"

#### Datenbank 2 ####

# Host
DB_HOST_2="localhost"

# User
DB_USER_2="Username"

# Passwort
DB_PASSWORT_2="Password"

# Name
DB_NAME_2="Datenbank"

#### FTP Daten ####

# Host
FTP_SERVER="Host oder IP Adresse"

# Port
FTP_PORT="21"

# User
FTP_USER="Username"

#Passwort
FTP_PASSWORT="Passwort"


#################################################
##### #####
##### Laufende Prozesse anhalten #####
##### #####
#################################################

# Apache Beenden
echo "[`date '+%d.%m.%Y %H:%M:%S'`] Apache Webserver beenden"
/etc/init.d/apache2 stop

# FTP beenden
echo "[`date '+%d.%m.%Y %H:%M:%S'`] FTP Server beenden"
/etc/init.d/proftpd stop

#################################################
##### #####
##### Sicherung der Daten #####
##### #####
#################################################

# SQL Datenbanken sichern
echo "[`date '+%d.%m.%Y %H:%M:%S'`] Datenbank:${DB_NAME_1} sichern"
mysqldump --add-drop-table --opt -h ${DB_HOST_1} -u ${DB_USER_1} -p${DB_PASSWORT_1} ${DB_NAME_1} | gzip -9c > ${SQL_TEMP}${DB_1}

echo "[`date '+%d.%m.%Y %H:%M:%S'`] Datenbank:${DB_NAME_2} sichern"
mysqldump --add-drop-table --opt -h ${DB_HOST_2} -u ${DB_USER_2} -p${DB_PASSWORT_2} ${DB_NAME_2} | gzip -9c > ${SQL_TEMP}${DB_2}

# lftpt Steuerdatei erstellen
echo "[`date '+%d.%m.%Y %H:%M:%S'`] lftp Steuerdatei erstellen"
touch /root/backup.ftp
echo "#backup.ftp" >> /root/backup.ftp
echo "open ${FTP_SERVER}:${FTP_PORT}" >> /root/backup.ftp
echo "user ${FTP_USER} ${FTP_PASSWORT}" >> /root/backup.ftp
echo "put ${BACKUP}" >> /root/backup.ftp

# Backup Daten sammeln und diese in ein Zip Archiv packen
echo "[`date '+%d.%m.%Y %H:%M:%S'`] Daten sammeln"
zip -r -q ${BACKUP} ${BACKUP_DATA}

# Backup Daten auf FTP uebertragen
echo "[`date '+%d.%m.%Y %H:%M:%S'`] Backup auf FTP Server übertragen"
lftp -f /root/backup.ftp

#################################################
##### #####
##### Abschließende Arbeiten #####
##### #####
#################################################

# Temporaere Daten loeschen
echo "[`date '+%d.%m.%Y %H:%M:%S'`] Temporäre Daten löschen"
rm -f /root/backup.ftp ${BACKUP} ${SQL_TEMP}${DB_1} ${SQL_TEMP}${DB_2}

# Apache starten
echo "[`date '+%d.%m.%Y %H:%M:%S'`] Apache Webserver starten"
/etc/init.d/apache2 start

# FTP starten
echo "[`date '+%d.%m.%Y %H:%M:%S'`] FTP Server starten"
/etc/init.d/proftpd start

### FERTIG ###
echo "[`date '+%d.%m.%Y %H:%M:%S'`] Fertig"

#################################################
######## by Zero111 ######## 25.10.2009 #########
#################################################
Das Script ist ausgelegt auf apache2 und proftpd
Diese beiden Prozesse werden während der Scriptlaufzeit angehalten und danach wieder gestartet. (um Konflikte zu vermeiden)

Das Script kann in den Zustand 2 getrennte Datenbanken sichern (zb Tracker und Forum etc)
Das ist natürlich beliebig erweiterbar.

Bitte überall die Zugangsdaten eintragen!!

Nun zur einrichtung:

aptitude install zip lftp

mkdir /home/sql
mkdir /home/backup

chmod 777 /home/backup.sh
Den Cronjob eintragen

(Hab ich im Web gefunden)


Starten Sie den Befehl crontab -e zum Erstellen oder Editieren Ihrer Cron-Datei, crontab -l zum auflisten der Cron-Jobs oder crontab -r zum löschen der Cron-Jobs.

Eine Zeile in einer Cron-Datei sieht so aus:


1 2 3 4 5 /etc/meinSkript argumente




die fünf Zahlen am Anfang der Zeile repräsentieren folgendes:


1: Minuten (0-59)
2: Stunden (0-23)
3: Tag (1-31)
4: Monat (1-12 oder January, February, March, ...)
5: Wochentag(0-7 oder Monday, Tuesday, Wednesday, ... 0 und 7=Sunday)




Damit können Sie festlegen, zu welchen Zeiten das angegebene Skript gestartet werden soll. Damit jedoch nicht genug, Sie können die Zeiten noch etwas strukturierter angeben und zwar folgendermassen:


*: trifft immer zu
1-4: Bereich, trifft zu wenn 1, 2, 3 oder 4 zutrifft
1-4/2: Schrittweise, also 1 und 3
1,5,6: Aufzählung
*/3: jedes dritte
1-4,10-15: Aufzählung und Bereiche kombiniert




Ausserdem können Sie in der Datei festlegen, mit welcher SHELL die Skripte ausgeführt werden sollen, und wem eine E-Mail mit dem Ergebnis zugesandt werden soll:
SHELL=/bin/bash
MAILTO=mir@localhost

So, nun noch ein paar Beispiele:


# jeden Tag um 0:05
5 0 * * * $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
# am ersten jeden Monats um 14:15
15 14 1 * * $HOME/bin/monthly
# um 22:00 wochentags
0 22 * * 1-5 mail -s "It's 10pm" joe%Joe,%%Where are your kids?%
# jeden Tag 23 Minuten nach jeder geraden Stunde (0:23, 2:23, ...)
23 0-23/2 * * * $HOME/status.sh
# Sonntags um 4:05
5 4 * * sun $HOME/backup.sh full




Hinweis:
Wochentage und Kalendertage schliessen sich nicht aus, sondern werden getrennt betrachtet. Trifft also eines der beiden zu, wird das Skript ausgeführt.


Ich hab bei uns folgendes eingetragen:


0 4 * * * /root/backup.sh >> /root/backup.log
Das bewirkt dass das Backup jeden Tag um 4:00 ausgeführt wird und die Bildschirmausgabe die das Script erzeugt in der Datei /root/backup.log gespeichert werden.

Am besten jetzt einmal das Script testen ob läuft und ob man sich net verhauen hat bei den Zugängen xD

Sonst steht man dumm da xD



cd /root
./backup.sh
Das Script braucht je nach Datenmenge wenige Minuten

Das Ergebnis sollte so aussehen

[25.10.2009 03:11:39] Initialisierung
[25.10.2009 03:11:39] Apache Webserver beenden
* Stopping web server apache2 [ OK ]
[25.10.2009 03:11:39] FTP Server beenden
* Stopping ftp server proftpd [ OK ]
[25.10.2009 03:11:39] Datenbank:--- sichern
[25.10.2009 03:11:46] Datenbank:--- sichern
[25.10.2009 03:11:47] lftp Steuerdatei erstellen
[25.10.2009 03:11:47] Daten sammeln
[25.10.2009 03:12:08] Backup auf FTP Server übertragen
[25.10.2009 03:12:38] Temporäre Daten löschen
[25.10.2009 03:12:38] Apache Webserver starten
* Starting web server apache2 [ OK ]
[25.10.2009 03:12:38] FTP Server starten
* Starting ftp server proftpd [ OK ]
[25.10.2009 03:12:38] Fertig



So viel spaß damit.. Der nächste Datenbankcrash kann kommen xD

massiv
25.10.2009, 04:35
danke is ne schoene sache

rodi
25.10.2009, 09:55
Ich hab mir auch ein Skript geschrieben, welches die DB sichert und gepackt mit passwort abspeichert.
Was mich jedoch hier bei deinem Skript stört ist, dass ich drei Zugangsdaten eintragen muss, d.h. wenn jemand an den Server kommt so hat er auch gleich drei Zugangsdaten (unteranderem auch die des FTP).

NaIch
25.10.2009, 10:06
moinsen, dann zeig doch mal deines.
:cool:

Zero111
25.10.2009, 10:15
wie soll das sonst gehen... die meisten webanwendungen und php scripte speichern passwörter im klartext.

deswegen hab ich auch 2 login Felder gemacht (damit man nicht die root Daten der Datenbank nehmen muss)

und was ich dir jetzt sage wird dich bestimmt schocken:

Selbst bei der anmeldung am FTP Server werden Username und Passwort im Klartext übertragen :D weil das Protokoll das nicht unterstützt ;)

schienbein
25.10.2009, 10:40
und was ich dir jetzt sage wird dich bestimmt schocken:

Selbst bei der anmeldung am FTP Server werden Username und Passwort im Klartext übertragen :D weil das Protokoll das nicht unterstützt ;)

dan bau das ganze via FTPS auf :confused:


mfg schienbein

gotthummer
25.10.2009, 16:14
SFTP lautet da das geheimniss :)

schienbein
25.10.2009, 17:12
SFTP lautet da das geheimniss :)



sftp 115/tcp Simple File Transfer Protocol
sftp 115/udp Simple File Transfer Protocol



FTPS nett sich das


ftps-data 989/tcp ftp protocol, data, over TLS/SSL
ftps-data 989/udp ftp protocol, data, over TLS/SSL
ftps 990/tcp ftp protocol, control, over TLS/SSL
ftps 990/udp ftp protocol, control, over TLS/SSL



FTP


ftp-data 20/tcp File Transfer [Default Data]
ftp-data 20/udp File Transfer [Default Data]
ftp 21/tcp File Transfer [Control]
ftp 21/udp File Transfer [Control]




mfg schienbein

gotthummer
25.10.2009, 19:33
dann google mal nach secure ftp und informier dich über das protokol und guck wie es abgekürzt wird bevor du hier noch mehr schwachsinn schreibst

schienbein
25.10.2009, 19:47
dann google mal nach secure ftp und informier dich über das protokol und guck wie es abgekürzt wird bevor du hier noch mehr schwachsinn schreibst
glaub mir ich bin informiert

FTP über SSL (kurz FTPS) ist ein gängiges verschlüsseltes Dateiübertragungsverfahren auf Basis des File Transfer Protocols (http://de.wikipedia.org/wiki/File_Transfer_Protocol). Anders als bei Secure FTP (http://de.wikipedia.org/wiki/Secure_File_Transfer_Protocol)-Verbindungen wird hier die FTP-Verbindung selbst verschlüsselt, ohne alle Daten über eine unterliegende SSH (http://de.wikipedia.org/wiki/Secure_Shell)-Verbindung zu senden. Die Verschlüsselung des Kontrollkanals sowie des Datenkanals ist durch SSL (http://de.wikipedia.org/wiki/Secure_Sockets_Layer)- oder TLS (http://de.wikipedia.org/wiki/Transport_Layer_Security)-Authentifizierung bei einer Schlüsselgröße von derzeit bis zu 256 Bits (in diesem Fall AES (http://de.wikipedia.org/wiki/Advanced_Encryption_Standard)) möglich. Selbst Server-zu-Server (http://de.wikipedia.org/wiki/Server-zu-Server)-Übertragungen (FXP (http://de.wikipedia.org/wiki/File_Exchange_Protocol)) können per SSL/TLS verschlüsselt werden, dies ist jedoch bei weitem noch nicht standardisiert, und es existieren mehrere technische Möglichkeiten der Implementierung (zum Beispiel SSCN (http://de.wikipedia.org/wiki/SSCN)). Dank FTP über SSL ist es möglich, eine FTP-Übertragung auch im Passiv-Modus komplett zu verschlüsseln. Im Aktiv-Modus wird oft die Variante Implicit SSL (http://de.wikipedia.org/w/index.php?title=Implicit_SSL&action=edit&redlink=1) genutzt, wobei der Kontrollkanal sofort beim Verbindungsaufbau verschlüsselt wird und nicht erst durch das Klartext-Kommando AUTH SSL bzw. AUTH TLS, wie bei der Variante Explicit SSL (http://de.wikipedia.org/w/index.php?title=Explicit_SSL&action=edit&redlink=1) (auch FTPES genannt), dazu gebracht wird. Ältere FTP-Clients, welche kein FTP über SSL unterstützen, können durch die Nutzung von dementsprechenden FTP-Proxyservern (http://de.wikipedia.org/wiki/Proxyserver) „nachgerüstet“ werden. Heutzutage ist FTP über SSL bereits in vielen gängigen FTP-Clients (http://de.wikipedia.org/wiki/Client) sowie FTP-Servern (http://de.wikipedia.org/wiki/Server) implementiert,


Das wichtigste

die Nutzung von SSL ist empfehlenswert, damit keine unverschlüsselten Benutzernamen, Passwörter und Daten von Angreifern mitgelesen (http://de.wikipedia.org/wiki/Sniffing) werden können.



mfg schienbein

gotthummer
25.10.2009, 22:30
Das Secure File Transfer Protocol (engl. (http://de.wikipedia.org/wiki/Englische_Sprache) für „sicheres Dateiübertragungsverfahren“, kurz Secure FTP) ist ein Netzwerkprotokoll (http://de.wikipedia.org/wiki/Netzwerkprotokoll) zur Übertragung von Dateien über TCP/IP (http://de.wikipedia.org/wiki/TCP/IP)-Netzwerke. Die Besonderheit dabei ist, dass eine ansonsten ungesicherte File-Transfer-Protocol (http://de.wikipedia.org/wiki/File_Transfer_Protocol)-Verbindung (FTP) teilweise über Secure Shell (http://de.wikipedia.org/wiki/Secure_Shell) (SSH) getunnelt (http://de.wikipedia.org/wiki/Tunnel_%28Netzwerktechnik%29) wird.
Secure FTP überträgt die Authentifizierung (http://de.wikipedia.org/wiki/Authentifizierung) des Clients am Server sowie den Wechsel und die Auflistung von Verzeichnissen durch einen verschlüsselten SSH-Tunnel. Der eigentliche Datentransfer erfolgt wie bei FTP unverschlüsselt über einen anderen, zufällig ausgewählten Port, den Client und Server vorher aushandeln.
ich auch wie gesagt sftp sendet die daten auch verschlüsselt! Haben wir halt beide recht!

schienbein
25.10.2009, 23:34
ich denke mal so das wenn es um die verschlüsselungen der login daten geht
ist das sftp protocol völlig ausreichend und leicht einzurichten.

wen man aber wehrt auf ein verschlüsseltes login und eine verschlüsselte datenübertragung legt sollte man das ftps protocoll verwenden was etwas mehr aufwand mit sich bringt.


muß halt jeder selber wissen wie man mit seine daten um geht.wichtig ist nur das man potenziellen angreifern so wenig angriffsfläche wie möglich bietet.

in diesem sinne

mfg schienbein:D

Networking Homer
06.02.2011, 00:47
Das Script von Zero111 finde ich super und ich habe es weiterentwickelt. Meine Version hat folgende Features:

- Verzeichnis- und Dateisicherung via zip
- Backup von 6 DBs
- 2 FTP-Verbindungen via lftp
- FTP 1 soll via TLS verschlüsselt sein (Hinweise dazu im Script)
- FTP 2 darf unverschlüsselt sein, ZIP wird aber automatisch mit ccrypt verschlüsselt
- Via FTP werden OLD-Dateien des alten Backups erstellt. Die letzte OLD-Datei wird automatisch gelöscht
- Der Backup-Dateiname bleibt bei mir gleich (keine Datumsanpassung)
- SQL-Dump verarbeitet auch große Tables (>300)

Vielen Dank an dieser Stelle an Zero111 für die tolle Inspiration!

Nun zum Script:


##!/bin/sh
# ccrypt und lftp erforderlich (apt-get install ...)

###################################################################################
# Zu sichernde Verzeichnisse und Dateien bestimmen. #
# Beispiel Verzeichnisangabe: /var/www/sichermich/ #
# Beispiel-Zip-File-Angabe: sichermich.zip #
# Zip-Option (z.B. -r f¸r Unterverzeichnisse) wahlen #
# commandX: Raute vorsetzen, wenn nicht genutzt! Vermeidet komische ".Zip"-Files! #
###################################################################################

# Die Meldung wie ./backupscript.txt: line 231: /var/www/ zips/: is a directory" sind normal,
# wenn nicht alle 10 Verzeichnisvariablen (VZ1-10) besetzt sind.


VZ1="/var/www/vhosts/sichermich/"
zip1="sichermich.zip"
zipopt1="-r"
command1="zip"

VZ2=""
zip2=""
zipopt2=""
#command2="zip"

VZ3=""
zip3=""
zipopt3=""
#command3="zip"

VZ4=""
zip4=""
zipopt4=""
#command4="zip"

VZ5=""
zip5=""
zipopt5=""
#command5="zip"

VZ6=""
zip6=""
zipopt6=""
#command6="zip"

VZ7=""
zip7=""
zipopt7=""
#command7="zip"

VZ8=""
zip8=""
zipopt8=""
#command8="zip"

VZ9=""
zip9=""
zipopt9=""
#command9="zip"

VZ10=""
zip10=""
zipopt10=""
#command10="zip"


############################################################################
# Speicherorte fur Dateien/Verzeichnisse, Datenbanke und Backupfile #
############################################################################

# Name der Backup-Datei
BACKUP_FILE="Backup.zip"


# temporaerer Speicherort des Backup-Archivs
BACKUP_TMP="/var/www/tempzip/"

# kompletter Pfad zum Backup
BACKUP=${BACKUP_TMP}${BACKUP_FILE}

# Temporarer Speicherort der Verzeichnisse und Dateien sowie die DBs
BACKUP_DATA="/var/www/zips/"

# Passwort f¸r ccrypt-Datei
ccr="passwort"

###########################################################################
# Datum initialisieren #
###########################################################################

DATUM=`date '+%d.%m.%Y'`

############################################################################
# FTP-Daten: (1) mit TLS (2) ohne TLS aber dafür mit ccrypt-Verschlusselung#
############################################################################

# Host TLS (1) TLS notwendig, da ansonsten ein unverschlüsseltes ZIP ubertragen wird.
# TLS muss in der /etc/lftp.conf und an der Gegenstelle eingerichtet sein.

FTP_SERVER=""
FTP_PORT="21"
FTP_USER=""
FTP_PASSWORT=""


# Host ohne TLS (2), ZIP wird dafür mit ccrypt verschlüsselt
FTP_SERVER2=""
FTP_PORT2="21"
FTP_USER2=""
FTP_PASSWORT2=""

############################################################################
# Info zur Aktivierung von TLS in lftp (/etc/lftp.conf) #
############################################################################

#TLS-Aktivierung f¸r /etc/lftp.conf:

#set ftp:ssl-allow true
##set ftp:ssl-force true
#set ftp:ssl-protect-data true
#set ftp:ssl-protect-list true

############################################################################
# Datenbank-Daten (User, DB-Name, Passwort) fur 6 Datenbanke #
############################################################################


# Host
DB_HOST="localhost"

#### Datenbank 1 #############################

# User
DB_USER_1=""

# Passwort
DB_PASSWORT_1=""

# Name
DB_NAME_1=""

#### Datenbank 2 ##############################

# User
DB_USER_2=""

# Passwort
DB_PASSWORT_2=""

# Name
DB_NAME_2=""

#### Datenbank 3 ##############################

# User
DB_USER_3=""

# Passwort
DB_PASSWORT_3=""

# Name
DB_NAME_3=""

#### Datenbank 4 ###############################

# User
DB_USER_4=""

# Passwort
DB_PASSWORT_4=""

# Name
DB_NAME_4=""

#### Datenbank 5 ###############################

# User
DB_USER_5=""

# Passwort
DB_PASSWORT_5=""

# Name
DB_NAME_5=""

###############################################
#### Datenbank 6 ####

# User
DB_USER_6=""

# Passwort
DB_PASSWORT_6=""

# Name
DB_NAME_6=""

#################################################
##### #####
##### Sicherung der Ordner und Dateien #####
##### #####
#################################################
echo "[`date '+%d.%m.%Y %H:%M:%S'`] Die Dateien und Verzeichnisse werden gezippt."

cd ${VZ1}
${command1} ${zipopt1} ${BACKUP_DATA}${zip1} *

cd ${VZ2}
${command2} ${zipopt2} ${BACKUP_DATA}${zip2} *

cd ${VZ3}
${command3} ${zipopt3} ${BACKUP_DATA}${zip3} *

cd ${VZ4}
${command4} ${zipopt4} ${BACKUP_DATA}${zip4} *

cd ${VZ5}
${command5} ${zipopt5} ${BACKUP_DATA}${zip5} *

cd ${VZ6}
${command6} ${zipopt6} ${BACKUP_DATA}${zip6} *

cd ${VZ7}
${command7} ${zipopt7} ${BACKUP_DATA}${zip7} *

cd ${VZ8}
${command8} ${zipopt8} ${BACKUP_DATA}${zip8} *

cd ${VZ9}
${command9} ${zipopt9} ${BACKUP_DATA}${zip9} *

cd ${VZ10}
${command10} ${zipopt10} ${BACKUP_DATA}${zip10} *

#################################################
##### #####
##### Laufende Prozesse anhalten #####
##### #####
#################################################

# Apache Beenden
echo "[`date '+%d.%m.%Y %H:%M:%S'`] Apache Webserver beenden"
/etc/init.d/apache2 stop



#################################################
##### #####
##### Sicherung der Datenbanken #####
##### #####
#################################################

DB_1="${DB_NAME_1}${DATUM}.gzip"
DB_2="${DB_NAME_2}${DATUM}.gzip"
DB_3="${DB_NAME_3}${DATUM}.gzip"
DB_4="${DB_NAME_4}${DATUM}.gzip"
DB_5="${DB_NAME_5}${DATUM}.gzip"
DB_6="${DB_NAME_6}${DATUM}.gzip"

# SQL-Datenbanke sichern
echo "[`date '+%d.%m.%Y %H:%M:%S'`] Datenbank:${DB_NAME_1} sichern"
mysqldump --skip-lock-tables -h ${DB_HOST} -u${DB_USER_1} -p${DB_PASSWORT_1} ${DB_NAME_1} | gzip -9c > ${BACKUP_DATA}${DB_1}

echo "[`date '+%d.%m.%Y %H:%M:%S'`] Datenbank:${DB_NAME_2} sichern"
mysqldump -h ${DB_HOST} -u${DB_USER_2} -p${DB_PASSWORT_2} ${DB_NAME_2} | gzip -9c > ${BACKUP_DATA}${DB_2}

echo "[`date '+%d.%m.%Y %H:%M:%S'`] Datenbank:${DB_NAME_3} sichern"
mysqldump --skip-lock-tables -h ${DB_HOST} -u${DB_USER_3} -p${DB_PASSWORT_3} ${DB_NAME_3} | gzip -9c > ${BACKUP_DATA}${DB_3}


echo "[`date '+%d.%m.%Y %H:%M:%S'`] Datenbank:${DB_NAME_4} sichern"
mysqldump --skip-lock-tables -h ${DB_HOST} -u${DB_USER_4} -p${DB_PASSWORT_4} ${DB_NAME_4} | gzip -9c > ${BACKUP_DATA}${DB_4}


echo "[`date '+%d.%m.%Y %H:%M:%S'`] Datenbank:${DB_NAME_5} sichern"
mysqldump --skip-lock-tables -h ${DB_HOST} -u${DB_USER_5} -p${DB_PASSWORT_5} ${DB_NAME_5} | gzip -9c > ${BACKUP_DATA}${DB_5}


echo "[`date '+%d.%m.%Y %H:%M:%S'`] Datenbank:${DB_NAME_6} sichern"
mysqldump --skip-lock-tables -h ${DB_HOST} -u${DB_USER_6} -p${DB_PASSWORT_6} ${DB_NAME_6} | gzip -9c > ${BACKUP_DATA}${DB_6}


# Apache starten
echo "[`date '+%d.%m.%Y %H:%M:%S'`] Apache Webserver starten"
/etc/init.d/apache2 start

############################################################################
# Backup.Zip erstellen, das via FTP hochgeladen wird #
############################################################################

echo "[`date '+%d.%m.%Y %H:%M:%S'`] Daten sammeln"
zip -r -q ${BACKUP} ${BACKUP_DATA}


############################################################################
# FTP 1 und 2: Alte .old loschen und neue .old auf FTP-Server erstellen. #
############################################################################
#FTP 1: Losche alte OLD und benenne ZIP in OLD um.

echo "[`date '+%d.%m.%Y %H:%M:%S'`] lftp Steuerdatei fur Umbenennung auf ${FTP_SERVER} erstellen"
touch /root/rename.ftp
echo "#rename.ftp" >> /root/rename.ftp
echo "open ${FTP_SERVER}:${FTP_PORT}" >> /root/rename.ftp
echo "user ${FTP_USER} ${FTP_PASSWORT}" >> /root/rename.ftp
echo "rm ${BACKUP_FILE}.old" >> /root/rename.ftp
echo "mv ${BACKUP_FILE} ${BACKUP_FILE}.old" >> /root/rename.ftp





echo "[`date '+%d.%m.%Y %H:%M:%S'`] Lösche alte OLD-Datei und erstelle eine Neue auf ${FTP_SERVER}"
lftp -f /root/rename.ftp
echo "[`date '+%d.%m.%Y %H:%M:%S'`] fertig auf ${FTP_SERVER}"

#############################################################################

#FTP 2: Losche alte OLD und benenne ZIP in OLD um.

echo "[`date '+%d.%m.%Y %H:%M:%S'`] lftp Steuerdatei fur Umbenennung auf ${FTP_SERVER2} erstellen"
touch /root/rename2.ftp
echo "#rename2.ftp" >> /root/rename2.ftp
echo "open ${FTP_SERVER2}:${FTP_PORT}" >> /root/rename2.ftp
echo "user ${FTP_USER2} ${FTP_PASSWORT2}" >> /root/rename2.ftp
echo "rm ${BACKUP_FILE}.cpt.old" >> /root/rename.ftp
echo "mv ${BACKUP_FILE}.cpt ${BACKUP_FILE}.cpt.old" >> /root/rename2.ftp





echo "[`date '+%d.%m.%Y %H:%M:%S'`] Lösche alte OLD-Datei und erstelle eine Neue auf ${FTP_SERVER}"
lftp -f /root/rename2.ftp
echo "[`date '+%d.%m.%Y %H:%M:%S'`] fertig auf ${FTP_SERVER}"




############################################################################
# Neue Zips per ftp hochladen. (TLS und ZIP) #
############################################################################
# lftpt Steuerdatei erstellen (TLS)
echo "[`date '+%d.%m.%Y %H:%M:%S'`] lftp Steuerdatei erstellen TLS-ZIP"
touch /root/backup.ftp
echo "#backup.ftp" >> /root/backup.ftp
echo "open ${FTP_SERVER}:${FTP_PORT}" >> /root/backup.ftp
echo "user ${FTP_USER} ${FTP_PASSWORT}" >> /root/backup.ftp
echo "put ${BACKUP}" >> /root/backup.ftp




# Backup Daten auf FTP uebertragen
echo "[`date '+%d.%m.%Y %H:%M:%S'`] Backup auf FTP-Server ${FTP_SERVER} ¸bertragen"
lftp -f /root/backup.ftp

############################################################################
# Neue Zips per ftp hochladen. (ohne TLS aber mit ccrypt) #
############################################################################

cd ${BACKUP_TMP}
ccrypt -e -K ${ccr} -f ${BACKUP}

# lftpt Steuerdatei erstellen (offen, aber cryptet)
echo "[`date '+%d.%m.%Y %H:%M:%S'`] lftp Steuerdatei erstellen f¸r CRYPT-‹bertragung"
touch /root/backup2.ftp
echo "#backup2.ftp" >> /root/backup2.ftp
echo "open ${FTP_SERVER2}:${FTP_PORT}" >> /root/backup2.ftp
echo "user ${FTP_USER2} ${FTP_PASSWORT2}" >> /root/backup2.ftp
echo "put ${BACKUP}.cpt" >> /root/backup2.ftp



# Backup Daten auf FTP uebertragen
echo "[`date '+%d.%m.%Y %H:%M:%S'`] Backup auf FTP Server ${FTP_SERVER2} ¸bertragen (ZIP, offen, CRYPz.cpt)"
lftp -f /root/backup2.ftp




#################################################
##### #####
##### Abschliessende Arbeiten #####
##### #####
#################################################

# Temporaere Daten loeschen
echo "[`date '+%d.%m.%Y %H:%M:%S'`] Temporare Daten loschen"
rm -f /root/*.ftp

rm -f ${BACKUP} ${BACKUP}.cpt

rm -f ${BACKUP_DATA}${DB_1} ${BACKUP_DATA}${DB_2} ${BACKUP_DATA}${DB_3} ${BACKUP_DATA}${DB_4} ${BACKUP_DATA}${DB_5} ${BACKUP_DATA}${DB_6}

rm -f ${BACKUP_DATA}*.*



### FERTIG ###
echo "[`date '+%d.%m.%Y %H:%M:%S'`] Fertig"

DirtyPlaya
06.02.2011, 01:14
ich hab so ein script auch, nur das es nicht auf einen anderen server geschickt wird, mich würde mal interresieren wie man sowas automatisch aufm homerechner transformieren kann und ob das überhaupt geht

Zero111
06.02.2011, 01:25
pack auf dein rechner ne nen ftp server.. zb der von filezilla

leg dir ne dyndns adresse am falls du ne dynamische ip hast

und dann sollte das script laufen

DirtyPlaya
06.02.2011, 01:45
ja ich nutze aber nicht dieses script muss ich mal sehn wie ich das machen ;)

Zero111
06.02.2011, 01:58
mit lftp geht das ganz gut.. kann man auch problemlos mit anderen scripten machen

Stifler
14.02.2011, 17:03
Ich nütze für die Sicherung der MySQL Datenbank ein PHP Script was mir einen SQL Dump in eine Textdatei schreibt.. alle 48 Stunden
Datenbackup mache ich Manuell weil das ja doch CPU sehr lastig ist.

Im Zweifelsfall via PHP alle Dateien und Ordner des Apache htdocs Ordners zusammenzippen, gibt ja schon genug ZIP classen, ich verwende die EasyZip Class, und dann die Temporäre Zip Datei in ein anderes Verzeichnis verschieben. Da ich 2 Festplatten habe verschiebe ich es von C: auf D: und erspare mir die lästige FTP Spielerei.

Wichtig bei einem eigenen Cronjob Script wie ich eines habe, weil es Zeitaufwändig ist, das Zeitüberschreitungslimit von PHP zu deaktiveren:

set_time_limit(0);
oder
ini_set('max_execution_time', '0')

MfG

Zero111
14.02.2011, 17:20
Dabei bleibt anzumerken dass PHP Scripte die via Commandozeile ausgeführt werden von Haus aus die max_execution_time = 0 gesetzt haben

Von daher ist das unnötig dies nochmal im Script reinzuschreiben ;)

und ein Unix Shellscript arbeitet auch sehr performant.. Das Script braucht jede nacht um 6min um den kompletten Datenbestand zu sammeln (etwa 1,6GB)

Danach wird der apache wieder gestartet und das Backup auf einen anderen Server geschoben