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:
Danke schon mal für eure Hilfe (:
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 -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