Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
|
server:ftplicity [2010/02/13 21:08] ewald Konfigurationsverzeichnis anlegen |
server:ftplicity [2011/11/09 17:52] (aktuell) ewald Option --single-transaction beim mysqldump-Aufruf |
||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| + | ====== Verschlüsseltes Backup mit ftplicity ====== | ||
| + | |||
| + | ''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. | ||
| + | |||
| + | ===== Quellen ===== | ||
| + | |||
| + | * http://www.howtoforge.com/ftp-backups-with-duplicity-ftplicity-debian-etch | ||
| + | * http://www.h-online.com/security/features/Backups-on-non-trusted-FTP-servers-747191.html | ||
| + | |||
| + | ===== Installation ===== | ||
| + | |||
| * ''duplicity'' installieren: | * ''duplicity'' installieren: | ||
| # aptitude install duplicity | # aptitude install duplicity | ||
| - | * [[ftp://ftp.heise.de/pub/ct/listings/0613-216.tar.gz|ftplicity]] laden, entpacken und ''ftplicity'' nach ''/usr/local/bin'' kopieren | + | * [[ftp://ftp.heise.de/pub/ct/listings/0613-216.tar.gz|ftplicity]] laden, entpacken und ''ftplicity'' nach ''/usr/local/sbin'' kopieren |
| - | * ''ftplicity'' beim ersten Aufruf nicht das Konfigurationsverzeichnis ''/root/.ftplicity'', deshalb vor dem Aufruf von ''save_config'' folgende Zeile einfügen: | + | * ''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/bin/ftplicity | + | # vi /usr/local/sbin/ftplicity |
| + | [...] | ||
| if [ ! -d "$CONFDIR" ] | if [ ! -d "$CONFDIR" ] | ||
| then | then | ||
| Zeile 13: | Zeile 27: | ||
| save_config | save_config | ||
| - | * GPG-Schlüssel erzeugen (als "richtiger" root per ''su -''): | + | * Damit bei Verwendung von ''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 ===== | ||
| + | |||
| + | * GPG-Schlüssel erzeugen (als "richtiger" root per "su -"): | ||
| # gpg –-gen-key | # gpg –-gen-key | ||
| - | * Verzeichnis für Konfiguration anlegen: | + | ===== Konfiguration ===== |
| + | |||
| + | * ''ftplicity'' aufrufen, um die Konfigurationsdatei zu erzeugen: | ||
| + | |||
| + | # ftplicity | ||
| + | |||
| + | * Konfigurationsdatei anpassen: | ||
| + | |||
| + | # 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 | ||
| + | |||
| + | * Folgende Dateien steuern den Ablauf von ''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 | ||
| + | |||
| + | * Exclude-Datei anlegen (nur nicht wieder herstellbare Dateien sichern, nicht das ganze Betriebssystem): | ||
| + | |||
| + | # 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 | ||
| + | |||
| + | ===== Erste Sicherung und Test ===== | ||
| + | |||
| + | * Erste Vollsicherung durchführen: | ||
| + | |||
| + | # ftplicity full | ||
| + | [...] | ||
| + | Errors 0 | ||
| + | |||
| + | * Restore testen: | ||
| + | |||
| + | # ftplicity fetch etc/passwd /tmp/passwd | ||
| + | |||
| + | ===== Cron-Job ===== | ||
| + | |||
| + | * Cron-Job einrichten: | ||
| + | |||
| + | # 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 | ||
| + | |||
| + | ===== MySQL-Backup ===== | ||
| + | |||
| + | Das MySQL-Backup wird von ''ftplicity'' per ''pre''-Kommando durchgeführt. Dabei werden mit ''mysqldump'' Dumps aller Datenbanken angelegt. | ||
| + | |||
| + | * MySQL-Backup-Benutzer anlegen: | ||
| + | |||
| + | $ mysql -u root -p | ||
| + | GRANT SHOW DATABASES, SHOW VIEW, SELECT, LOCK TABLES, RELOAD ON *.* to 'backup'@'localhost' IDENTIFIED BY 'password'; | ||
| + | FLUSH PRIVILEGES; | ||
| + | |||
| + | * MySQL-Backup-Verzeichnis anlegen: | ||
| + | |||
| + | # mkdir /var/backups/mysql | ||
| + | # chown root:root /var/backups/mysql | ||
| + | # chmod 750 /var/backups/mysql | ||
| + | |||
| + | * MySQL-Backup-Skript anlegen: | ||
| + | |||
| + | # 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 | ||
| + | |||
| + | * Zugriffsrechte für MySQL-Backup-Skript setzen: | ||
| + | |||
| + | # chown root:root /usr/local/sbin/mysqlbackup | ||
| + | # chmod 700 /usr/local/sbin/mysqlbackup | ||
| + | |||
| + | * MySQL-Backup-Skript vor dem Backup ausführen: | ||
| + | |||
| + | # vi /root/.ftplicity/pre | ||
| + | #!/bin/bash | ||
| + | |||
| + | /usr/local/sbin/mysqlbackup | ||
| + | |||
| + | * Zugriffsrechte für ''pre''-Kommando setzen: | ||
| - | # mkdir /root/.ftplicity | + | # chmod 700 /root/.ftplicity/pre |
| + | ===== Ausblick ===== | ||
| * Nachfolge-Projekt: [[http://duply.net/|duply]] | * Nachfolge-Projekt: [[http://duply.net/|duply]] | ||