Linux: *.sh, db, tar.gz, speichern, send ftp

hallo…

mir ist ein grosses mißgeschick passiert und ich bräuchte dringend hilfe von einem linux-pro…

voraussetzung:

  • gute linux-kenntnis (suse 11.1)
  • erfahrung mit *.sh datei-erstellung
  • teamspeak3 und headset zur kommunikation
  • teamviewer

mein problem:

ich habe aus versehen meine backup.sh gelöscht und brauche nun eine neue.
für die erstellung brauche ich demnach jemanden der mir dabei helfen kann.

zum einen muss die datenbank in eine .tar zusammengefasst werden und mit der aktuellen zeit benannt werden.
dann soll die .tar komprimiert werden in ein .gz dateiformat ( also *.tar.gz)
das gleiche soll dann ebenfalls mit dem jeweiligen subdomain-ordner geschehen.
anschliessend sollen *.tar.gz in einem ordner abgespeichert werden und per ftp an einen anderen server übertragen werden.

bin über jede hilfe dankbar

Hallo ATZENPOWERde,

ich habe aus versehen meine backup.sh gelöscht und brauche nun
eine neue.

Ist dein Shellskript nicht auch irgendwo bei den Backups?

für die erstellung brauche ich demnach jemanden der mir dabei
helfen kann.

Wird sich sicher jemand finden, aber was hindert dich, eines der gängigen Backup-Programme zu benutzen? Das was Du möchtest ist ja nichts außergewöhnliches, und eventuell entspricht eines deinen Ansprüchen:
http://wiki.ubuntuusers.de/Datensicherung?redirect=n…
Hätte zumindest den Vorteil, daß Du bei neuerlichem Verlust ganz schnell wieder das Original hast :wink:

Viele Grüße
Marvin

naja… 1. will ich nur bestimmten daten haben…

dann die daten einzeln gepackt und versendet … usw…

also so ganz easy ist es nicht…

aber hab schon etwas gebastelt was zumindest in einzelnen schritten teilweise funktioniert…

aber dafür gibt es einige probleme die ich nicht weiß zu beheben…

zb … datenbank wird gecheckt und der dump macht ansich auch was er soll…
die datei wird erzeugt aber nicht gefüllt… und ja… daten sind da…

oder was auch komisch ist… wenn ich zb den dateinamen mit datum haben möchte, setzt er das datum, aber statt *.sql.gz oder *.tar.gz verschwindet und statt dessen ist ein komma (,) da…
die dateien sind dann auch nicht nutzbar und wie gesagt leer bis max 150kb

