BackupScript für MySQL Datenbank

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
knecht
Beiträge: 1214
Registriert: 08.01.2004 15:33:44
Wohnort: Berlin
Kontaktdaten:

BackupScript für MySQL Datenbank

Beitrag von knecht » 02.02.2005 12:17:02

Ich hab mir folgendes Script geschrieben, das alle Stunden ausgeführt wird.

Code: Alles auswählen

#!/bin/sh
name=$(date +%m-%d-%Y_%R)_forumDB.sql
pfad=/shared/temp/forum-mysql
#
#alte Dateien bis auf 20 l�chen
#
list=$(ls -lt $pfad | tail -n +20 | cut -d" " -f17)
for i in $list; do
rm $pfad/$i
done

mysqldump -u knecht --password=geheim -B forum2 > $pfad/$name
rm $pfad/forumDB.sql
ln -s $pfad/$name $pfad/forumDB.sql
Damit sollten im Ordner /shared/temp/forum-mysql immer 20 Sicherungsdateien meiner Datenbank forum2 vorhanden sein, und jeweils die neueste soll über den Link forumDB.sql erreichbar sein.

Aber in der Praxis sieht das so aus: (crontab als root, alle Stunden)

Code: Alles auswählen

himself:~# ls -l /shared/temp/forum-mysql/
total 13877
-rw-r--r--  1 root root 7076743 Feb  1 05:59 02-01-2005_05:59_forumDB.sql
-rw-r--r--  1 root root       0 Feb  1 20:00 02-01-2005_19:00_forumDB.sql
-rw-r--r--  1 root root       0 Feb  1 21:00 02-01-2005_20:00_forumDB.sql
-rw-r--r--  1 root root       0 Feb  1 22:00 02-01-2005_21:00_forumDB.sql
-rw-r--r--  1 root root       0 Feb  1 23:00 02-01-2005_22:00_forumDB.sql
-rw-r--r--  1 root root       0 Feb  2 00:00 02-01-2005_23:00_forumDB.sql
-rw-r--r--  1 root root       0 Feb  2 01:00 02-02-2005_00:00_forumDB.sql
-rw-r--r--  1 root root       0 Feb  2 02:00 02-02-2005_01:00_forumDB.sql
-rw-r--r--  1 root root       0 Feb  2 03:00 02-02-2005_02:00_forumDB.sql
-rw-r--r--  1 root root       0 Feb  2 04:00 02-02-2005_03:00_forumDB.sql
-rw-r--r--  1 root root       0 Feb  2 05:00 02-02-2005_04:00_forumDB.sql
-rw-r--r--  1 root root       0 Feb  2 06:00 02-02-2005_05:00_forumDB.sql
-rw-r--r--  1 root root       0 Feb  2 07:00 02-02-2005_06:00_forumDB.sql
-rw-r--r--  1 root root       0 Feb  2 08:00 02-02-2005_07:00_forumDB.sql
-rw-r--r--  1 root root       0 Feb  2 09:00 02-02-2005_08:00_forumDB.sql
-rw-r--r--  1 root root       0 Feb  2 10:00 02-02-2005_09:00_forumDB.sql
-rw-r--r--  1 root root       0 Feb  2 11:00 02-02-2005_10:00_forumDB.sql
-rw-r--r--  1 root root       0 Feb  2 12:00 02-02-2005_11:00_forumDB.sql
-rw-r--r--  1 root root 7130823 Feb  2 12:00 02-02-2005_12:00_forumDB.sql
lrwxrwxrwx  1 root root      53 Feb  2 12:00 forumDB.sql -> /shared/temp/forum-mysql/02-02-2005_12:00_forumDB.sql
Wenn ich das Script von Hand ausführe geht es:

Code: Alles auswählen

