• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

mySQL Backup via mysqldump und Shell

user_001

Newbie
Hallo,
Ich betreibe offline ein Webserver Apache mit Suse 10

Problemstellung: DB Backup vereinfachen mit Shellbefehle
Mit folgeden Befehl wird DB-Bakcup erzeugt:
Code:
mysqldump -hlocalhost -uroot -p**** --quick --opt --default-character-set=latin1 usr_web1_7 > test.sql

Ich möchte gerne den Befehl in einer Datei speichern und mit entsprechenden Aufruf soll die Datei ausgeführt werden. Ich muss dann nicht jedes mal den Code manuell eingeben.

1. wie soll die abgespeichert werden, damit meine ich die Endung z.B. .sh...etc?
2. soll an Code noch was geändert werden?
3. Mit welchen Befehl kann ich die Datei aufrufen?

ich weiss, dass es einfachere Lösung existieren einige von habe ich ausprobiert. Ich möchte nun nur diesen Weg kennen

Bedanke mcih für eure Antworten.
Gruss
Sebastian
 
Erste Zeile der shebang für deine Konsole (meist #!/bin/bash) und dann sämtliche Befehlsaufrufe mit vollen Pfaden (also /usr/bin/mysqldump statt nur mysqldump, das gleiche bei der Ausgabe-Datei). Dann die Datei unter einem beliebigen Namen speichern, ausführbar machen und irgendwo im Suchpfad von root ablegen (/usr/local/bin bietet sich an). Dann kannst Du nur mit dem Dateinamen den Befehl ausführen.
 
OP
U

user_001

Newbie
Momentan kann ich mit dem Befehl Backup erzeugen auch ohne absolute Pfadeingabe diese werden dann im Root-Verzeichnis abgelegt.
Ist es nun zwinggend, wenn es abgespeichert wird die pfadangabe genaustens sein?
Wie ich schon sagte ich möchte diesen Befehl in eine Datei abspeichern in Root-Verzeichnis ablegen und mit einem Befehl ausführen, wenn ich Backup erzeugen möchte.
Wie kann ich Datei ausführbar machen???
Chmod habe ich schon auf 777 gesetzt.
 
Wenn Du die Datei schon auf 777 gesetzt hast, dann ist sie ausführbar. Da aber das Verzeichnis nicht im Suchpfad von root sein wird, wirst Du den Befehl entweder über den vollen Pfad ausführen müßen oder in das Verzeichnis wechseln und dort ./NAME ausführen müßen.
 
OP
U

user_001

Newbie
Vielen Dank für die Antwort. Es hat wunderbar geklappt.
Nun eine weitere Frage



Wie könnt ich folgenden Script so anpassen, dass zu gegeben Zeitpunkt die Datei "backup" aufruft/ausführt?

Sagen wir mal es sollte täglich 12:00 und 20:00 automatisch ausgeführt wird?

Code:
if [[ -z "$1" ]]; then
        echo "Usage: $0 <timestamp>" >&2
        exit 1
elif [[ -z "$2" ]]; then
        date="$1"
else
        date="$1 $2"
fi
 
date_end=$(date --date="$date" +%s 2>/dev/null);
 
if [[ ! $? -eq 0 ]]; then
        echo "error: invalid date" 2>&1
        exit 1
fi
 
if [[ $date_end -le $(date +%s) ]]; then
        echo "error: end time is lower or eqal start time" >&2
        exit 1
fi
 
echo "i sleep until $(date --date="$date" "+%Y-%m-%d %H:%M:%S") ..."
 
while [[ $(date +%s) -le $date_end ]]; do
        sleep 1
done
 
exit 0

Ich danke für deine Hilfe
 
OP
U

user_001

Newbie
wie könnte ich dann Cornjob dazubringen diesen Befehl 2x täglich ausführen sollte?

Code:
mysqldump -hlocalhost -uroot -p**** --quick --opt --default-character-set=latin1 usr_web1_7 > test.sql
 
Indem Du ihn in ein Script packst (wie oben von mir erklärt) und dieses alle 12 Stunden ausführen läßt. Hierbei werden dann die absoluten Pfadangeben wichtig! da cron keine Umgebungsvariablen übernimmt!
 

framp

Moderator
Teammitglied
user_001 schrieb:
wie könnte ich dann Cornjob dazubringen diesen Befehl 2x täglich ausführen sollte?

Code:
mysqldump -hlocalhost -uroot -p**** --quick --opt --default-character-set=latin1 usr_web1_7 > test.sql

Sieh Dir mal den Inhalt von /etc/crontab and. Wenn Du dann noch
Code:
man 5 crontab
benutzt solltest Du es hinbekommen. ... ... ... Ich benutze in diesen Situationen immer google ... da bekommst Du sehr schnell Samples die sich sehr schnell an Deine Bedürfnisse anpassen lassen
 

anko

Newbie
Mancher weiss es vielleicht nicht, darum möchte ich anmerken, dass nach dem Befehl wie oben

mysqldump -hlocalhost -uroot -p**** --quick --opt --default-character-set=latin1 usr_web1_7 > test.sql

das Root-Passwort der DB in der History steht.
 

Jägerschlürfer

Moderator
Teammitglied
naja, das mit der History lässt sich ja leicht ändern,...

mit dem Befehl
Code:
echo $HISTSIZE
kann man sich anzeigen lassen, wie viele Einträge sich die History merkt.

Mit dem Befehl
Code:
export HISTSIZE=0
lässt sich die History so einstellen, dass diese sich nichts merkt. Mit diesem Befehl geht das natürlich nur kurzfristig, so lange man mit dieser Shell arbeitet. Will man das dauerhaft haben, muss man diesen Befehl in das Konfigurationsfile der Bash (~/.bashrc) schreiben. Dann ist die Einstellung dauerhaft.
Die Zahl 0 kann natürlich individuell angepasst werden.
 
Oben