Backup Shell Script Apache inkl. MySQL DB

Diese kleine Backupscript dient zur Sicherung von Dateien und Verzeichnissen eines Linux Rechners. In diesem Beispiel ist zusätzlich der Sicherung des Apache Webservers und der MySQL Datenbanken Rechnung getragen worden. Das Backup wird im Verzeichnis /root/bin als backup.sh erstellt.

Dieses Shell Script sicher die in der Variablen BDIRS angegeben Verzeichnisse. Ein externes (NAS, SAN, Netz-) Laufwerk wird unter /media gemountet ist. Hier werden das Backup als backup.tgz und die Datenbanken cloud und wordpress als cloud.sql und wordpress.sql gesichert.

#! /bin/sh

## Backup-Script: "Rechnername"

# Liste der zu sichernden Verzeichnisse definieren:

BDIRS="/root /home /etc /var/lib /var/www /var/log"

# Backup: Die oben definierten Verzeichnisse werden als backup.tgz in das Verzeichnis /media gesichert und komprimiert

/bin/tar  czvf "/media/Backup.tgz" $BDIRS

# DB Backup: Die Datenbanken werden ebenfalls in das Verzeichnis /media gesichert.

# Für "Passwort" das entsprechende Datenbank Passwort einsetzten.

/usr/bin/mysqldump --databases --opt -Q -uroot -pPasswort cloud > /media/cloud.sql

/usr/bin/mysqldump --databases --opt -Q -uroot -pPasswort wordpress > /media/wordpress.sql

## Anmerkung: Restore des Backups

##  /bin/tar -xzvf /media/backup.tgz

## DB Restore. Für "Passwort" das entsprechende Datenbank Passwort einsetzten!

## /usr/bin/mysql -u root -pPasswort< cloud.sql

## /usr/bin/mysql -u root -pPasswort < wordpress.sql

Das Script kann einfach dahin gehend erweitert werden, dass der Dateiname des zu erstellenden Backups das aktuelle Datum beinhaltet. So können mehrere Backup erstellt und unterschieden werden.

#! /bin/sh

# Backup-Script: "Rechnername“

# Datumsformat festlegen

DATUM=$(date +%F-%T)

# Liste der zu sichernden Verzeichnisse definieren:

BDIRS="/root /home /etc /var/lib /var/www /var/log"

# Backup: Beim Backup wird das Datum des Backups mit in den Dateinamen aufgenommen. Die oben definierten Verzeichnisse werden als Datum-backup.tgz in das Verzeichnis /media gesichert und komprimiert

/bin/tar czvf "/media/$DATUM Backup.tgz" $BDIRS

# DB Backup: Die Datenbanken werden ebenfalls in das Verzeichnis /media gesichert. Beim Backup wird auch hier das Datum des DB-Backups mit in den Dateinamen aufgenommen. Für "Passwort" das entsprechende Datenbank Passwort einsetzten.

/usr/bin/mysqldump --databases --opt -Q -uroot -pPasswort cloud > "/media/$DATUM cloud.sql"

/usr/bin/mysqldump --databases --opt -Q -uroot -pPasswort wordpress > "/media/$DATUM wordpress.sql"

## Anmerkung: Restore des Backups

##  /bin/tar -xzvf /media/DATUM-backup.tgz

## DB Restore. Für "Passwort" das entsprechende Datenbank Passwort einsetzten und für "DATUM" das Datum der Datei einsetzten.

## /usr/bin/mysql -u root -pPasswort< DATUM-cloud.sql

## /usr/bin/mysql -u root -pPasswort < DATUM-wordpress.sql

Damit das Backup regelmäßig ausgeführt wird, muss die Datei /etc/crontab editiert werden. Danach wird täglich um 3:32 Uhr das vorher erstellte Backup Script ausgeführt.

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# Definition des Jobs:
# .---------------- Minuten (0 - 59)
# | .------------- Stunden (0 - 23)
# | | .---------- Tag des Monats (1 - 31)
# | | | .------- Monat (1 - 12) oder jan,feb,mar,apr ...
# | | | | .---- Tag der Woche (0 - 6) (Sontag=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command 

# Das Backup /root/bin/backup.sh wird täglich um 3:32 Uhr als Benutzer root ausgeführt. 

32 3 * * * root test -x /root/bin/backup.sh && /root/bin/backup.sh 1>/dev/null