Page 1 of 1

DB-Backup-Skript

Posted: 2003-08-10 00:35
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.

Re: DB-Backup-Skript

Posted: 2003-08-10 10:43
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/*

Re: DB-Backup-Skript

Posted: 2003-08-11 21:50
by s4fuser
Jetzt bekomme ich nur eine Fehlermeldung:
/bin/chmod: failed to get attributes of `/backup/sql/*#!/bin/sh': No such file or directory

Re: DB-Backup-Skript

Posted: 2003-08-11 22:45
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

Re: DB-Backup-Skript

Posted: 2003-08-12 08:26
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 ?

Re: DB-Backup-Skript

Posted: 2003-08-12 08:56
by s4fuser
Das Skript heisst /backup/sql/dump_sql.sh
Ich habe es genauso gestartet (per Hand), wie vorher, als es halbwegs klappte.

Re: DB-Backup-Skript

Posted: 2003-08-12 17:59
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.

Re: DB-Backup-Skript

Posted: 2003-08-12 18:03
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.

Re: DB-Backup-Skript

Posted: 2003-08-21 00:08
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?

Re: DB-Backup-Skript

Posted: 2003-08-23 21:44
by s4fuser
Wirklich niemand, der den Fehler sieht? Ich bekomme jede Nacht 10 mal diese Fehlermeldungen gemailt und bin mit meinem Latein am Ende.

Re: DB-Backup-Skript

Posted: 2003-08-28 03:21
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.

Re: DB-Backup-Skript

Posted: 2003-08-28 04:22
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

Re: DB-Backup-Skript

Posted: 2003-08-28 14:40
by s4fuser
Super. Das war es schon. Danke.

Re: DB-Backup-Skript

Posted: 2003-08-29 09:41
by phquest
wie hast du das mit dem automatischen schieben auf den backup ftp gemacht?

danke schonmal

phquest

Re: DB-Backup-Skript

Posted: 2003-08-29 13:38
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