Incremental backups with duplicity
This commit is contained in:
parent
e91d147cad
commit
96c69183fd
4 changed files with 121 additions and 86 deletions
14
README.md
14
README.md
|
@ -1,12 +1,14 @@
|
||||||
Froxlorbackup
|
Froxlorbackup
|
||||||
=============
|
=============
|
||||||
|
|
||||||
Backup your Froxlor Webhosting to another server. Encrypted, via ssh.
|
Backup your Froxlor Webhosting (or anything else) to another server. Encrypted, via ssh.
|
||||||
|
|
||||||
Works until version 0.9.32.
|
Works for all versions.
|
||||||
|
|
||||||
SQL works now also for Versions > 0.9.32.
|
0. install duplicity and all required packages
|
||||||
HTML is planned to be backed up with duplicity
|
1. copy the script to the froxlorserver and run it as /$PATH/backup-server.sh full
|
||||||
|
2. Add a cronjob like "17 2 * * * /$PATH/backup-server.sh"
|
||||||
|
3. Let the magic happen
|
||||||
|
|
||||||
The decrypt.sh file has just two lines. With them you can decrypt and untar your backups as long as they are back on the local storage.
|
You can restore your data with
|
||||||
For $encrypt in this file use the same path as you do in any other file
|
duplicity $EXTERNALPATH/TO/file $INTERNALPATH/TO/file
|
||||||
|
|
140
backup-server.sh
140
backup-server.sh
|
@ -1,46 +1,132 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# 2014 by Mainboarder.de
|
#
|
||||||
|
# Simple script for creating backups with Duplicity.
|
||||||
|
# Full backups are made on the 1st day of each month or with the 'full' option.
|
||||||
|
# Incremental backups are made on any other days.
|
||||||
|
#
|
||||||
|
# contains lines from http://menzerath.eu/artikel/froxlor-alle-datenbanken-und-verzeichnisse-sichern/
|
||||||
|
# and http://wiki.hetzner.de/index.php/Duplicity_Script
|
||||||
|
#
|
||||||
|
# USAGE: backup.sh [full]
|
||||||
#
|
#
|
||||||
# Keep this comment untouched and do not use this software for military purposes.
|
# Keep this comment untouched and do not use this software for military purposes.
|
||||||
# you are allowed to use this just like you want on your own risk.
|
# you are allowed to use this just like you want on your own risk.
|
||||||
#
|
#
|
||||||
|
|
||||||
path="var/customers/backups/"
|
# get day of the month
|
||||||
temp="var/customers/temp-backup-path/"
|
DATE=`date +%d`
|
||||||
sshkey="/etc/ssh/ssh_host_dsa_key"
|
|
||||||
encryption="path/to/enc.key"
|
|
||||||
external="user@extern.server.de"
|
|
||||||
externalpath="/media/mountpoint/backups"
|
|
||||||
|
|
||||||
# um <<tar - Entferne führende „/“ von Elementnamen>> zu vermeiden
|
# Set protocol (use scp for sftp and ftp for FTP, see manpage for more)
|
||||||
cd /
|
BPROTO='ssh'
|
||||||
|
|
||||||
# Ordner finden
|
# set user and hostname of backup account
|
||||||
for f in $( ls $path); do
|
BUSER='user'
|
||||||
|
BHOST='host.example.com'
|
||||||
|
|
||||||
# HTML-Dateien finden
|
# Setting the password for the Backup account that the
|
||||||
for g in $( ls $path$f | grep html); do
|
# backup files will be transferred to.
|
||||||
|
# for sftp a public key can and should be used.
|
||||||
|
#BPASSWORD='yourpass'
|
||||||
|
|
||||||
# Dateien kopieren
|
# MySQL-root-access
|
||||||
cp $path$f/$g $temp
|
mysql_user="root"
|
||||||
done
|
mysql_password="P4aSsw04d"
|
||||||
done
|
|
||||||
|
|
||||||
#Datum erstellen
|
# Temp Dir for SQL Backups (must exist)
|
||||||
|
temp="var/customers/temp_backup"
|
||||||
|
|
||||||
|
# directories to backup (but . for /)
|
||||||
|
BDIRS="etc var/customers"
|
||||||
|
ENDDIR="/media/hddmount/duplicity"
|
||||||
|
LOGDIR='/var/log/duplicity' # must exist
|
||||||
|
|
||||||
|
# Setting the pass phrase to encrypt the backup files. Will use symmetrical keys in this case.
|
||||||
|
PASSPHRASE='ult4a s3C43t!'
|
||||||
|
export PASSPHRASE
|
||||||
|
|
||||||
|
# encryption algorithm for gpg, disable for default (CAST5)
|
||||||
|
# see available ones via 'gpg --version'
|
||||||
|
ALGO=AES
|
||||||
|
|
||||||
|
##############################
|
||||||
|
|
||||||
|
### MySQL Export
|
||||||
|
# Date create
|
||||||
datum=$(date +"%d"."%m"."%y")
|
datum=$(date +"%d"."%m"."%y")
|
||||||
|
|
||||||
#Dateien zusammenpacken und komprimieren
|
cd /
|
||||||
tar cfvz backup-html-$datum.tar.gz $temp
|
|
||||||
|
|
||||||
#Verschlüsseln und gepackte Datei löschen
|
# find all databases
|
||||||
openssl aes-256-cbc -kfile $encryption -in backup-html-$datum.tar.gz -out ./backup-html-$datum.enc.tar.gz
|
databases=`mysql -u $mysql_user -p$mysql_password -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema|mysql)"`
|
||||||
|
|
||||||
rm backup-html-$datum.tar.gz
|
# export all databases
|
||||||
|
for db in $databases; do
|
||||||
|
mysqldump -u $mysql_user -p$mysql_password $db > "$temp/$db.sql"
|
||||||
|
done
|
||||||
|
|
||||||
#Kopieren und verschlüsselte Datei löschen
|
### Backup
|
||||||
scp -i $sshkey ./backup-html-$datum.enc.tar.gz $external:$externalpath
|
|
||||||
|
|
||||||
rm backup-html-$datum.enc.tar.gz
|
if [ $ALGO ]; then
|
||||||
|
GPGOPT="--gpg-options '--cipher-algo $ALGO'"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $BPASSWORD ]; then
|
||||||
|
BAC="$BPROTO://$BUSER:$BPASSWORD@$BHOST/$ENDDIR"
|
||||||
|
else
|
||||||
|
BAC="$BPROTO://$BUSER@$BHOST/$ENDDIR"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check to see if we're at the first of the month.
|
||||||
|
# If we are on the 1st day of the month, then run
|
||||||
|
# a full backup. If not, then run an incremental
|
||||||
|
# backup.
|
||||||
|
|
||||||
|
if [ $DATE = 01 ] || [ "$1" = 'full' ]; then
|
||||||
|
TYPE='full'
|
||||||
|
else
|
||||||
|
TYPE='incremental'
|
||||||
|
fi
|
||||||
|
|
||||||
|
for DIR in $BDIRS
|
||||||
|
do
|
||||||
|
if [ $DIR = '.' ]; then
|
||||||
|
EXCLUDELIST='/usr/local/etc/duplicity-exclude.conf'
|
||||||
|
else
|
||||||
|
EXCLUDELIST="/usr/local/etc/duplicity-exclude-$DIR.conf"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f $EXCLUDELIST ]; then
|
||||||
|
EXCLUDE="--exclude-filelist $EXCLUDELIST"
|
||||||
|
else
|
||||||
|
EXCLUDE=''
|
||||||
|
fi
|
||||||
|
|
||||||
|
# first remove everything older than 1 month
|
||||||
|
if [ $DIR = '.' ]; then
|
||||||
|
CMD="duplicity remove-older-than 1M -v5 $BAC/system >> $LOGDIR/system.log"
|
||||||
|
else
|
||||||
|
CMD="duplicity remove-older-than 1M -v5 $BAC/$DIR >> $LOGDIR/$DIR.log"
|
||||||
|
fi
|
||||||
|
eval $CMD
|
||||||
|
|
||||||
|
# do a backup
|
||||||
|
if [ $DIR = '.' ]; then
|
||||||
|
CMD="duplicity $TYPE -v5 $GPGOPT $EXCLUDE / $BAC/system >> $LOGDIR/system.log"
|
||||||
|
else
|
||||||
|
CMD="duplicity $TYPE -v5 $GPGOPT $EXCLUDE /$DIR $BAC/$DIR >> $LOGDIR/$DIR.log"
|
||||||
|
fi
|
||||||
|
eval $CMD
|
||||||
|
|
||||||
|
done
|
||||||
|
|
||||||
|
# Check the manpage for all available options for Duplicity.
|
||||||
|
# Unsetting the confidential variables
|
||||||
|
unset PASSPHRASE
|
||||||
|
unset FTP_PASSWORD
|
||||||
|
|
||||||
|
# Delete SQL Exports
|
||||||
|
|
||||||
rm -r $temp
|
rm -r $temp
|
||||||
mkdir $temp
|
mkdir $temp
|
||||||
|
|
||||||
|
exit 0
|
||||||
|
|
|
@ -1,46 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
# 2014 by Mainboarder.de
|
|
||||||
#
|
|
||||||
# Keep this comment untouched and do not use this software for military purposes.
|
|
||||||
# you are allowed to use this just like you want on your own risk.
|
|
||||||
#
|
|
||||||
# contains lines from http://menzerath.eu/artikel/froxlor-alle-datenbanken-und-verzeichnisse-sichern/
|
|
||||||
#
|
|
||||||
|
|
||||||
temp="var/customers/temp-backup-path"
|
|
||||||
backuppath="/mnt/usb/backups"
|
|
||||||
encryption="/path/to/enc.key"
|
|
||||||
sshkey="/etc/ssh/ssh_host_dsa_key"
|
|
||||||
external="user@extern.server.de"
|
|
||||||
mysql_user="root"
|
|
||||||
mysql_password="root"
|
|
||||||
|
|
||||||
# Programm
|
|
||||||
|
|
||||||
# um <<tar - Entferne führende „/“ von Elementnamen>> zu vermeiden
|
|
||||||
cd /
|
|
||||||
|
|
||||||
#Datum erstellen
|
|
||||||
datum=$(date +"%d"."%m"."%y")
|
|
||||||
|
|
||||||
#Datenbanken finden
|
|
||||||
databases=`mysql -u $mysql_user -p$mysql_password -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema|mysql)"`
|
|
||||||
|
|
||||||
#Datenbanken exportieren
|
|
||||||
for db in $databases; do
|
|
||||||
mysqldump -u $mysql_user -p$mysql_password $db > "$temp/$db.sql"
|
|
||||||
done
|
|
||||||
|
|
||||||
# Alle SQL-Dumps in ein Archiv packen
|
|
||||||
tar cfvz $temp/../backup-sql-$datum.tar.gz $temp
|
|
||||||
|
|
||||||
#Verschlüsseln und gepackte Datei löschen
|
|
||||||
openssl aes-256-cbc -kfile $encryption -in $temp/../backup-sql-$datum.tar.gz -out $temp/backup-sql-$datum.enc.tar.gz
|
|
||||||
|
|
||||||
rm $temp/../backup-sql-$datum.tar.gz
|
|
||||||
|
|
||||||
#Kopieren und verschlüsselte Datei löschen
|
|
||||||
scp -i $sshkey $temp/backup-sql-$datum.enc.tar.gz $external:$backuppath
|
|
||||||
|
|
||||||
rm -r $temp
|
|
||||||
mkdir $temp
|
|
|
@ -1,7 +0,0 @@
|
||||||
##
|
|
||||||
# This just shows how to decrypt and untar files
|
|
||||||
# replace $encryption with your path to the encryption file
|
|
||||||
##
|
|
||||||
|
|
||||||
openssl aes-256-cbc -d -kfile $encryption -in file.enc.tar.gz > file.tar.gz
|
|
||||||
tar xzfv file.tar.gz
|
|
Loading…
Reference in a new issue