Ich habe mir ein bisschen Gedanken über Backups von meiner WordPressinstallation gemacht. Durch einen Artikel im WordPress Codex ist dann ein automatisiertes Backupscript herausgekommen, dass zeitgesteuert lokal und auf einen entfernten Rechner mittels SSH sicher sichert :)
Näheres ist unter „weiterlesen“ zu finden.
Benötigt wird natürlich ein Shellzugang auf dem man mysqldump ausführen und einen crontab anlegen darf. Der Datenbankserver muss nicht der lokale Host sein, es kann auch von einem entfernten Server ein Backup erstellt werden, sofern der Server dies zulässt. Der Einfachheit halber handelt es sich bei dem Ganzen nur um ein simples Bachscript.
Um das Script möglichst portabel zu halten, habe ich die Konfiguration über Variablen gelöst. Das Script beginnt also wie folgt:
#!/bin/sh # # Wordpress database backup - Copyright 2006 - felixtriller.de # CONFIG # # database settings DB_USER=USERNAME; DB_PASS=PASSWORD; DB_HOST=localhost; DB_DATA=DATABASE; DB_TABLES="wp_categories wp_comments wp_linkcategories wp_links wp_metar_cache wp_options wp_post2cat wp_postmeta wp_posts wp_usermeta wp_users"; # local storage LOCAL_PATH=/home/user/wp_backup/ # remote backup REMOTE_HOST=backup.example.com; REMOTE_PORT=22; REMOTE_PATH=/home/user/backups/wordpress/; # misc DATE=`date +%Y-%m-%d_%H-%M-%S`; FILENAME=backup-$DATE.sql.bz2;
Die DB_* sind die Zugangs– und Verbindungsdaten für den Datenbankserver, DB_TABLES ist eine Liste der zu sichernden Tabellen in der Datenbank. Ich habe hier die Standardtabellen einer herkömmlichen WordPressinstallation aufgelistet.
LOCAL_PATH ist der lokale Ordner für die Datenbanksicherungen, also auf dem System auf dem das Script ausgeführt wird. REMOTE_HOST und REMOTE_PORT hingegen sind die Parameter, die scp (aus dem SSH-Paket) benötigt um auf das entfernte System zu sichern. REMOTE_PATH ist der zu benutzende Ordner auf diesem System. Näheres zu scp verrät die manpage (man scp).
Der wesentliche Teil des Scriptes sieht wie folgt aus:
cd $LOCAL_PATH; mysqldump --add-drop-table --host=$DB_HOST --user=$DB_USER --password=$DB_PASS $DB_DATA $DB_TABLES | bzip2 -c > $FILENAME; scp -P $REMOTE_PORT $FILENAME $REMOTE_HOST:$REMOTE_PATH;
Zuerst wird mit cd in den lokalen Speicherordner ($LOCAL_PATH) gewechselt, dann wird mit mysqldump ein dump der entsprechenden Tabellen aus der angegeben Datenbank gestellt und dieser direkt mit bzip2 komprimiert und in der Form, die vorher als $FILENAME eingestellt wurde, gespeichert.
Die erstellte Datei wird dann mit scp auf den entfernten Rechner ($REMOTE_HOST) im Remoteordner gespeichert.
Damit das Script auch automatisiert ablaufen kann, muss scp ohne Passwordabfrage funktionieren. Dafür muss SSH noch für den Einsatz von Keys ohne Passwort eingestellt werden. Wie dies genau funktioniert, wird hier beschrieben.
Natürlich ist dies nicht zwingend nötig, wenn man nur beabsichtigt, das Backupscript jedes mal händisch auszuführen.
Um das Script zeitgesteuert auszuführen wird cron eingesetzt, dafür muss mit
crontab -eein neuer Crontab angelegt werden.
Für eine Backupdurchlauf täglich um 3 Uhr nachts, sieht der eintrag wie folgt aus:
0 3 * * * /home/user/wp_dbbackup.sh
Näheres zu crontabs ist der manpage (man crontab) oder auch Wikipedia zu entnehmen.
Um eine Datenbanksicherung wieder einzuspielen — existierende gleichnamige Tabellen werden überschrieben!! — ist folgender Befehl nötig:
bzcat backup-$DATUM.sql.bz2 | mysql -h $HOST -p -u $USER $DATENBANK
Das Script in zusammenhängender Form kann unter folgendem Link heruntergeladen werden:
Fröhliches Backuppen.
Sie befinden sich im persönlichen Blog von Felix Triller. Näheres zu seiner Person finden Sie im Menüpunkt 
















