Skip to content

Instantly share code, notes, and snippets.

@aduzsardi
Created April 5, 2017 12:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save aduzsardi/15a9c57740d1af59df46da4ce6428099 to your computer and use it in GitHub Desktop.
Save aduzsardi/15a9c57740d1af59df46da4ce6428099 to your computer and use it in GitHub Desktop.
FTP Backup Script bash
#!/bin/sh
# Script pentru backup remote prin ftp
# Dependente: mysql,mysqldump,gzip,curlftpfs
#
# Autor: Alex Duzsardi alex[dot]duzsardi[at]pitechplus[dot]com
# www.pitechplus.com
# ---------------------------------------------------------------------
### Variabile si configuratii ###
### MySQL ###
MUSER="root"
MPASS="<MYSQL PASSWD>"
MHOST="localhost"
MYSQL="$(which mysql)"
MYSQLDUMP="$(which mysqldump)"
GZIP="$(which gzip)"
DBS="$($MYSQL -u $MUSER -h $MHOST -p$MPASS -Bse 'show databases' | grep -Ev 'schema|mysql')"
### FTP ###
LFTPDIR=/srv/ftpbackup
RFTPDIR="<FTP DIR>"
FTPU="<FTP USER>"
FTPP="<FTP PASSWD>"
FTPS="<FTP SERVER>"
NCFTP="$(which ncftpput)"
### Mail ###
EMAILADDR="<ADMIN EMAIL>"
MSG=/tmp/msg.txt
SUBJ=''
### Altele ###
DIRS="/etc/ /var/www/sites/"
NOW=$(date +"%d-%m-%Y")
BACKUP=/tmp/backup.$$
RMDATE=$(date +"%d-%m-%Y" -d '6 days ago')
RMBACKUP="${LFTPDIR}/backup/${RMDATE}"
_sendMail(){
mail -s "$SUBJ" -r "Name <noreply@domain.com>" "$EMAILADDR" <$MSG
}
_makeBackupFS(){
[ ! -d $BACKUP ] && mkdir -p $BACKUP || :
d=$(date +"%Hh%Mm%Ss")
FILE="fs-$NOW-$d.tar.gz"
tar -zcvf $BACKUP/$FILE $DIRS
if [ "$?" != "0" ]; then
SUBJ="Backup failed"
echo "Date: $(date)">$MSG
echo "Hostname: $(hostname)" >>$MSG
echo "Backing up filesystem directories failed: $DIRS" >>$MSG
_sendMail
rm -f $MSG
[ -d $BACKUP ] && rm -r $BACKUP || :
fi
}
_makeBackupSQL(){
for db in $DBS
do
FILE=$BACKUP/mysql-$db.$NOW-$d.gz
$MYSQLDUMP -u $MUSER -h $MHOST -p$MPASS $db | $GZIP -9 > $FILE
done
if [ "$?" != "0" ]; then
SUBJ="Backup MySQL failed"
echo "Date: $(date)">$MSG
echo "Hostname: $(hostname)" >>$MSG
echo "Backing up MySQL databases failed: $DBS" >>$MSG
_sendMail
rm -f $MSG
fi
}
_makeFtpUpload(){
ncftp -u"$FTPU" -p"$FTPP" $FTPS<<EOF
mkdir $RFTPDIR/$NOW
cd $RFTPDIR/$NOW
lcd $BACKUP
mput *
cd $RFTPDIR
quit
EOF
rm -r $BACKUP
}
_cleanOldBackup(){
curlftpfs ftp://$FTPU:$FTPP@$FTPS $LFTPDIR
if [ "$?" != "0" ]; then
SUBJ="Mount FTP dir failed"
echo "Date: $(date)">$MSG
echo "Hostname: $(hostname)" >>$MSG
echo "Could not mount ftp://$FTPU:$FTPP@$FTPS in $LFTPDIR" >>$MSG
_sendMail
rm -f $MSG
else
[ -d $RMBACKUP ] && rm -r $RMBACKUP || :
umount $LFTPDIR
fi
}
# Run functions
_makeBackupFS
_makeBackupSQL
_makeFtpUpload
_cleanOldBackup
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment