Where No One Has Gone Before
Für das Backup der Datenbank auf dem (Web)-Server gibt es im Netz reichlich Anleitungen. Meist wird ein MySQL Dump auf dem Server erzeugt, welcher dann auf einem FTP-Server geladen wird.
Jedoch haben Anleitungen oftmals einige Makel:
Hiermit wollte ich eine EINFACHE, aber effektive versionierte Backuplösung entwickeln. Das Geheimnis des Skripts sind die Pipes, welche, vereinfacht gesagt, Ausgaben eines Programms an ein weiteres Programm weitergeben. In der Unixwelt sind allgemein bekannt als das “|”-Zeichen. Dabei wird der Datenbank-Dump komprimiert und verschlüsselt auf dem FTP-Server gespeichert.
Das Skript wurde auf einem Debian System entwickelt/getestet und benötigt folgende Pakete:
Mit Hilfe eines Cronjobs lässt sich dieses Skript regelmäßig ausführen. Sinnvoll ist hierbei das täglich durchzuführen, da die Backups nach den Tag im Monat durchnummeriert werden und eine Ausgabe nach folgendem Schema erstellt wird:
5073 Nov 16 04:12 backup-16.sql.gz.pgp 5067 Nov 15 04:12 backup-15.sql.gz.pgp 5054 Nov 14 04:12 backup-14.sql.gz.pgp 5045 Nov 13 04:12 backup-13.sql.gz.pgp 5018 Nov 12 04:12 backup-12.sql.gz.pgp 4977 Nov 11 04:12 backup-11.sql.gz.pgp ....
In dem Skript müssen vor der ersten Ausführung noch folgende Konstanten gesetzt werden:
#!/bin/bash MYSQLDB= MYSQLUSER= MYSQLPASS= PASSPHRASE= FTPSERVER= FTPDIR= FTPUSER= FTPPASS= HTMLOUTPUT= # here starts the magic mysqldump -u $MYSQLUSER -p$MYSQLPASS --all-databases | gzip -9 | gpg -c --cipher-algo TWOFISH --digest-algo SHA512 --passphrase $PASSPHRASE | lftp -u $FTPUSER,$FTPPASS $FTPSERVER/$FTPDIR/ -e "put /dev/stdin -o backup-$(date +%d).sql.gz.gpg; echo Pro Zeile eine Backup-Datei mit Groesse, Datum und Name<pre\> > $HTMLOUTPUT ;cls --sort=date -s --date -1 >> $HTMLOUTPUT; echo </pre\> >> $HTMLOUTPUT; exit"
MYSQL* und FTP* sollten selbst erklärend sein, PASSPHRASE entspricht dem Passwort für das verschlüsselte Archiv. HTMLOUTPUT stellt einen Pfad zu einer Datei im Dateisystem dar, in welche die existierenden Backups angezeigt werden – hier empfiehlt sich eine HTML-Datei in einem vom Webserver lesbaren Bereich zu anzugeben.

MySQLBackup 0.1 - 788 bytes - 5 Downloads
Wie kann ich ein bestimmtes Backup automatisch wiederherstellen?
Ein automatisiertes Wiederherstellen der Datenbank-Dumps wäre sehr viel aufwendiger(, wenn auch nicht unmöglich). Da vorerst das Backup betrachtet wurde, gibt es keine automatisierte Lösung.
Wie kann ich dann ein Backup wiederherstellen?
Manuell..
wget ftp://user:passwort@server/mysqlbackup/backup-xx.sql.gz.gpg gpg -d backup-xx.sql.gz.gpg gunzip backup-xx.sql.gz mysql -u Mysqluser -pMysqlPasswort dbname < backup-xx.sql
..et voilà.
Wieso wurde lftp verwendet?
Manche Serveranbieter binden den FTP-Backup-Space an die IP-Adresse des Servers, jedoch an die Haupt-IP – sobald weitere virtuelle Adressen auf dem Server eingerichtet werden, kann es sein, dass Verbindung über eine zusätzliche IP hergestellt wird. Diese Verbindung lehnt der Backup-Server jedoch ab. So muss man die Haupt-IP-Adresse im FTP-Client binden. Dies unterstützt der Standard-Linux-FTP Client jedoch nicht.
Das ist mein kleines, feines Blog.
Follow
1 Response to MySQL-Backup “On-The-Fly”
Loaden
März 18th, 2010 at 13:30
Für deine Leser ist auch das Script hier: http://www.monkey-business.biz/282/debian-backup-mittels-paketlisten-mysql-dumps-ftp-upload/ interessant. Es erstellt Backups aller MySQL Datenbanken, ausgewählten Verzeichnissen, den Debian Paketlisten und läd diese per FTP auf einen Backup Space.