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:
Code:
##!/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"