Funktions Update

Neue Optionen --restore, --list, --bash
This commit is contained in:
2018-07-14 11:26:01 +02:00
parent 199e953a18
commit a11a3b0502
3 changed files with 112 additions and 11 deletions
+5 -1
View File
@@ -33,4 +33,8 @@ MYSQL_PASS='secret'
# Wo auf dem Remote Server soll SQL_Dump abgelegt werden. # Wo auf dem Remote Server soll SQL_Dump abgelegt werden.
# Dieser Ordner wird zusammen mit $FOLDERS gesichert # Dieser Ordner wird zusammen mit $FOLDERS gesichert
MYSQL_DUMP_DIR='/var/backups/sqldump' MYSQL_DUMP_DIR='/var/backups/sqldump'
# Die Optionen die beim Backup eingesetzt werden
RDIFF_BACKUP_OPTS="--exclude-sockets --exclude-device-files --exclude-fifos --exclude-other-filesystems"
+3 -1
View File
@@ -6,4 +6,6 @@ DELETE_OLD_FILES='8W'
MYSQL_DB=() MYSQL_DB=()
MYSQL_USER='root' MYSQL_USER='root'
MYSQL_PASS='secret' MYSQL_PASS='secret'
MYSQL_DUMP_DIR='/var/backups/sqldump' MYSQL_DUMP_DIR="/var/backups/sqldump"
RDIFF_BACKUP_OPTS="--exclude-sockets --exclude-device-files --exclude-fifos --exclude-other-filesystems"
+104 -9
View File
@@ -7,6 +7,17 @@ BACKUP_DIR=/backups
CONFIG_DIR=/config CONFIG_DIR=/config
SSH_CF_DIR=/root/.ssh SSH_CF_DIR=/root/.ssh
read_config(){
#Konfiguration resetten
source "/reset-conf.sh"
if [ ! -f "$CONFIG_DIR/$1" ]; then
echo config nicht vorhanden!z
exit 1
fi
}
gen_config(){ gen_config(){
[ ! -f "$SSH_CF_DIR/id_rsa" ] && ssh-keygen -t rsa -b 4096 -f "$SSH_CF_DIR/id_rsa" -q -C "rdiff-backup-dockerized @ ${SSH_KEY_MARKER}" && chmod go-rwx $SSH_CF_DIR/id_rsa [ ! -f "$SSH_CF_DIR/id_rsa" ] && ssh-keygen -t rsa -b 4096 -f "$SSH_CF_DIR/id_rsa" -q -C "rdiff-backup-dockerized @ ${SSH_KEY_MARKER}" && chmod go-rwx $SSH_CF_DIR/id_rsa
@@ -22,8 +33,7 @@ gen_config(){
} }
backup(){ backup(){
#Konfiguration resetten read_config "$1"
source "/reset-conf.sh"
echo " " echo " "
echo Start backup $1 echo Start backup $1
@@ -42,7 +52,8 @@ backup(){
for db in "${MYSQL_DB[@]}" for db in "${MYSQL_DB[@]}"
do do
ssh ${REMOTE_USER}@${REMOTE_HOST} "mysqldump -u \"$MYSQL_USER\" \"-p$MYSQL_PASS\" --add-drop-database --routines --single-transaction \"$db\" > \"$MYSQL_DUMP_DIR/$db.sql\"" echo dumb database: "$db"
ssh ${REMOTE_USER}@${REMOTE_HOST} "mysqldump -u \"$MYSQL_USER\" \"-p$MYSQL_PASS\" --events --routines --triggers --single-transaction --add-drop-database -B \"$db\" > \"$MYSQL_DUMP_DIR/$db.sql\""
done done
# Ordner mit SQL-Dateien in die Sicherung aufnehmen # Ordner mit SQL-Dateien in die Sicherung aufnehmen
@@ -61,10 +72,18 @@ backup(){
fi fi
# die eigentliche Sicherung ... # die eigentliche Sicherung ...
rdiff-backup --exclude-special-files "${REMOTE_USER}@${REMOTE_HOST}::${dir}" "$BACKUP_DIR/${REMOTE_HOST}${dir}" echo backup file[s]: "$dir"
rdiff-backup $RDIFF_BACKUP_OPTS "${REMOTE_USER}@${REMOTE_HOST}::${dir}" "$BACKUP_DIR/${REMOTE_HOST}${dir}"
# alle Sicherungen die älter als $DELETE_OLD_FILES löschen # alle Sicherungen die älter als $DELETE_OLD_FILES löschen
rdiff-backup --remove-older-than $DELETE_OLD_FILES --force "$BACKUP_DIR/${REMOTE_HOST}${dir}" rdiff-backup --remove-older-than $DELETE_OLD_FILES --force "$BACKUP_DIR/${REMOTE_HOST}${dir}"
# Liste der Sicherungen anzeigen
if [ "$2" == "--list" ]; then
rdiff-backup -l "$BACKUP_DIR/${REMOTE_HOST}${dir}"
fi
echo " "
done done
# SCHRITT 3: # SCHRITT 3:
@@ -77,20 +96,96 @@ backup(){
echo " " echo " "
} }
# ACHTUNG NOCH NICHT FERTIG !!
restore(){ restore(){
read_config "$1"
echo " "
echo Start restore $1
echo ==================================================
# neue Konfiguration lesen
source "$CONFIG_DIR/$1"
# SCHRITT 1:
# Alle Dateien und Ordner aus dem letzten Backup wiederherstellen
if [ ${#MYSQL_DB[@]} -gt 0 ]
then
FOLDERS+=("$MYSQL_DUMP_DIR")
fi
for dir in "${FOLDERS[@]}" for dir in "${FOLDERS[@]}"
do do
rdiff-backup -r now "$BACKUP_DIR/${REMOTE_HOST}${dir}" "${REMOTE_USER}@${REMOTE_HOST}::${dir}" # die eigentliche Wiederherstellung ...
echo restore file[s]: "$dir" "$2"
if [ "$2" != "" ]; then
rdiff-backup --force -r "$2" "$BACKUP_DIR/${REMOTE_HOST}${dir}" "${REMOTE_USER}@${REMOTE_HOST}::${dir}"
else
rdiff-backup --force -r now "$BACKUP_DIR/${REMOTE_HOST}${dir}" "${REMOTE_USER}@${REMOTE_HOST}::${dir}"
fi
done done
# SCHRITT 2:
# Datenbanken wiederherstellen
for db in "${MYSQL_DB[@]}"
do
echo restore database: "$db"
ssh ${REMOTE_USER}@${REMOTE_HOST} "mysql -u \"$MYSQL_USER\" \"-p$MYSQL_PASS\" < \"$MYSQL_DUMP_DIR/$db.sql\""
[ "$MYSQL_DUMP_DIR" != "" ] && [ "$MYSQL_DUMP_DIR" != "/" ] && ssh ${REMOTE_USER}@${REMOTE_HOST} "rm -rf \"$MYSQL_DUMP_DIR/$db.sql\""
done
echo Done restore $1
echo " "
}
list(){
read_config "$1"
echo " "
echo Show backups of $1
echo ==================================================
# neue Konfiguration lesen
source "$CONFIG_DIR/$1"
if [ ${#MYSQL_DB[@]} -gt 0 ]
then
FOLDERS+=("$MYSQL_DUMP_DIR")
fi
for dir in "${FOLDERS[@]}"
do
echo show backups for file[s]: "$dir"
rdiff-backup -l "$BACKUP_DIR/${REMOTE_HOST}${dir}"
done
echo Done show $1
echo " "
} }
if [ "$1" == "--gen-config" ]; then if [ "$1" == "--gen-config" ]; then
gen_config gen_config
elif [ "$1" == "--backup" ]; then elif [ "$1" == "--backup" ]; then
backup "$2" shift
backup "$@"
elif [ "$1" == "--restore" ]; then
shift
restore "$@"
elif [ "$1" == "--list" ]; then
shift
list "$@"
elif [ "$1" == "--bash" ]; then
shift
/bin/bash "$@"
else else
echo "nichts zu tun?" echo "usage ?"
fi fi