ftplicity ist ein Wrapper-Skript um duplicity, das inkrementelle Backups durchführt, die per GPG verschlüsselt werden.
Das Backup wird per scp auf den Hidrive-Plattenplatz kopiert.
duplicity installieren:# aptitude install duplicity
ftplicity legt beim ersten Aufruf nicht das Konfigurationsverzeichnis /root/.ftplicity an, deshalb vor dem Aufruf von save_config folgende Zeile einfügen:# vi /usr/local/sbin/ftplicity [...] if [ ! -d "$CONFDIR" ] then mkdir "$CONFDIR" || error "Konnte $CONFDIR nicht erstellen." save_config
scp das Kennwort aus der Umgebungsvariablen FTP_PASSWORD zur Authentifizierung dient (und nicht, wie es eigentlich besser wäre, ein SSH-Key), muss beim Aufruf von duplicity noch die Option –ssh-askpass hinzugefügt werden:# vi /usr/local/sbin/ftplicity
[...]
$DUPLICITY $cmd "$@" --encrypt-key $GPG_KEY \
--sign-key $GPG_KEY --verbosity $VERBOSITY \
--ssh-askpass
# gpg –-gen-key
ftplicity aufrufen, um die Konfigurationsdatei zu erzeugen:# ftplicity
# vi /root/.ftplicity/conf [...] GPG_KEY=... GPG_PW='...' [...] TARGET='scp://username@scp.hidrive.strato.com//users/username/backup/xxx.disorganized.de/' TARGET_PW='...' [...] MAXIMUM_AGE=1M
ftplicity;/root/.ftplicity/exclude: Liste von Verzeichnissen und Dateimustern, die nicht gesichert werden sollen (rsync-Syntax)/root/.ftplicity/pre: Kommandos, die vor dem Backup ausgeführt werden sollen/root/.ftplicity/post: Kommandos, die nach dem Backup ausgeführt werden sollen# vi /root/.ftplicity/exclude **/*~ **/core **/lost+found /aquota.group /aquota.user /bin /boot /dev /initrd /lib /media /mnt /opt /private-backup /proc /sbin /srv /sys /tmp /usr /var/cache /var/lib/named/dev/* /var/lock /var/run /var/tmp
# ftplicity full [...] Errors 0
# ftplicity fetch etc/passwd /tmp/passwd
# crontab -e # m h dom mon dow command # Inkrementelles Backup um 5 Uhr morgens 00 5 * * * /usr/local/sbin/ftplicity backup # Vollbackup um 6 Uhr morgens an jedem ersten des Monats, # veraltete Ketten loeschen # Kommandos sollten eigentlich mit && verkettet werden! 00 6 1 * * /usr/local/sbin/ftplicity full ; /usr/local/sbin/ftplicity purge --force
Das MySQL-Backup wird von ftplicity per pre-Kommando durchgeführt. Dabei werden mit mysqldump Dumps aller Datenbanken angelegt.
$ mysql -u root -p GRANT SHOW DATABASES, SHOW VIEW, SELECT, LOCK TABLES, RELOAD ON *.* to 'backup'@'localhost' IDENTIFIED BY 'password'; FLUSH PRIVILEGES;
# mkdir /var/backups/mysql # chown root:root /var/backups/mysql # chmod 750 /var/backups/mysql
# vi /usr/local/sbin/mysqlbackup
#!/bin/bash
set -e
DIR=/var/backups/mysql/
DB_USER=backup
DB_PASS='password'
OPT="--opt --single-transaction --quote-names --routines --flush-logs --allow-keywords"
# create backups securely
umask 0027
# list MySQL databases and dump each
DB_LIST=`mysql -u $DB_USER -p"$DB_PASS" -e'show databases;'`
DB_LIST=${DB_LIST##Database}
for DB in $DB_LIST;
do
FILENAME=${DIR}${DB}.sql.bz2
mysqldump -u $DB_USER -p"$DB_PASS" $OPT $DB | bzip2 > $FILENAME.tmp
mv $FILENAME.tmp $FILENAME
done
# chown root:root /usr/local/sbin/mysqlbackup # chmod 700 /usr/local/sbin/mysqlbackup
# vi /root/.ftplicity/pre #!/bin/bash /usr/local/sbin/mysqlbackup
pre-Kommando setzen:# chmod 700 /root/.ftplicity/pre