Hallo,
da bei vielen Anwendungen nicht nur Dateien sondern auch Datenbanken wichtig sind, ist es auch enorm wichtig diese mitzusichern. Eine einfache Möglichkeit um MySQL Datenbanken in der Shell zu sichern ist es, einen MySQL Dump anzulegen. Das geht schnell und einfach – mit diesem Tool kann man einzelne Datenbanken und ganze Server sichern und wiederherstellen.
Das per Hand zu machen wäre eine Heidenarbeit, ein Cronjob ist deshalb eine enorme Entlastung.
Gerne hat man aber mehrere Datenbanksicherungen zur Verfügung, falls ein Fehler in dem Dump vorliegt und dieser irreperabel ist. Es ist also intelligent mehrere Dumps hochzuladen und sie nach dem aktuellen Datum + evtl. dem DB-Namen. Für das Datum gibt es in der Shell ‚date‘. Mit date kann das Datum in verschiedenen Formaten ausgegeben und bspw. in einer Variable abgespeichert werden. Um das dann schließlich auf einen FTP-Server hochzuladen, benötigen wir zum Autoeinloggen einen Eintrag in der ~/.netrc. Dann können wir einfach mit wput den Dump hochladen. Auf meinem Ubuntu System ist wput standardmäßig nicht installiert, wir können es aber ganz einfach mit ’sudo apt-get install wput‘ nachinstallieren.
Um uns das ganze zu vereinfachen und nicht jedes Mal die ganzen Befehle einzugeben, erstellen wir ein einfaches Shell-Script.
Da wir per wput im Script hochladen und während des Vorgangs nichts eingeben können, immerhin ist es automatisiert, benötigen wir die erwähnte ~/.netrc. In ihre konfigurieren wir die Login Dateien.
~ steht immer für das Homeverzeichnis des angemeldeten Users. In meinem Fall ist das /home/dominic/. Heißt also die File ist in Wirklichkeit /home/dominic/.netrc
Im Normalfall ist diese leer. Hier schreiben wir den Host-, Loginnamen und das Passwort rein:
machine: ftp.domain.com
login: LOGIN
password: PASSWORD
Die richtigen Rechte sind 600. Die setzen wir mit “ chmod 600 ~/.netrc“.
Danach ist es uns möglich, ohne Password oder Login auf dem FTP Server, hier ftp.domain.com, einzuloggen.
Da wäre nur noch das eigentliche Script. Hier ist es einfach mal schnell runtergeschrieben, die Erklärung erübrigt sich dank der Kommentare.
Vorweg: Bei mysqldump ist es enorm wichtig, dass Passwort direkt und ohne Leerzeichen hinter -p zu schreiben, sonst kommt ein Syntax Error.
#!/bin/sh
#MySQL-Dump Backupscript#Schreiben des aktuellen Datums im Format DD.MM.YYYY in eine Variable
today=$(date +%d.%m.%Y)#Erstellen eines MySQL Dump einer einzelnen Datenbank
mysqldump –database DBNAME -u USER -pPASSWORD#Falls nicht vorhanden wird wput installiert
apt-get install wput#Hochladen des Dumps
wput $today ftp://ftp.domain.com
Zum Schluß kommt noch der Cronjob.
Dazu editieren wir die Crontabelle mit „crontab -e“
55 23 * * * sh /PFAD/ZUM/SCRIPT.sh
Wenn ihr alles richtig gemacht habt, dann startet jeden Tag um 23:55 Uhr ein Cronjob, der einen MySQL-Dump der von euch ausgewählten Datenbank macht.
Fehler oder Anmerkungen bitte in die Kommentare schreiben!
Nachtrag:
Wenn ihr euren Dump nicht nur nach dem aktuellen Datum benennen wollt, sondern z.B. auch nach der Datenbank, so könnt ihr den Namen einfach an „date +%d.%m.%Y“ hängen. Beispiel: „date +%d.%m.%Y-bthost.sql“ gibt 12.08.2010-bthost.sql aus. Außerdem könnt ihr die Darstellung des Datums auch variieren, schaut dazu am besten in die Man-Page von date.