himself:~# ./db_sichern.sh 
himself:~# ls -l /shared/temp/forum-mysql/
total 20841
-rw-r--r--  1 root root 7076743 Feb  1 05:59 02-01-2005_05:59_forumDB.sql
-rw-r--r--  1 root root       0 Feb  1 21:00 02-01-2005_20:00_forumDB.sql
-rw-r--r--  1 root root       0 Feb  1 22:00 02-01-2005_21:00_forumDB.sql
-rw-r--r--  1 root root       0 Feb  1 23:00 02-01-2005_22:00_forumDB.sql
-rw-r--r--  1 root root       0 Feb  2 00:00 02-01-2005_23:00_forumDB.sql
-rw-r--r--  1 root root       0 Feb  2 01:00 02-02-2005_00:00_forumDB.sql
-rw-r--r--  1 root root       0 Feb  2 02:00 02-02-2005_01:00_forumDB.sql
-rw-r--r--  1 root root       0 Feb  2 03:00 02-02-2005_02:00_forumDB.sql
-rw-r--r--  1 root root       0 Feb  2 04:00 02-02-2005_03:00_forumDB.sql
-rw-r--r--  1 root root       0 Feb  2 05:00 02-02-2005_04:00_forumDB.sql
-rw-r--r--  1 root root       0 Feb  2 06:00 02-02-2005_05:00_forumDB.sql
-rw-r--r--  1 root root       0 Feb  2 07:00 02-02-2005_06:00_forumDB.sql
-rw-r--r--  1 root root       0 Feb  2 08:00 02-02-2005_07:00_forumDB.sql
-rw-r--r--  1 root root       0 Feb  2 09:00 02-02-2005_08:00_forumDB.sql
-rw-r--r--  1 root root       0 Feb  2 10:00 02-02-2005_09:00_forumDB.sql
-rw-r--r--  1 root root       0 Feb  2 11:00 02-02-2005_10:00_forumDB.sql
-rw-r--r--  1 root root       0 Feb  2 12:00 02-02-2005_11:00_forumDB.sql
-rw-r--r--  1 root root 7130823 Feb  2 12:00 02-02-2005_12:00_forumDB.sql
-rw-r--r--  1 root root 7130935 Feb  2 12:06 02-02-2005_12:06_forumDB.sql
lrwxrwxrwx  1 root root      53 Feb  2 12:06 forumDB.sql -> /shared/temp/forum-mysql/02-02-2005_12:06_forumDB.sql
Ich verstehe diesen Fehler nicht, bitte helft mir !

Sebastian
_________________________________________________
Linux HowTo's, Programmierung, Wallpapers und 3D:
http://www.neoBerserker.de

Benutzeravatar
blackm
Moderator und Co-Admin
Beiträge: 5921
Registriert: 02.06.2002 15:03:17
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von blackm » 02.02.2005 14:35:58

So wie es aussieht schein mysqldump im Script nicht richtig zu laufen...die -B Option kommt mir ein bischen komisch vor...aber warum laeuft es per Hand...hm...versuch mal

Code: Alles auswählen

mysqldump -u knecht -pgeheim forum2 > $pfad/$name 
Hast du mal in mysql logfile geschaut...Zugriff auf die DB erfolgt auch?!

by, Martin
Schöne Grüße

Martin

Neu im Forum? --> https://wiki.debianforum.de/debianforum ... tensregeln
Log- und Konfigurationsdatein? --> pastebin.php
Forum unterstützen? --> https://wiki.debianforum.de/debianforum.de/Spenden

Benutzeravatar
knecht
Beiträge: 1214
Registriert: 08.01.2004 15:33:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von knecht » 02.02.2005 15:00:27

Zugriff ist erfolgt:

Code: Alles auswählen

himself:/var/log# cat mysql.log | grep knecht | grep local
050202  7:00:01    2793 Connect     knecht@localhost on 
050202  8:00:01    2816 Connect     knecht@localhost on 
050202  9:00:01    2822 Connect     knecht@localhost on 
050202 10:00:01    2854 Connect     knecht@localhost on 
050202 11:00:01    2865 Connect     knecht@localhost on 
050202 12:00:01    2904 Connect     knecht@localhost on 
050202 12:06:27    2909 Connect     knecht@localhost on 
050202 13:00:02    2986 Connect     knecht@localhost on 
050202 14:00:01    3102 Connect     knecht@localhost on 

Code: Alles auswählen

himself:/var/log# name=$(date +%m-%d-%Y_%R)_forumDB.sql
himself:/var/log# pfad=/shared/temp/forum-mysql
himself:/var/log# mysqldump -uknecht -pgeheim forum2 > $pfad/$name
himself:/var/log# ls -l /shared/temp/forum-mysql/ | grep $name
-rw-r--r--  1 root root 7131455 Feb  2 14:55 02-02-2005_14:51_forumDB.sql
Macht er also auch ohne "-B",
ich tu mal das -B aus meinem Script raus. Komisch ist, das er immer die letzte Sicherung behält, das heißt ja das er die vorherige ja auch hatte und irgendwie wieder löscht/leert !! Sonst kann ja nicht die jeweils aktuelle vorhanden sein, wenn ich nachschaue. Nur wo ich das Script manuell ausgeführt habe bleibt die Datei auch (und halt jeweils die aktuellste).

Code: Alles auswählen