und dann… ganz kurios… wenn ich meinen tar-befehl mache, so wie er sein soll… dann macht gibt er ne fehlermeldung raus… wenn ich am ende ein semikolon (:wink: setze, dann meckert er zwar über das unbekannte zeichen aber macht trotzdem seine arbeit…

usw…

bis zum ftp-versand brauch ich also noch ne weile gg…
und da stellen sich mir ja schon die nächsten fragen … aber dazu später…

bin wie gesagt via ts3 erreichbar…

die daten zu dem findet ihr auf www.world-hack.org auf der startseite

mein name dort ist atzenpower und ich bin oben im adminbereich aufzufinden…

Hallo AATZENPOWERde,
vielleicht meldet sich schneller jemand, wenn Du etwas konkreter wirst.
Von welcher Datenbank (mySQL, Postgresql, …) soll denn ein Backup gemacht werden? Und was heisst in Bezug auf Datenbanken

nur bestimmten daten

?

aber hab schon etwas gebastelt was zumindest in einzelnen
schritten teilweise funktioniert…

Dann zeig doch einfach mal. Kannst ja irgendwo im Netz ablegen, wenn es für hier schon zuviele Zeilen sind.

aber dafür gibt es einige probleme die ich nicht weiß zu
beheben…

Wäre gut, wenn Du diese Probleme etwas genauer als bisher beschreibst. Z.B.

der dump macht ansich auch
was er soll…
die datei wird erzeugt aber nicht gefüllt.

ist ja zumindest etwas widersprüchlich. Wenn der dump macht, was er soll, sollten ja auch Daten da sein :wink:
Das hier verstehe ich nicht so ganz:

wenn ich zb den dateinamen mit
datum haben möchte, setzt er das datum, aber statt *.sql.gz
oder *.tar.gz verschwindet und statt dessen ist ein komma (,)
da…

was verschwindet da, das Datum oder die Endung tar.gz? Und wo ist das unerwünschte Komma? Sieht der Dateiname statt

datenbank-2012-03-02.tar.gz

dann so aus?

datenbank-2012-03-02,

wenn ich meinen tar-befehl mache,
so wie er sein soll…

Da tar gefühlt 100 Optionen hat, wie soll er denn sein?

tar cfvz archive.tar.gz /verzeichnis/datei.sql

oder besser, wie ist er denn bei dir?

dann macht gibt er ne fehlermeldung

Standardfrage: welche genau?

usw…

usw. :wink:
Du siehst, die Angaben sind etwas unscharf und ergänzungsbedürftig.

Viele Grüße
Marvin

also…
backups ansich funktionieren mit folgenden zeilen…

mysqlcheck --auto-repair -uuser -ppw world-hack\_test   
mysqldump --opt -uuser -ppw db-name | gzip \> /srv/www/backup/world-hack\_test\_02\_03\_2012.sql.gz   
tar -czf /srv/www/backup/world-hack\_test\_02\_03\_2012.tar.gz /srv/www/subdomains/test/httpdocs  

nun soll aber zb das datum bei jedem backup automatisch gemacht werden…

also hab ich das ganze umgeschrieben… bzw erstmal den tar-teil zum testen.
die einzelnen ausgaben stimmen definitiv… aber an der stelle wo er es „zusammensetzen“ soll macht er scheinbar probleme…

DATUM=`date +%Y.%m.%d_%H%M`  
DATEITYP=tar.gz  
DATEINAME=world-hack\_test\_$DATUM  
DIR=test/httpdocs  
WWW=/srv/www/subdomains/$DIR  
DEST=/srv/www/backup/$DATEINAME.$DATEITYP  
RECHTE=-czf  
echo $DEST   
echo $WWW   
echo $DATEINAME   
echo $DATEITYP   
echo $RECHTE   
echo $DATEINAME.$DATEITYP  

[ausgabe]
sh /srv/www/backup/who_backup.sh
.tar.gzw/backup/world-hack_test_2012.03.03_1357

hier mal was die backup.sh machen soll… hoffe auf verständliche art…

beispielerklärung zur dateistruktur

pfad wo die subdomainordner liegen ist: /www/subdomain
in dem ordner gibt es dann zb die ordner „s1“, „s2“, „s3“ usw, wobei jeder ordner eine subdomain darstellt.
subdomainordner1 wäre dann zb „/www/subdomain/s1“
subdomainordner2 wäre dann zb „/www/subdomain/s2“
usw
„subdomainname1“ soll dann also „s1“ sein usw
die komprimierte datei soll dann zb s1_DATUM.tar.gz heissen

mit der datenbank verhält es sich ähnlich
zugriff, auto-repair, dump und komprimieren von datenbank1 welche den namen „datenbankname_1“ hat
WICHTIG!!! jede datenbank hat unterschiedliche user und passwörter und nicht alle datenbanken haben den gleichen prefix
„datenbankdatenname1“=„datenbankname_1“
die komprimierte datei soll dann zb datenbankdatenname1_DATUM.sql.gz heissen

der ftp ist bei allen gleich

was soll die backup.sh machen?..

datenbankdaten1 als *.sql.gz packen und komprimieren und den dateiname folgend benennen " datenbankname1_DATUM.sql.gz "
subdomainordner1 als *.tar.gz packen und komprimieren und den dateiname folgend benennen " subdomainordnername1_DATUM.tar.gz "
ordner in pfad xyz erstellen mit name „backup_subdomainordner1_DATUM“
„datenbankdatenname1_DATUM.sql.gz“ und „subdomainordnername1_DATUM.tar.gz“ in ordner „backup_subdomainordnername1_DATUM“ verschieben
den ordner „backup_subdomainordner1_DATUM“ via FTP an server „beispielserver“ versenden.

datenbankdaten2 als *.sql.gz packen und komprimieren und den dateiname folgend benennen " datenbankdatenname2_DATUM.sql.gz "
subdomainordner2 als *.tar.gz komprimieren und den dateiname folgend benennen " subdomainordnername2_DATUM.tar.gz "
ordner in pfad „beispielpfad“ erstellen mit name „backup_subdomainordner2_DATUM“
„datenbankdatenname2_DATUM.sql.gz“ und „subdomainordnername2_DATUM.tar.gz“ in ordner „backup_subdomainordnername2_DATUM“ verschieben
den ordner „backup_subdomainordner2_DATUM“ via FTP an server „beispielserver“ versenden.

usw

Hallo ATZENPOWERde,
bist Du sicher, daß Du deinen Code 1:1 hier übertragen hast? Dein Skript gibt bei mir nämlich genau das aus, was es soll:

/srv/www/backup/world-hack\_test\_2012.03.03\_1604.tar.gz
/srv/www/subdomains/test/httpdocs
world-hack\_test\_2012.03.03\_1604
tar.gz
-czf
world-hack\_test\_2012.03.03\_1604.tar.gz

warum gibt er mir nicht den richtigen datensatz aus?..

Gute Frage. Außer einem für mich etwas unorthodoxen Stil kann ich keine Fehler sehen. Und es läuft ja auch bei mir.
Ich hätte nur ein paar unverbindliche Empfehlungen:
rufe das Skript mal nicht über sh auf, sondern direkt über eine SheBang-Zeile am Anfang:

#!/bin/bash -ue

oder überzeuge dich wenigstens sicherheitshalber, was sh aufruft. sh ist normalerweise nur ein Link auf die jeweilige Standard-Shell. Bei mir wäre das z.B. nicht die bash , sondern die dash.
Gut, das macht bei deinen Zeilen wahrscheinlich keinen Unterschied, aber ich finde es gerade beim Testen besser, wenn man genau weiss, in welcher Umgebung man sich bewegt.
Dann bevorzuge ich es, für Variablen Anführungszeichen zu benutzen, also statt

DATEITYP=tar.gz

lieber

DATEITYP="tar.gz"

ist zwar hier auch nicht unbedingt notwendig, aber wenn Leerzeichen und Sonderzeichen ins Spiel kommen hilft es ganz ungemein, wenn man sowas schon gewohnheitsmäßig macht.
Dem entspricht dann auch das „Klammern“ der Varablennamen, also sowas:

echo "${DATEINAME}.${DATEITYP}"

Ok, ist sicher umständlich und vielleicht auch ne Macke von mir, aber bei der Fehlersuche hilfreich, ganz besonders wenn, wie bei Dir, der Teufel irgendwo unsichtbar im Detail steckt :wink:
Noch mehr solche Tipps:
http://www.davidpashley.com/articles/writing-robust-…
So direkt hilft dir das nun leider nicht weiter, aber zumindest in dem geposteten Code kann ich keinen Fehler entdecken, außer daß ich so nicht unbedingt schreiben würde.
Vielleicht kommt ja jemand anders auf den Trichter.

Viele Grüße
Marvin

PS. Hier hilft und leider nicht, sondern nur die oben angeführten, in deinem Fall also

 und 

Hallo ATZENPOWERde,
da ich immer noch der Meinung bin, daß man das Rad nicht unbedingt neu erfinden muss, habe ich mal ein Skript rausgesucht, daß deinen Vorstellungen für den DB-Backup sehr nahe kommt, automysqlbackup
http://sourceforge.net/projects/automysqlbackup/
http://www.debianhelp.co.uk/mysqlscript.htm
Es sichert beliebig viele DB, komprimiert die Backups und versieht die Backups mit einem Zeitstempel, um nur die wichtigsten Funktionen zu nennen. So wird die Sicherung, die ich gestern mal zur Probe von einer DB gemacht habe, myDB_2012-03-04_11h02m.Sunday.sql.gz genannt. Dadurch hat man dann die Möglichkeit, verschiedene Versionen der Datenbanken aufzubewahren. Das ganze geschieht entweder vollautomatisch per Cronjob, kann aber auch per Hand oder in ein anderes Skript eingebunden, ausgelöst werden.
Da es sich um ein bash-skript handelt, kannst Du es zur Not noch anpassen, oder wenigstens als Steinbruch oder Anregung für dein eigenes Skript benutzen.
Meiner Meinung nach ist es einen Blick wert.

Viele Grüße
Marvin

ich will das rad nicht neu erfinden… sondern nur eine felge nach meinen vorstellungen design… gg

aber ich guck es mir mal an… thx