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:51] ewald Quellen |
server:ftplicity [2011/11/09 17:52] (aktuell) ewald Option --single-transaction beim mysqldump-Aufruf |
||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| - | ====== Verschlüsselte Backups mit ftplicity ====== | + | ====== 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 ===== | ===== Quellen ===== | ||
| Zeile 12: | Zeile 16: | ||
| # 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'' legt beim ersten Aufruf nicht das Konfigurationsverzeichnis ''/root/.ftplicity'' an, 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" ] | ||
| Zeile 22: | Zeile 26: | ||
| mkdir "$CONFDIR" || error "Konnte $CONFDIR nicht erstellen." | mkdir "$CONFDIR" || error "Konnte $CONFDIR nicht erstellen." | ||
| save_config | save_config | ||
| + | |||
| + | * 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 ===== | ||
| Zeile 42: | Zeile 54: | ||
| GPG_PW='...' | GPG_PW='...' | ||
| [...] | [...] | ||
| - | TARGET='file:///private-backup/backup/tiger.disorganized.de/' | + | TARGET='scp://username@scp.hidrive.strato.com//users/username/backup/xxx.disorganized.de/' |
| - | TARGET_PW='x' | + | TARGET_PW='...' |
| [...] | [...] | ||
| MAXIMUM_AGE=1M | MAXIMUM_AGE=1M | ||
| * Folgende Dateien steuern den Ablauf von ''ftplicity''; | * Folgende Dateien steuern den Ablauf von ''ftplicity''; | ||
| - | * /root/.ftplicity/exclude: Liste von Verzeichnissen und Dateimustern, die nicht gesichert werden sollen (rsync-Syntax) | + | * ''/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/pre'': Kommandos, die vor dem Backup ausgeführt werden sollen |
| - | * /root/.ftplicity/post: Kommandos, die nach 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): | * Exclude-Datei anlegen (nur nicht wieder herstellbare Dateien sichern, nicht das ganze Betriebssystem): | ||
| Zeile 80: | Zeile 92: | ||
| /var/run | /var/run | ||
| /var/tmp | /var/tmp | ||
| - | |||
| - | * Ziel-Verzeichnis anlegen: | ||
| - | |||
| - | # mkdir -p /private-backup/backup/tiger.disorganized.de | ||
| - | # chmod -R 700 /private-backup/backup | ||
| ===== Erste Sicherung und Test ===== | ===== Erste Sicherung und Test ===== | ||
| Zeile 106: | Zeile 113: | ||
| | | ||
| # Inkrementelles Backup um 5 Uhr morgens | # Inkrementelles Backup um 5 Uhr morgens | ||
| - | 00 5 * * * /usr/local/bin/ftplicity backup | + | 00 5 * * * /usr/local/sbin/ftplicity backup |
| | | ||
| # Vollbackup um 6 Uhr morgens an jedem ersten des Monats, | # Vollbackup um 6 Uhr morgens an jedem ersten des Monats, | ||
| # veraltete Ketten loeschen | # veraltete Ketten loeschen | ||
| # Kommandos sollten eigentlich mit && verkettet werden! | # Kommandos sollten eigentlich mit && verkettet werden! | ||
| - | 00 6 1 * * /usr/local/bin/ftplicity full ; /usr/local/bin/ftplicity purge --force | + | 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: | ||
| + | |||
| + | # chmod 700 /root/.ftplicity/pre | ||
| ===== Ausblick ===== | ===== Ausblick ===== | ||
| * Nachfolge-Projekt: [[http://duply.net/|duply]] | * Nachfolge-Projekt: [[http://duply.net/|duply]] | ||