himself:/var/log# ls -l /shared/temp/forum-mysql/
total 27809
-rw-r--r--  1 root root 7076743 Feb  1 05:59 02-01-2005_05:59_forumDB.sql
-rw-r--r--  1 root root       0 Feb  1 23:00 02-01-2005_22:00_forumDB.sql
-rw-r--r--  1 root root       0 Feb  2 00:00 02-01-2005_23:00_forumDB.sql
-rw-r--r--  1 root root       0 Feb  2 01:00 02-02-2005_00:00_forumDB.sql
-rw-r--r--  1 root root       0 Feb  2 02:00 02-02-2005_01:00_forumDB.sql
-rw-r--r--  1 root root       0 Feb  2 03:00 02-02-2005_02:00_forumDB.sql
-rw-r--r--  1 root root       0 Feb  2 04:00 02-02-2005_03:00_forumDB.sql
-rw-r--r--  1 root root       0 Feb  2 05:00 02-02-2005_04:00_forumDB.sql
-rw-r--r--  1 root root       0 Feb  2 06:00 02-02-2005_05:00_forumDB.sql
-rw-r--r--  1 root root       0 Feb  2 07:00 02-02-2005_06:00_forumDB.sql
-rw-r--r--  1 root root       0 Feb  2 08:00 02-02-2005_07:00_forumDB.sql
-rw-r--r--  1 root root       0 Feb  2 09:00 02-02-2005_08:00_forumDB.sql
-rw-r--r--  1 root root       0 Feb  2 10:00 02-02-2005_09:00_forumDB.sql
-rw-r--r--  1 root root       0 Feb  2 11:00 02-02-2005_10:00_forumDB.sql
-rw-r--r--  1 root root       0 Feb  2 12:00 02-02-2005_11:00_forumDB.sql
-rw-r--r--  1 root root 7130823 Feb  2 12:00 02-02-2005_12:00_forumDB.sql
-rw-r--r--  1 root root       0 Feb  2 13:00 02-02-2005_12:06_forumDB.sql
-rw-r--r--  1 root root       0 Feb  2 14:00 02-02-2005_13:00_forumDB.sql
-rw-r--r--  1 root root 7127603 Feb  2 14:00 02-02-2005_14:00_forumDB.sql
-rw-r--r--  1 root root 7131455 Feb  2 14:55 02-02-2005_14:51_forumDB.sql
lrwxrwxrwx  1 root root      53 Feb  2 14:00 forumDB.sql -> /shared/temp/forum-mysql/02-02-2005_14:00_forumDB.sql
Die 12Uhr Sicherung, die im ersten Post noch da ist, ist hier weg, dafür ist die neue wieder da. Also sollte es mit dem mysqldump Befehl gar nichts zu tun haben

8O
_________________________________________________
Linux HowTo's, Programmierung, Wallpapers und 3D:
http://www.neoBerserker.de

Benutzeravatar
blackm
Moderator und Co-Admin
Beiträge: 5921
Registriert: 02.06.2002 15:03:17
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von blackm » 02.02.2005 15:17:29

Vielleicht liegt es auch an dem Teil der die alten Backups loeschen soll...ich habe das bei mir so geregelt

Code: Alles auswählen

find ./today -mtime +0 -type f -exec rm -f {} \;
loesch alle Backups die aelter als 24 Stunden sind. Falls dir das zu grob ist, schau mal in man find, es gibt auch noch die -mmin Option.

by, Martin
Schöne Grüße

Martin

Neu im Forum? --> https://wiki.debianforum.de/debianforum ... tensregeln
Log- und Konfigurationsdatein? --> pastebin.php
Forum unterstützen? --> https://wiki.debianforum.de/debianforum.de/Spenden

Benutzeravatar
knecht
Beiträge: 1214
Registriert: 08.01.2004 15:33:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von knecht » 02.02.2005 15:35:13

Ich finde es nur kritisch, wenn ich den Server mal einen Tag nicht laufen lasse, und wieder einschalte ist das aktuellste auch schon einen Tag alt . . .

Es muß wohl an meiner rm Zeile liegen, was anderes kanns ja gar nicht sein.
Hab jetzt mal die rm Zeile zum löschen des Links auskommentiert, mal sehen . . .
_________________________________________________
Linux HowTo's, Programmierung, Wallpapers und 3D:
http://www.neoBerserker.de

Benutzeravatar
knecht
Beiträge: 1214
Registriert: 08.01.2004 15:33:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von knecht » 02.02.2005 18:21:03

Es war nicht daran gelegen, das er jedesmal alle Dateien bis auf 20 löschen wollte, sondern er leert die Dateien irgendwie, wenn er den Softlink löscht. hier nochmal mein Script:

Code: Alles auswählen

#!/bin/sh
name=$(date +%m-%d-%Y_%R)_forumDB.sql
pfad=/shared/temp/forum-mysql
#
#alte Dateien bis auf 20 lÃschen
#
list=$(ls -lt $pfad | tail -n +20 | cut -d" " -f17)
for i in $list; do
rm $pfad/$i
done

