mysql datenbanken per shell script sichern

hauke homburg h.homburg at w3-creative.de
Tue Apr 3 20:10:48 CEST 2007


Guten Abend,

Danke erstmal für Hilfe,

mein Script sieht nun folgendermasen aus:

mysql -u user -ppassword > db_test << eof
show DATABASE;

eof
declare db

db=`cat db_test | sed -e 's/Database//' | sed -e 's/mysql//' | sed 's/test//'`

for i in $db

do mysqldump -u user -ppassword --opt --databases $i >  "${i}_backup.sql"
done

Die Datenbanken habe ich per sed rausgefiltert, weil ich a) sonst 
Fehlermeldungen wegen der Database Datenbank bekomme und b) ich nur die Daten 
haben möchte ohne die Sytemuser etc.

grüße

Hauke

Am Sonntag, 25. März 2007 22:56 schrieb Jan-Benedict Glaw:
> On Sun, 2007-03-25 20:05:54 +0200, hauke homburg <h.homburg at w3-creative.de> 
wrote:
> > Datei. Diese lese ich dann in ein Array ein. Leider klappt der Zugriff
> > aus einer For Schleife auf da sarray nicht ganz.
> >
> > Die Schleife sieht folgendermassen aus:
> >
> > for Database in "$db";
>
> Zwei Fehler in einer Zeile :)  Erstmal ist das kein Array. $db ist nur
> eine Variable, die einzelne Worte als eine zusammenhängende
> Zeichenfolge, zufälligerweise mit Zeichen aus $IFS untereinander
> getrennt, enthält.
>
> Und da zu noch Anführungsstriche drumherum machst, wird $Database nur
> einmal befüllt.
>
> > do mysqldump -u user -ppassword $db > $db_backup.sql;
>
> Und hier solltest Du (Stichwort: longest match) dafür in jedem Fall
> Anführungsstriche setzen.
>
> > done;
>
> Außerdem hast Du noch überflüssig viele Semikolons in dem Text. In
> "kurz" kann man sagen, daß ein Zeilenumbruch ein Semikolon ersetzt.
>
> > Das Array enthällt dabei die Liste der Datenbanken.
> > wenn ich die Schleife auskommentiere und einfach ein echo "$db" mache
> > dann kommt Liste auch wieder als Liste angezeigt.
>
> So könnte das also aussehen:
>
> for Database in $db; do
> 	mysqldump -u user -ppassword "$Database" > "${Database}_backup.sql"
> done
>
> "$Database" wird elementweise befüllt (wobei "elementweise" bedeutet,
> daß in $db die einzelnen Wörter gemäß $IFS auseinandergeschnitten
> werden.)  "$db" enthält die mit Zeichen aus $IFS getrennten DB-Namen.
>
> Das versagt natürlich, wenn Du mal TABs, Leerzeichen oder
> Zeilenumbrüche in den DB-Namen haben solltest...
>
> MfG, JBG



More information about the Linux mailing list