Datenbank Backup

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 Bashscript.

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 -e

ein 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.

Achtung: Das Script ist in erster Linie für meine Zwecke entwickelt worden, es funktioniert für mich wunderbar und erfüllt seinen Zweck. Sollten beim Einsatz des Scriptes Daten verloren gehen, oder sonst irgendein Schaden auftreten, ist das nicht meine Schuld. Alles hier beschriebene ist ohne Garantie, Fehler könnten enthalten sein. Solltest du nicht verstanden haben, was dieses Script macht, oder dir sonst irgendetwas unklar sein, kopiere es nicht blind. Vielleicht ist eine andere Backuplösung besser für dich.

One thought on “Datenbank Backup”

Comments are closed.