[SIZE="4"]Automatisches Backup von MySQL-Datenbanken[/SIZE]
Getestet/Ausgeführt unter: Ubuntu 8.04 LTS Server
MySQL System: LAMPP (Stable)
Inhalt:
- Vorwort / Anmerkungen
- Erstellen eines MySQL Backups
- Transferieren eines Backups zu FTP
- Einrichten der Automatisierung
Vorwort:
Dieses Tutorial wurde von mir selbst geschrieben.
Ich habe keinerlei Quellen benutzt, da ich die Befehle
durch meinen Beruf größtenteils selbst kenne und
weiss wie sie sich handlen lassen.
Ich sehe leider immer wieder P-Server Projekte,
denen der Erfolg durch irgendwelche Serverabstürze
zu Nichte gemacht wird, weil sie kein Backup jeglicher
Dateien gemacht haben. Mit dieser Variante des MySQL
Backups kann man zumindest alle wichtigen Dateien
die sich auf den Datenbanken befinden sichern.
Als Konvention für die Codes gilt lediglich,
dass Zeilen, die mit einem # beginnen Kommentare sind
Erstellen eines MySQL Backups:
Da wir zunächst einmal die Datei benötigen,
die sich später dann wieder aufspielen lässt,
müssen wir erst aus der Datenbank eine .sql
Datei erstellen.
In der Linux Konsole können wir das mit Hilfe
eines einfachen Befehls vollziehen.
Da wir diese Abläufe allerdings später automatisieren
wollen, müssen wir diese zunächst in eine Scriptdatei speichern:
Erstellen eines Scriptverzeichnisses
unter /root: (Man muss als Root eingeloggt sein)
# Wechsel in das Root-Verzeichnis /root
cd
# Erstellen eines Script Verzeichnisses
mkdir scripte
# Erstellen eines Verzeichnisses wo die Backups landen
mkdir mysqlb
# Erstellen der Scriptdatei:
# Wechsel in das Script Verzeichnis
cd scripte
# Erstellen der Scriptdatei mysqlb.sh
touch mysqlb.sh
# Berechtigungen zum Ausführen und Bearbeiten setzen
chmod 755 mysqlb.sh
Falls ihr noch keinen Editor haben solltet,
empfehle ich "Nano".
Dieser kann über apt-get/yum/rpm install nano
automatisiert installiert werden und ist damit einsatzbereit.
Kommen wir also zur Bearbeitung der Scriptdatei
Nun sollte sich Nano öffnen.
Sein Äusseres erinnert ein wenig an die DOS-Variante
eines Texteditors, er ist jedoch wie ein notepad
relativ einfach zu bedienen.
In die leere Textdatei die sich nun geöffnet hat,
gehört folgendes rein:
# /root/scripte/mysqlb.sh
# MySQL Backup Script by Tsakuya
# Erstellungsdatum: 12.07.2009
# Modifikationsdatum: 12.07.2009 14:06
# Modifikation: Erstellung des Scripts
# Erstellen des Backups in eine .sql Datei
# Syntax: mysqldump --allow-keywords --opt -u $User -p $Passwort
# $DatenbankName > $AusgabeDatei
# Erstellen des MySQL Dumpfiles in /root/mysqlb
mysqldump --allow-keywords --opt -u root -p hallowelt meinepserverdb > /root/mysqlb/`date +%d%m%y-%H%M`.sql
Alles anzeigen
Damit wäre für's erste das Script zur erstellung eines MySQL Dumps
fertig und bereit zur Benutzung.
Anmerkung: Die Dateien die dort ausgegeben werden haben in diesem
Fall zur Eindeutigen Unterscheidung die Konvention "TagMonatJahr-StundeMinute.sql"
Transferieren auf einen FTP-Server
Um Dateien über die Linux Shell auf einen FTP-Server
zu übertragen und dies zu automatisieren,
hängen wir an unser Script, welches wir vorher erstellt
haben noch etwas an:
# Modifikationsdatum: 14:40
# Modifikation: FTP-Übertragung einrichten
# Starten des FTP Programms
ftp -n <<EOF
# Öffnen eines Servers
# und übertragen der Userdaten
open mein.ftp.server
user mein_user
password mein_passwort
# Wechseln in ein FTP Verzeichnis eurer Wahl
cd /backups/mysqlbackups/pserverdb
# Hochladen der Datei
put /root/mysqlb/`date +%d%m%y-%H%M`.sql
# Beenden der FTP-Verbindung
quit
EOF
Alles anzeigen
Damit wäre dieser Vorgang bereits abgeschlossen
und wir haben die Datei gleich als .sql auf unserem FTP
(In diesem Falle im Verzeichnis /backups/mysqlbackups/pserverdb)
Automatisierung:
Für Automatisierungen unter Linux ist natürlich die CRONtab
prädestiniert, da sie einfach zu bearbeiten ist.
Aufgerufen werden kann die Crontab mit dem Befehl:
# Auflisten der Aktuellen Crontab
crontab -l
# Auflisten aller Cronjobs eines bestimmten Users
crontab -l -u root
# Editieren der Crontab
crontab -e
Ein Eintrag in der Crontab könnte zB. so aussehen:
# Jeden Tag um 22.00 h alles im Verzeichnis /public
# incl. Unterverzeichnisse löschen:
0 22 * * * root rm -r /public/*
Die Bedeutungen dieser Zahlen und Parameter von links nach rechts:
Minute; Stunde; Tag; Monat; Tag einer Woche (1-7); User; Befehl
Da wir nun also das Script beispielsweise alle 60 Minuten ausführen wollen,
würde unser Cron eintrag wie folgt aussehen:
Fertig. Zur Kontrolle solltet ihr dann nochmal crontab -l
aufrufen um sicherzugehen, dass euer Eintrag dort drin ist
und schon habt ihr eine automatisierte Backup Lösung für
eure MySQL Datenbanken unter Linux.
Ich hoffe ich konnte euch helfen
und wünsche noch ein schönes verbleibendes Restwochenende.
Mfg,
Tsakuya