[Shell]Backupscript Erweiterung? ich brauche Hilfe

10/19/2011 13:30 .Kay331#1
Tag com.

Ich brauche mal eure Hilfe da ich in Shell der totale nuub bin :D

Ich wollte mein Script so anpassen das auf ein Backup von den Serverfiles gemacht wird und auch auf den ftp Server geladen wird.

Script:
PHP Code:
#!/bin/bash
# MySQL Backup Shell
#--
# by aiiR7
#--

#-- General Settings
NOW="$(date +"%Y%m%d")"                 # Date im YYYYMMDD Format
HOST="$(hostname)"                         # Hostname
DUMP_OPTS="-Q --single-transaction"             # MySQL Dump Parameter
TAR_OPTS="-cvzf"                         # Tar Parameter


#-- MySQL Settings
MyUSER="root"                             # MYSQL Benutzer.
MyPASS="*********"                         # MYSQL Passwort.
MyHOST="localhost"                             # MYSQL Host.

#-- FTP Settings
FTPUSER="*****"                          # FTP Benutzer.
FTPPASS="*****"                         # FTP Password.
FTPHOST="bfhost.de"                 # FTP IP/Host.
FTPDEST="/html/backups"                       # FTP Verzeichnis, wo die Backups hinterlegt werden sollen.

#-- Log & Error File
LOG="backup.log"                         # Jeder Vorgang wird geloggt, diese kann man in dieser Datei finden.
ERR="backup.err"                         # Sämtliche Fehler werden in dieser Datei hinterlegt.


#-- Bin Pfad - ändere diese nur, wenn sie nicht via "which" erkannt werden.
MYSQL="$(which mysql)"
MYSQLDUMP="$(which mysqldump)"
GREP="$(which grep)"
CHOWN="$(which chown)"
CHMOD="$(which chmod)"
TAR="$(which tar)"
MAIL="$(which mail)"
FIND="$(which find)"
DF="$(which df)"

# ----------
# Trage hier ein, welche Datenbanken gesichert werden sollen. Wenn die untere Option aktiviert ist, muss diese auskommentiert werden.
DBS="account player mysql"
# Der unten stehende und auskommentierte Befehl kann aktiviert werden, wenn alle Datenbanken gesichert werden sollen. 
# Dazu aber die obere Option "DBS" auskommentieren.
#DBS="$($MYSQL -u $MyUSER -h $MyHOST -p$MyPASS -Bse 'show databases')"
# Trage hier die Datenbanken ein, die NICHT gesichert werden sollen (Diese Option wird nur dann aktiviert, wenn der obere Befehl aktiviert ist.
DNB="common information_schema test hpcms hotbackup metin2_runup"
# ----------

# In diesem Ordner werden alle Backups hinterlegt.
DEST="/backup"




# Wenn "SEND_MAIL" auf "1" gestellt ist, werden dir sämtliche Informationen via E-Mail zugesendet.
SEND_EMAIL=0
NOTIFY_EMAIL
="kay.****"
NOTIFY_SUBJECT="MySQL Backup Notification"

#-- Backups Löschen
# Wenn "DELETE_OLD_BACKUPS" auf 1 gestellt ist, werden Backups, die älter als "DELETE_BACKUPS_OLDER_THAN_DAYS=x" gelöscht.
DELETE_OLD_BACKUPS=1
# Die Angabe wird in Tagen berechnet. Momentan werden die Backups nach 10 Tagen gelöscht, diese Angabe kann auf Wunsch geändert werden.
DELETE_BACKUPS_OLDER_THAN_DAYS=10


#-- E-Mail Funktion
function gen_email {
  
DO_SEND=$1
  TMP_FILE
=$2
  NEW_LINE
=$3
  LINE
=$4
  
if [ $DO_SEND -eq 1 ]; then
    
if [ $NEW_LINE -eq 1 ]; then
      
echo "$LINE>> $TMP_FILE
    
else
      echo -
"$LINE>> $TMP_FILE
    fi
  fi
}

#-- Hier werden die Backups hinterlegt
if [ ! -d $DEST ]; then 
  
echo "$(date) :: Das '$DEST' Verzeichnis existiert nicht." >> $LOG
  
echo "$(date) :: Erstelle '$DEST' Verzeichnis ..." >> $LOG
  mkdir 
-p $DEST
  
echo "$(date) :: Das '$DEST' Verzeichnis wurde erstellt." >> $LOG
  
# Nur der Root Benutzer ist berechtigt, auf die Backups zuzugreifen.
  
echo "$(date) :: Verteile die Besitzer und Chmod Rechte für das Verzeichnis '$DEST' ..." >> $LOG
  $CHOWN 0
:0 $DEST
  $CHMOD 0750 $DEST
  
echo "$(date) :: Die nötigen Rechte für das Verzeichnis '$DEST' wurden vergeben." >> $LOG
fi

#-- Backup Verzeichnis wird erstellt (bezieht sich auf die einzelnen Backups).
MBD="$DEST/$NOW"

[ ! -d $MBD ] && mkdir -p $MBD || :

 
$CHOWN 0:0 $MBD
 $CHMOD 0750 $MBD


