Datenbank Sicherung

Gandalf2

Newbee in Sachen BSD
Hallo zusammen,

mal ne dumme frage. Ich hab hier nen paar Datenbanken am rennen, von dehnen ich gerne jede nacht eine sicherung machen möchte. Dazu hab ich folgendes Scripte geschrieben.

Code:
#!/bin/sh
tar -cvf /home/marco/dbsicher/db$$.tar /var/db/mysql/ 2>&1 | tee /tmp/db.txt

if [ -e "/tmp/db.txt" ]
then

 /usr/local/bin/rar a /tmp/db.rar /tmp/db.txt
 rm /tmp/db.txt
 uuencode /tmp/db.rar /tmp/db.uue | mail -s "Sicherung Datenbank" marco@domaine

 rm /tmp/db.rar
 rm /tmp/db.uue
fi
exit 0

Folgendes soll es machen
im Verz. /home/marco/dbsicher eine Datei mit tar erstellen die mit dem aktuellen Datum gekennzeichnet wird. Dazu sollte eigentlich das $$ sein. Klappt aber nicht.
Dann soll er die Ausgabe mit tee umleiten in eine Datei namens db.txt. Klappt
Dann wenn db.txt existiert soll er die packen mit Rar. Klappt
Dann soll die db.txt gelöscht werden.Klappt
Die db.rar wiederum soll dann mit uuencode gewandelt werden und dann per mail an mich geschickt werden. Klappt
Dann sollen die überflüssigen Dateien db.rar und db.uue gelöscht werden.

Die Datei die geschickt werden soll ist nur für mich zur Sicherheit, ob es auch klappt hat.
Problem ist das ich
A) kein Datum an der Datei bekomme und
B) der rm befehl bei
Code:
rm: /tmp/db.uue: No such file or directory
nicht klappt.

Irgendwo hab ich nen problem. Kann mir einer sagen wo? Evtl. auch welcher parameter hinnein muss, damit die datei das aktuelle Datum bekommt.
 
$$ sollte mit der PID der Shell ersetzt werden. Das Datum musst du irgendwie anders generieren. Zum Beispiel mit date.
 
Hallo

Bei mir läuft auch ein MySQL Backup Script jede Nacht.

Wie Kamikaze schon sagte, mit date geht's.

Die relevanten Teile sehen dann bei mir z.B. so aus:

Code:
DATE=`date +\%Y-\%m-\%d`
/data/backup/mysql/${DATE}/`date +\%s`_${i}.sql


Eine Sache aber, ich bin mir nicht ganz sicher, aber sollte man für ein Datenbankbackup nicht mysqldump oder ähnliches nehmen, weil der mysqld solange er läuft noch Daten für die Datenbank im Speicher haben könnte und noch nicht auf die Festplatte geschrieben haben könnte?
Sprich: einfach die Dateien kopieren geht meine ich nicht ohne weiteres...
 
Nur so in die Runde geschmissen... Ich halte es fuer sinnvoller, die Datenbank mit mylsqdump zu sichern, da meistens Textfiles mit SQL Befehlen erzeugt werden und zum anderen alle notwendig Befehle mit enthalten sind, um die DB wieder herzustellen.

In den meisten Faellen laesst sich so ein Dump einfacher zurueckspielen, als wenn man nur die Datenfiles sichert.

Just my 2 cent. ;)
 
ää wie binde ich denn
das

Code:
DATE=`date +\%Y-\%m-\%d`
/data/backup/mysql/${DATE}/`date +\%s`_${i}.sql

in das ein

Code:
#!/bin/sh
tar -cvf /home/marco/dbsicher/db$$.tar /var/db/mysql/ 2>&1 | tee /tmp/db.txt
if [ -e "/tmp/db.txt" ]
then
 /usr/local/bin/rar a /tmp/db.rar /tmp/db.txt
 rm /tmp/db.txt
 uuencode /tmp/db.rar /tmp/db.uue | mail -s "Sicherung Datenbank" marco@domaine
 rm /tmp/db.rar
 rm /tmp/db.uue