/usr/bin/mysqldump -u knecht --password=geheim  forum2 > $pfad/$name
#rm $pfad/forumDB.sql
#ln -s $pfad/$name $pfad/forumDB.sql
Seid ich das rm $pfad/forumDB.sql rausgenommen habe geht es, aber es ist doch nicht normal, dass wenn ich einen Softlink mit rm ohne Optionen lösche, die Datei auf die er zeigte dann leer ist !!
In der man steht nichts über ne Option die das löschen eines Linkes betrifft, wie soll ich den dann den Link löschen ?
_________________________________________________
Linux HowTo's, Programmierung, Wallpapers und 3D:
http://www.neoBerserker.de

Benutzeravatar
blackm
Moderator und Co-Admin
Beiträge: 5921
Registriert: 02.06.2002 15:03:17
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von blackm » 02.02.2005 18:38:18

Funktioniert das

Code: Alles auswählen

list=$(ls -lt $pfad | tail -n +20 | cut -d" " -f17) 
bei dir richtig? Ich habe das gerade mal bei mir ausprobiert und der Dateiname war bei mit zwischen Spalte 15 und 17 verteilt... :o

by, Martin
Schöne Grüße

Martin

Neu im Forum? --> https://wiki.debianforum.de/debianforum ... tensregeln
Log- und Konfigurationsdatein? --> pastebin.php
Forum unterstützen? --> https://wiki.debianforum.de/debianforum.de/Spenden

Benutzeravatar
knecht
Beiträge: 1214
Registriert: 08.01.2004 15:33:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von knecht » 03.02.2005 09:05:52

Nein, das geht nicht richtig. Liegt wohl daran, das sich bei einer Datei mit 0Byte Dateigröße sehr viel mehr Nullen befinden als wenns ne normale Dateigröße hat. Jetzt liegt der Dateiname also auf der Spalte 11

Code: Alles auswählen

himself:~# ls -l $pfad | tail -n +20 | cut -d" " -f11 | egrep -v ^[0-9]{2}$
02-03-2005_06:00_forumDB.sql
02-03-2005_07:00_forumDB.sql
02-03-2005_08:00_forumDB.sql
02-03-2005_08:35_forumDB.sql
02-03-2005_09:00_forumDB.sql
Ich tue jetzt mal meine Zeile zum Link löschen wieder rein, und lass es so mal laufen

Danke
Sebastian
_________________________________________________
Linux HowTo's, Programmierung, Wallpapers und 3D:
http://www.neoBerserker.de

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 03.02.2005 09:59:07

ein kleiner Änderungsvorschlag:

Code: Alles auswählen

ls -lt $pfad | tail -n +20 | awk ' { print $9 } '
der Dateiname befindet sich immer in Spalte 9

[edit]
ups, das sollte ja noch einfache gehen:

Code: Alles auswählen

ls -t1$pfad | tail -n 20
[/edit]

Benutzeravatar
knecht
Beiträge: 1214
Registriert: 08.01.2004 15:33:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von knecht » 03.02.2005 14:03:37

Schock :oops: :oops: :oops:

Ich hab gerade folgendes entdeckt: (woran ich einfach nicht mehr gedacht habe):

Code: Alles auswählen

00 */1 * * * /root/db_sichern.sh &> /shared/temp/forum-mysql/forumDB.sql 
früher hab ich im crontab den mysqldump Befehl gehabt, und das ganze direkt in eine Datei geleitet die den selben Namen wie der Link hat.
Ich hab das irgendwann mal blind durchs Script ersetzt. Dann ist das ganze komische Verhalten schon verständlich !! Er hat also mit der Bildschirmausgabe des Scripts (=nichts) jedesmal auf den Link ne Datei ausgeben wollen. Dadurch hat er natürlich jeweils die zuletzt verlinkte Datei überschrieben . . .

dummer Fehler !! Danke für die Hilfe

gruss
Sebastian
_________________________________________________
Linux HowTo's, Programmierung, Wallpapers und 3D:
http://www.neoBerserker.de

Benutzeravatar
knecht
Beiträge: 1214
Registriert: 08.01.2004 15:33:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von knecht » 11.02.2005 11:30:26

Nochmal danke, gms !!!

Code: Alles auswählen

list=$(ls -t1 $pfad | grep -v ^forum | tail -n +20)
Damit, und ohne meinen blöden Fehler im crontab läuft es wunderbar !!!

:lol: :lol:
Sebastian
_________________________________________________
Linux HowTo's, Programmierung, Wallpapers und 3D:
http://www.neoBerserker.de

Antworten