Ubuntu Backupskript Apache Webserver und MySQL Datenbank: Unterschied zwischen den Versionen
Aus znilwiki
BLinz (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „ Kategorie:Apache2 Kategorie:Linux Kategorie:MySQL Kategorie:Ubuntu Meinen Webserver sichere ich mehrfach und auf verschiedene Arten parallel.<…“) |
(kein Unterschied)
|
Aktuelle Version vom 27. September 2016, 20:15 Uhr
Meinen Webserver sichere ich mehrfach und auf verschiedene Arten parallel.
Eine davon ist das ich alle meine Webseiten, die dazu gehörigen Datenbanken und das /etc Verzeichnis auf eine NFS Freigabe kopieren.
Dazu habe ich mir das folgende Skript gebaut:
#!/bin/bash
# Für MySQL Datenbankzugriff - Benutzer mit vollen rechten auf allen Datenbanken
username=root
password=*****
# Sichert alle MySQL Datenbanken, Webverzeichnisse sowie die wichtigsten Systemeinstellungen in ein Verzeichnis parallel zu dem Verzeichnis in dem das Skript selbst liegt.
# /Backuppfad/scripte/diesesSkript.sh
# /Backuppfad/Name-des-Server/...
# Aktuellen Pfad des Scripts ermitteln
# Lösung stammt von https://stackoverflow.com/questions/59895/can-a-bash-script-tell-which-directory-it-is-stored-in
echo "Ermittle den Pfad für die Backup-Dateien ..."
SOURCE="${BASH_SOURCE[0]}"
while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink
DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
SOURCE="$(readlink "$SOURCE")"
[[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located
done
DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
# Der Backuppfad ist über unserem Scriptpfad:
BACKUPPATH="$( cd -P "$( dirname "$SOURCE" )" && cd .. && pwd )/$( hostname )"
echo "Pfad Datenbanken ist : ${BACKUPPATH}/databases"
echo "Pfad Webseiten ist ..: ${BACKUPPATH}/www"
echo "Pfad Sonstiges ist ..: ${BACKUPPATH}/other"
DATETIME=$(date '+%Y-%m-%d--%H-%M-%S')
echo "Erstelle ggf. die Verzeichnisse ..."
mkdir -p "${BACKUPPATH}/databases"
mkdir -p "${BACKUPPATH}/www"
mkdir -p "${BACKUPPATH}/other"
echo "Lösche Backupdateien älter als 7 Tage ..."
find "${BACKUPPATH}/databases" -type f -mtime +7 -delete
find "${BACKUPPATH}/www" -type f -mtime +7 -delete
find "${BACKUPPATH}/other" -type f -mtime +7 -delete
echo "Sichere alle Datenbanken ..."
for x in $(mysql -u$username -p$password -Bse 'show databases'); do
case ${x} in
information_schema|performance_schema|mysql)
echo Skipping Database ${x} ...
;;
*)
echo Backup Database ${x} ...
mysqldump -u$username -p$password $x | gzip > "${BACKUPPATH}/databases/${x}__${DATETIME}.sql.gz"
esac
done
echo "Alle Datenbanken gesichert!"
echo "Sichere Webseiten ..."
for folder in $(ls /var/www); do
case ${folder} in
clients)
echo Skipping Folder ${folders}
;;
*)
echo Backup Folder /var/www/${folder}
/usr/bin/nice -n 19 tar -hczf "${BACKUPPATH}/www/${folder}_$DATETIME.tar.gz" /var/www/${folder} 1>/dev/null
# tar Optionen:
# c = create Archiv / neues Archiv erstellen
# z = gzip = Mit gzip komprimieren
# f = Filename = angegebene Arhcivdatei nutzen
# h = Symbolischen Links folgen und die Dateien dahinter sichern
esac
done
echo "Alle Webseiten gesichert!"
echo "Sichere Konfiguartionsdateien ..."
/usr/bin/nice -n 19 tar -czf "${BACKUPPATH}/other"/etc+more_$DATETIME.tar.gz /etc /root /usr/local/etc /usr/local/sbin 1>/dev/null
echo "Alle Konfigurationsdateien gesichert!"
echo "Fertig!"
Einsatz im crontab z.B. wie folgt:
0 0 * * * /BACKUP/scripts/UniversalBackup.sh 1>/dev/null
Sichert um Mitternacht, bei Fehlern gibt es eine Email an den root-Benutzer (der per mir auf ein externes Postfach weitergeleitet wird)
Loading comments...