Datenbank Backup | 23/11/2006

Ich habe mir ein biss­chen Gedan­ken über Back­ups von mei­ner Word­Press­in­stal­la­tion gemacht. Durch einen Arti­kel im Word­Press Codex ist dann ein auto­ma­ti­sier­tes Back­up­script her­aus­ge­kom­men, dass zeit­ge­steu­ert lokal und auf einen ent­fern­ten Rech­ner mit­tels SSH sicher sichert :)
Nähe­res ist unter „wei­ter­le­sen“ zu finden.

Benö­tigt wird natür­lich ein Shell­zu­gang auf dem man mys­qldump aus­füh­ren und einen crontab anle­gen darf. Der Daten­bank­ser­ver muss nicht der lokale Host sein, es kann auch von einem ent­fern­ten Ser­ver ein Backup erstellt wer­den, sofern der Ser­ver dies zulässt. Der Ein­fach­heit hal­ber han­delt es sich bei dem Gan­zen nur um ein sim­ples Bachscript.

Um das Script mög­lichst por­ta­bel zu hal­ten, habe ich die Kon­fi­gu­ra­tion über Varia­blen 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 Ver­bin­dungs­da­ten für den Daten­bank­ser­ver, DB_TABLES ist eine Liste der zu sichern­den Tabel­len in der Daten­bank. Ich habe hier die Stan­dard­ta­bel­len einer her­kömm­li­chen Word­Press­in­stal­la­tion aufgelistet.

LOCAL_PATH ist der lokale Ord­ner für die Daten­bank­si­che­run­gen, also auf dem Sys­tem auf dem das Script aus­ge­führt wird. REMOTE_HOST und REMOTE_PORT hin­ge­gen sind die Para­me­ter, die scp (aus dem SSH-Paket) benö­tigt um auf das ent­fernte Sys­tem zu sichern. REMOTE_PATH ist der zu benut­zende Ord­ner auf die­sem Sys­tem. Nähe­res zu scp ver­rät die man­page (man scp).

Der wesent­li­che Teil des Scrip­tes 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 loka­len Spei­cher­ord­ner ($LOCAL_PATH) gewech­selt, dann wird mit mys­qldump ein dump der ent­spre­chen­den Tabel­len aus der ange­ge­ben Daten­bank gestellt und die­ser direkt mit bzip2 kom­pri­miert und in der Form, die vor­her als $FILENAME ein­ge­stellt wurde, gespeichert.

Die erstellte Datei wird dann mit scp auf den ent­fern­ten Rech­ner ($REMOTE_HOST) im Remo­te­ord­ner gespeichert.

Damit das Script auch auto­ma­ti­siert ablau­fen kann, muss scp ohne Pass­word­ab­frage funk­tio­nie­ren. Dafür muss SSH noch für den Ein­satz von Keys ohne Pass­wort ein­ge­stellt wer­den. Wie dies genau funk­tio­niert, wird hier beschrie­ben.
Natür­lich ist dies nicht zwin­gend nötig, wenn man nur beab­sich­tigt, das Back­up­script jedes mal hän­disch auszuführen.

Um das Script zeit­ge­steu­ert aus­zu­füh­ren wird cron ein­ge­setzt, dafür muss mit

crontab -e

ein neuer Crontab ange­legt werden.

Für eine Back­up­durch­lauf täg­lich um 3 Uhr nachts, sieht der ein­trag wie folgt aus:

 0 3 * * * /home/user/wp_dbbackup.sh

Nähe­res zu cront­abs ist der man­page (man crontab) oder auch Wiki­pe­dia zu entnehmen.

Um eine Daten­bank­si­che­rung wie­der ein­zu­spie­len — exis­tie­rende gleich­na­mige Tabel­len wer­den über­schrie­ben!! — ist fol­gen­der Befehl nötig:

bzcat backup-$DATUM.sql.bz2  | mysql -h $HOST -p -u $USER $DATENBANK

Das Script in zusam­men­hän­gen­der Form kann unter fol­gen­dem Link her­un­ter­ge­la­den werden:

Fröh­li­ches Backuppen.

Ach­tung: Das Script ist in ers­ter Linie für meine Zwe­cke ent­wi­ckelt wor­den, es funk­tio­niert für mich wun­der­bar und erfüllt sei­nen Zweck. Soll­ten beim Ein­satz des Scrip­tes Daten ver­lo­ren gehen, oder sonst irgend­ein Scha­den auf­tre­ten, ist das nicht meine Schuld. Alles hier beschrie­bene ist ohne Garan­tie, Feh­ler könn­ten ent­hal­ten sein. Soll­test du nicht ver­stan­den haben, was die­ses Script macht, oder dir sonst irgend­et­was unklar sein, kopiere es nicht blind. Viel­leicht ist eine andere Back­u­p­lö­sung bes­ser für dich.

Book­mark:

  • email
  • Twitter
  • StumbleUpon
  • Identi.ca
  • Facebook
  • MySpace
  • LinkedIn
  • FriendFeed
  • Digg
  • Yigg
  • Reddit
  • del.icio.us
  • Mixx
  • Google Bookmarks
  • Live
  • MisterWong
  • blogmarks
  • Tumblr
  • Posterous
  • Netvibes
  • Ping.fm

Tags, RSS-Feed & Trackback:

Tags: , , , | Der Artikel wurde am 23. November 2006 gegen 22:29 Uhr von Felix Triller verfasst und unter „Linux und Open Source, Tipps und Tricks“ abgelegt. Sie können gerne einen Kommentar schreiben. Für einen Trackback benutzen Sie bitte diesen Link. Wenn Ihnen gefällt, was Sie hier lesen, abonnieren Sie doch meinen RSS-Feed.
 

Ein Kommentar

Einen Kommentar schreiben

Mit (*) markierte Felder sind Pflichtfelder.

Durch das Abschicken eines Kommentares stimmen Sie zu, das der von Ihnen verwendete Name, Ihre E-Mail-Adresse, Ihre URL und Ihre derzeitige IP-Adresse zusammen mit dem Kommentar gespeichert werden. Keine dieser Daten werde ich veröffentlichen oder weitergeben. Weitere Informationen.

Erlaubte Tags:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">

© (cc) 2005-2010 Felix Triller. Impressum. Made on a Mac, hand-coding XHTML & CSS. Powered by WordPress and all-inkl.com.