Ich brauche mal eure Hilfe da ich in Shell der totale nuub bin
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 -n "$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 -a -f "$TMP_MSG_FILE" ]; then
rm -f "$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=1 || :
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 != 0 ]; 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






