DB-Backup-Skript

Backup, Restore und Transfer von Daten
Post Reply
s4fuser
Posts: 136
Joined: 2003-06-01 01:22
 

DB-Backup-Skript

Post by s4fuser »

Hallo,

ich habe mir mit Hilfe von Google und den FAQ hier ein kleines Shell-Skript zusammenkopiert, das in recht kurzen Abständen meine DB sichern soll. Leider funktioniert es nicht so richtig.
Hier ist das aktuelle Skript:

Code: Select all

#!/bin/sh 

output_file="/backup/sql/dump.sql" 
count_files=`ls -l /backup/sql/database* | wc -l` 
count_files=expr $count_files - 1 

if [ $count_files -gt 7 ]; then 
    file_list=`ls -S -t -p -r /backup | grep gz` 
    rm  /backup/sql/${file_list%%gz*}gz 
fi 

mysqldump --all-databases --add-drop-table -c -p PASSWORT > $output_file 2>&1        

filename="/backup/sql/database_`date +%Y-%m-%d-%k.%M`.sql.gz" 

gzip $output_file 
mv $output_file.gz $filename 

chmod g+wr /backup/sql/*
Zwar wird eine Datei erstellt, aber sie enthält nur eine Anleitung zum Befehl mysqldump. Was mache ich falsch?
Ausserdem wird ein Fehler in Zeile 5 gemeldet. Ein "command" ist nicht bekannt. Ich nehme an, es geht um expr.
captaincrunch
Userprojekt
Userprojekt
Posts: 7066
Joined: 2002-10-09 14:30
Location: Dorsten
Contact:
 

Re: DB-Backup-Skript

Post by captaincrunch »

Ich denke, das ganze sollte so aussehen :

Code: Select all

#!/bin/sh

output_file="/backup/sql/dump.sql"
count_files=`ls -l /backup/sql/database* | wc -l`
count_files=`expr $count_files - 1`

if [ $count_files -gt 7 ]; then
    file_list=`ls -S -t -p -r /backup | grep gz`
    /bin/rm  /backup/sql/${file_list%%gz*}gz
fi

`which mysqldump` --all-databases --add-drop-table -c -pPASSWORT > $output_file 2>&1       

filename="/backup/sql/database_`date +%Y-%m-%d-%k.%M`.sql.gz"

`which gzip` $output_file
/bin/mv $output_file.gz $filename

`which chmod` g+wr /backup/sql/*
DebianHowTo
echo "[q]sa[ln0=aln256%Pln256/snlbx]sb729901041524823122snlbxq"|dc
s4fuser
Posts: 136
Joined: 2003-06-01 01:22
 

Re: DB-Backup-Skript

Post by s4fuser »

Jetzt bekomme ich nur eine Fehlermeldung:
/bin/chmod: failed to get attributes of `/backup/sql/*#!/bin/sh': No such file or directory
freeze
Posts: 41
Joined: 2002-07-15 08:18
Location: Oberhausen
 

Re: DB-Backup-Skript

Post by freeze »

Bei mir läuft folgendes Script wunderbar. Ist auch hier aus dem Forum:

Code: Select all

#!/bin/sh
mysql_host="localhost"
mysql_rootpasswd="xyz"
backupdir="/home/backup"
mysql_backupdir="${backupdir}/mysql"
mysql_dump="/usr/bin/mysqldump"
mysql_show="/usr/bin/mysqlshow"
##     1 = yes(xxxx-2001xxxx-xx.sql.gz)
##     0 = no
db_compress="1"
## not include list (mit | abtrennen)
not_dump_db="beispiel_db|"

sysdtime=`date +%Y%m%d-%H%M`
mysql_connect="-h $mysql_host -u root -p$mysql_rootpasswd"
mysql_DBs="`$mysql_show $mysql_connect | egrep -v "${not_dump_db}Databases|+" | awk '{print $2}' 2>/dev/null`"

mysql_dump_work() {
   mysql_each_DB="$1"
   mysql_dump_file="${mysql_backupdir}/${mysql_each_DB}-${sysdtime}.sql"
   $mysql_dump $mysql_connect --opt $mysql_each_DB > $mysql_dump_file
   if [ "$db_compress" = "1" ] ; then
      gzip -9 $mysql_dump_file
   fi
}

if [ "$mysql_DBs" != "" ] ; then

   if [ ! -d "$mysql_backupdir" ] ; then
      mkdir -p "$mysql_backupdir"
      chmod 700 "$mysql_backupdir"
   fi

   for mysql_DB in $mysql_DBs ; do
      mysql_dump_work $mysql_DB
   done

fi

exit 0
captaincrunch
Userprojekt
Userprojekt
Posts: 7066
Joined: 2002-10-09 14:30
Location: Dorsten
Contact:
 

Re: DB-Backup-Skript

Post by captaincrunch »

/bin/chmod: failed to get attributes of `/backup/sql/*#!/bin/sh': No such file or directory
Wie heißt das Script bei dir, und was hast du gemacht, damit es zu diesem Fehler kam ?
DebianHowTo
echo "[q]sa[ln0=aln256%Pln256/snlbx]sb729901041524823122snlbxq"|dc
s4fuser
Posts: 136
Joined: 2003-06-01 01:22
 

Re: DB-Backup-Skript

Post by s4fuser »

Das Skript heisst /backup/sql/dump_sql.sh
Ich habe es genauso gestartet (per Hand), wie vorher, als es halbwegs klappte.
s4fuser
Posts: 136
Joined: 2003-06-01 01:22
 

Re: DB-Backup-Skript

Post by s4fuser »

So funktioniert es:

Code: Select all

#!/bin/sh 

output_file="/backup/sql/dump.sql" 
count_files=`ls -l /backup/sql/database* | wc -l` 
count_files=`expr $count_files - 1`

if [ $count_files -gt 7 ]; then 
    file_list=`ls -S -t -p -r /backup | grep gz` 
    rm  /backup/sql/${file_list%%gz*}gz 
fi 

`which mysqldump` --all-databases --add-drop-table -c -pPASSWORT > $output_file 2>&1        

filename="/backup/sql/database_`date +%Y-%m-%d-%k.%M`.sql.gz" 

gzip $output_file 
mv $output_file.gz $filename 

chmod g+wr /backup/sql/*
Danke für die Hilfe.
Danke auch an Freeze, aber ich wollte dieses Skript nutzen, weil es immer 10 Versionen nebeneinander anlegt und die jeweils elfte löscht.
Das ganze muß ich jetzt noch so erweitern, dass alles auch automatisch auf den FTP-Backupspace geschoben wird.

Aber genau mit dem automatischen Löschen gibt es noch Probleme. Die Dateien sehen so aus: database_2003-08-12-17.56.sql.gz, aber löschen will das Skript andere:

Code: Select all

rm: cannot remove `/backup/sql/2003-07-01.tgz': No such file or directory
Mal sehen, ob ich das auch noch hinbekomme.
s4fuser
Posts: 136
Joined: 2003-06-01 01:22
 

Re: DB-Backup-Skript

Post by s4fuser »

War ein dummer Fehler.
Diese Zeile:

Code: Select all

file_list=`ls -S -t -p -r /backup | grep gz` 
muss einfach nur so aussehen:

Code: Select all

file_list=`ls -S -t -p -r /backup/sql | grep gz` 
Bei mir liegen in /backup die anderen Backups.
s4fuser
Posts: 136
Joined: 2003-06-01 01:22
 

Re: DB-Backup-Skript

Post by s4fuser »

So, das Skript tut nun schon eine Weile seinen Dienst und schiebt den aktuellen Dump auch per FTP auf den Backupspace.

Aber jetzt habe ich ein Problem, bei dem ich erst dachte, es taucht wie von Geisterhand auf und verschwindet wieder. Nun habe ich aber festgestellt, dass es nur Probleme gibt zwischen 00.00 und 09.59 Uhr. Also immer, wenn bei der Uhrzeit vorne eine Null steht.

Das Datum und die Uhrzeit wird ja in folgender Zeile in den Dateinamen gepackt:

Code: Select all

filename="/backup/sql/database_`date +%Y-%m-%d-%k.%M`.sql.gz"

Aber wo ist da das Problem?

Als Fehlermeldung bekomme ich während diesen Uhrzeiten folgendes:
mv: when moving multiple files, last argument must be a directory
Try `mv --help' for more information.
cp: copying multiple files, but last argument `/backup/sql/letzterdump.sql.gz' is not a directory
Try `cp --help' for more information.
Cannot open local file /backup/sql/letzterdump.sql.gz for reading: No such file or directory.
ncftpput /backup/sql/letzterdump.sql.gz: could not open file.
rm: cannot remove `/backup/sql/letzterdump.sql.gz': No such file or directory
Klar, das meiste sind Folgefehler. Aber wo ist die Ursache?
s4fuser
Posts: 136
Joined: 2003-06-01 01:22
 

Re: DB-Backup-Skript

Post by s4fuser »

Wirklich niemand, der den Fehler sieht? Ich bekomme jede Nacht 10 mal diese Fehlermeldungen gemailt und bin mit meinem Latein am Ende.
s4fuser
Posts: 136
Joined: 2003-06-01 01:22
 

Re: DB-Backup-Skript

Post by s4fuser »

Da mein halbwegs funktionierendes Skript bisher hier noch nicht gepostet wurde, hier noch einmal komplett:

Code: Select all

#!/bin/sh 

output_file="/backup/sql/dump.sql" 
count_files=`ls -l /backup/sql/database* | wc -l` 
count_files=`expr $count_files - 1` 

if [ $count_files -gt 7 ]; then 
    file_list=`ls -S -t -p -r /backup/sql | grep gz` 
    rm  /backup/sql/${file_list%%gz*}gz 
fi 

`which mysqldump` --all-databases --add-drop-table -c -pPASSWORT > $output_file 2>&1        

filename="/backup/sql/database_`date +%Y-%m-%d-%k.%M`.sql.gz" 

gzip $output_file 
mv $output_file.gz $filename 

chmod g+wr /backup/sql/*
Fällt nicht doch noch einem von Euch auf, warum es Probleme zu Uhrzeiten mit einer 0 vorne gibt? Ich bin bis heute nicht dahinter gestiegen.
fritz
Posts: 892
Joined: 2002-04-23 20:12
Location: Lehrte / Hannover
 

Re: DB-Backup-Skript

Post by fritz »

probier mal, aus dem kleinen 'k' ein grosses 'H' zu machen - evtl. stört das blank, das bei einstelligen Stunden dort produziert wird


p150:~ # filename="/backup/sql/database_`date +%Y-%m-%d-%k.%M`.sql.gz"
p150:~ # echo $filename
/backup/sql/database_2003-08-28- 4.14.sql.gz

p150:~ # filename="/backup/sql/database_`date +%Y-%m-%d-%H.%M`.sql.gz"
p150:~ # echo $filename
/backup/sql/database_2003-08-28-04.17.sql.gz

Gruss Fritz
s4fuser
Posts: 136
Joined: 2003-06-01 01:22
 

Re: DB-Backup-Skript

Post by s4fuser »

Super. Das war es schon. Danke.
phquest
Posts: 22
Joined: 2003-08-29 09:39
 

Re: DB-Backup-Skript

Post by phquest »

wie hast du das mit dem automatischen schieben auf den backup ftp gemacht?

danke schonmal

phquest
s4fuser
Posts: 136
Joined: 2003-06-01 01:22
 

Re: DB-Backup-Skript

Post by s4fuser »

So:

Code: Select all

`which ncftpput` -V -u username -p passwort IP.des.Backup.Servers / /backup/sql/letzterdump.sql.gz

rm /backup/sql/letzterdump.sql.gz
Post Reply