fi
exit 0

oder hast du ein anderes script am laufen
 
Ja, ich hab ein anderes Script, das waren nur die Schnipsel wo was mit dem Datum vorkommt.
Mein Script holt per SSH vom Server für jede DB per mysqldump eine eigene Datei.

Kann ich dir bei Interesse gerne schicken (müsste ich nur vorher die Passwörter rausnehmen...)
 
Code:
#!/bin/sh
tar -cvf /home/marco/dbsicher/db$$.tar /var/db/mysql/ 2>&1 | tee /tmp/db.txt

if [ -e "/tmp/db.txt" ]
then

 /usr/local/bin/rar a /tmp/db.rar /tmp/db.txt
 rm /tmp/db.txt
 uuencode /tmp/db.rar /tmp/db.uue | mail -s "Sicherung Datenbank" marco@domaine

 rm /tmp/db.rar
 rm /tmp/db.uue
fi
exit 0
warum denn so umstaendlich...

Code:
#!/bin/sh
tar -cvf /home/marco/dbsicher/db$$.tar /var/db/mysql/ 2>&1 | mail -s "Sicherung Datenbank"
oder wenn's doch gepackt (und dann per uuencode wieder aufgeblasen) werden soll:
Code:
#!/bin/sh
tar -cvf /home/marco/dbsicher/db$$.tar /var/db/mysql/ 2>&1 | bzip2 -9c | uuencode db.txt.bz2.uue | mail -s "Sicherung Datenbank"

Folgendes soll es machen
im Verz. /home/marco/dbsicher eine Datei mit tar erstellen die mit dem aktuellen Datum gekennzeichnet wird. Dazu sollte eigentlich das $$ sein. Klappt aber nicht.
da, wo das datum hinsoll, folgendes einsetzen: $(date +%F) soll das datum an mehreren stellen verwendet werden, vorher am besten in eine variable packen und die dann verwenden, um unterschiedliche daten durch evtl. laufzeiten zu vermeiden.

B) der rm befehl bei
Code:
rm: /tmp/db.uue: No such file or directory
nicht klappt.
uuencode man page lesen. der zweite parameter ist nur ein name, der in das ergebnis geschrieben wird, damit uudecode weiss, welchen filenamen es anlegen soll.

edit: aendert natuerlich alles nichts an der tatsache, dass man sql besser auf der ebene sichert, wo es auch benutzt wird, anstelle der datenbank unterm hintern die (in dem moment potentiell inkonsistenten) dateien wegzusichern.
 
Ja danke für das scripting :-)
Das mit dem uuencode ist ja nur gewesen, weil mir der Mail befehl keine Binär Datei verschickt, und ich nicht jedes mal mich auf den Server connecten wollte,um zu sehen ob die Sicherung gelaufen ist.
Und damit Sie nicht so gross werden werden sie eben vorher gepackt

Hab mich mal schlau gemacht auf der Seite von mormorkuchen.
Werde wohl auf mysqldump umsteigen.
Das mit Mysqldump kannte ich nicht. (Man lernt immer mehr dazu)

Mein Anliegen ist es die Datenbank jede nacht zu sichern in insgesamt ein Datei. Diese wiederum soll 3 mal vorliegen.
also 1.tgz , 2.tgz, 3.tgz
Script soll laufen und aus 2 3 machen aus 1 2 und die neue wird eben 1.
So hab ich immer drei verschiedene versionen zum zurück kopieren
Deshlab hatte ich es mit dem Datum probiert, bzw. versucht.

Villeicht hat ja schon einer so ein Script. Ich denke mir auch das jeder der einen MySql server am laufen hat über so eine Sicherung froh wäre.
 
das gibts als fertiges perl-skript, jedenfalls für mysql. tut hier seinen job und das sehr gut :)

$SUCHMASCHINE, sollte es dir finden

hth,
marc
 
Zurück
Oben