#-- Temp Message Datei
TMP_MSG_FILE="/tmp/$RANDOM.msg"
if [ $SEND_EMAIL -eq 1 --"$TMP_MSG_FILE]; then
  rm 
-"$TMP_MSG_FILE"
fi

set 
-o pipefail

#-- Beginne mit Backup der zu sicherten Datenbanken.
echo "$(date) :: Beginne mit der Sicherung der Datenbanken ..." >> $LOG
for db in $DBS
do
    
skipdb=-1
    
if [ "$DNB!= "" ];
    
then
    
for i in $DNB
    
do
        [ 
"$db== "$i] && skipdb=|| :
    
done
    fi
    
if [ "$skipdb== "-1" ] ; then
    BACKUP
="mysql_backup.`date +%d.%m.%Y-%H:%M:%S`.tgz"
        
$MYSQLDUMP $DUMP_OPTS -u $MyUSER -h $MyHOST -p$MyPASS --log-error=$ERR $db $MBD/$db.sql
        RESULT
=$?
        if [ 
$RESULT != ]; then
        rm $MBD
/*.sql
      NOTIFY_MESSAGE="$(date) :: Error: Fehler '$RESULT' ist aufgetreten."    
      echo $NOTIFY_MESSAGE >> $LOG
    else
      NOTIFY_MESSAGE="$(date) :: Die Datenbanken '$db' wurden erfolgreich gedumpt und im '$MBD' Verzeichnis hinterlegt."
      echo $NOTIFY_MESSAGE >> $LOG 
    fi    
        gen_email $SEND_EMAIL $TMP_MSG_FILE 1 "$NOTIFY_MESSAGE"
        echo $NOTIFY_MESSAGE
    fi
done

$TAR $TAR_OPTS $MBD/$BACKUP $MBD/*.sql

  if [ $? -ne 0 ] ; then  
     echo "$(date) :: Backup konnte nicht archiviert werden." >> $LOG
  else
     echo "$(date) :: Backup wurde erfolgreich archiviert." >> $LOG
     rm $MBD/*.sql
     echo "$(date) :: Bereite Backup zum transferieren vor ..." >> $LOG
     echo "$(date) :: Verbinde mit Backup Server ..." >> $LOG
  fi
  


#-- Empty line in email and stdout
gen_email $SEND_EMAIL $TMP_MSG_FILE 1 ""
echo ""

#-- Alte Backups löschen
if [ $DELETE_OLD_BACKUPS -eq 1 ]; then
  find "$DEST" -maxdepth 1 -mtime +$DELETE_BACKUPS_OLDER_THAN_DAYS -type d | $GREP -v "^$DEST$" | while read DIR; do
    gen_email $SEND_EMAIL $TMP_MSG_FILE 0 "Deleting: '$DIR': "
    echo -n "Deleting: $DIR: "
    echo "$(date) :: Bereite das alte Backupverzeichnis '$DIR' zum löschen vor, da es älter als '$DELETE_BACKUPS_OLDER_THAN_DAYS' ist." >> $LOG
    rm -rf "$DIR" 
    RESULT=$?
    if [ $RESULT != 0 ]; then
      NOTIFY_MESSAGE="$(date) :: Error : Das alte Backupverzeichnis '$DIR' konnte nicht gelöscht werden."
      echo $NOTIFY_MESSAGE >> $LOG
      echo $NOTIFY_MESSAGE >> $ERR
    else
      NOTIFY_MESSAGE="$(date) :: Das alte Backupverzeichnis '$DIR' wurde erfolgreich gelöscht."
      echo $NOTIFY_MESSAGE >> $LOG
    fi
    gen_email $SEND_EMAIL $TMP_MSG_FILE 1 "$NOTIFY_MESSAGE"
    echo "$NOTIFY_MESSAGE"
  done
fi



#-- Empty line in email and stdout
gen_email $SEND_EMAIL $TMP_MSG_FILE 1 ""
echo ""



#-- Festplatten Statistik wird via E-Mail übermittelt
if [ $SEND_EMAIL -eq 1 ]; then
  $DF -h "$DEST" >> "$TMP_MSG_FILE"  
fi
$DF -h "$DEST"



#-- Versenden der E-Mail in welcher alle Informationen vorzufinden sind.
if [ $SEND_EMAIL -eq 1 ]; then
  $MAIL -s "$NOTIFY_SUBJECT" "$NOTIFY_EMAIL" < "$TMP_MSG_FILE"
  rm -f "$TMP_MSG_FILE"
fi


#-- Hier verbindet sich der Server mit dem Backup Server und hinterlegt dort die Backups, sofern die letzten Vorgänge erfolgreich waren.
# Sollte ein Fehler während der Übertragung auftauchen, wird dieser in der $ERR (backup.err) hinterlegt.

ftp -inv $FTPHOST << EOF 2> $ERR
user $FTPUSER $FTPPASS
bin
prompt off
$CHMOD 0600 $FTPDEST
cd $FTPDEST
mkdir $NOW
cd $NOW
lcd $MBD
mput $BACKUP
$CHMOD 0600 $BACKUP
EOF

  if $GREP "ftp" $ERR 
   then
    echo "$(date) :: Error : Es ist ein Fehler während der FTP Übertragung aufgetreten, siehe mehr in '$ERR'" >> $LOG
  else
    echo "$(date) :: Backup wurde soeben auf den Backup Server transferiert." >> $LOG
    echo "$(date) :: Das aktuelle Backup Verzeichnis lautet '$NOW'." >> $LOG
    echo "$(date) :: Backup Erfolgreich Abgeschlossen." >> $LOG
    echo "" >> $LOG
    echo "----------------------" >> $LOG
    echo "" >> $LOG
  fi 
Danke schon mal für eure Hilfe (: