Add delete old file feature

This commit is contained in:
Teddysun 2016-08-21 21:38:06 +09:00
parent b743dc6e4f
commit c1da0b7595

105
backup.sh
View File

@ -9,7 +9,6 @@ PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
[[ $EUID -ne 0 ]] && echo 'Error: This script must be run as root!' && exit 1
### START OF CONFIG ###
# Encrypt flag(true:encrypt, false:not encrypt)
ENCRYPTFLG=true
@ -31,6 +30,10 @@ LOGFILE="/root/backups/backup.log"
# OPTIONAL: If you want MySQL to be backed up, enter the root password below
MYSQL_ROOT_PASSWORD=""
# Below is a list of MySQL database name that will be backed up
# if you want backup all databases, leave it blank.
MYSQL_DATABASE_NAME[0]=""
# Below is a list of files and directories that will be backed up in the tar backup
# For example:
# File: /data/www/default/test.tgz
@ -47,15 +50,18 @@ TARFILE="${LOCALDIR}""$(hostname)"_"${BACKUPDATE}".tgz
# Backup MySQL dump file name
SQLFILE="${TEMPDIR}mysql_${BACKUPDATE}.sql"
# Number of days to store daily local backups
LOCALAGEDAILIES="7"
### END OF CONFIG ###
log() {
echo "$(date "+%Y-%m-%d %H:%M:%S")" "$1"
echo -e "$(date "+%Y-%m-%d %H:%M:%S")" "$1" >> ${LOGFILE}
}
### START OF CHECKS ###
### START OF CHECKS ###
# Check if the backup folders exist and are writeable
if [ ! -d "${LOCALDIR}" ]; then
mkdir -p ${LOCALDIR}
@ -74,16 +80,14 @@ for BINARY in "${BINARIES[@]}"; do
exit 1
fi
done
### END OF CHECKS ###
STARTTIME=$(date +%s)
cd "${LOCALDIR}" || exit
### END OF CHECKS ###
cd ${LOCALDIR} || exit
log "Backup progress start"
### START OF MYSQL BACKUP ###
if [ -z ${MYSQL_ROOT_PASSWORD} ]; then
log "MySQL root password not set, MySQL back up skip"
else
@ -95,24 +99,39 @@ EOF
log "MySQL root password is incorrect. Please check it and try again"
exit 1
fi
if [ "${MYSQL_DATABASE_NAME[*]}" == "" ]; then
mysqldump -u root -p"${MYSQL_ROOT_PASSWORD}" --all-databases > "${SQLFILE}"
if [ $? -ne 0 ]; then
log "MySQL backup failed"
log "MySQL all databases backup failed"
exit 1
fi
log "MySQL dump completed"
log "MySQL dump file name: ${SQLFILE}"
log "MySQL all databases dump file name: ${SQLFILE}"
#Add MySQL backup dump file to BACKUP list
BACKUP=(${BACKUP[*]} ${SQLFILE})
else
for db in ${MYSQL_DATABASE_NAME[*]}
do
unset DBFILE
DBFILE="${TEMPDIR}${db}_${BACKUPDATE}.sql"
mysqldump -u root -p"${MYSQL_ROOT_PASSWORD}" ${db} > "${DBFILE}"
if [ $? -ne 0 ]; then
log "MySQL database name [${db}] backup failed, please check database name is correct and try again"
exit 1
fi
log "MySQL database name [${db}] dump file name: ${DBFILE}"
#Add MySQL backup dump file to BACKUP list
BACKUP=(${BACKUP[*]} ${DBFILE})
done
fi
log "MySQL dump completed"
fi
### END OF MYSQL BACKUP ###
### START OF TAR BACKUP ###
log "Backup progress start"
log "Tar backup file start"
tar -zcPf ${TARFILE} ${BACKUP[*]}
if [ $? -ne 0 ]; then
@ -129,10 +148,15 @@ if ${ENCRYPTFLG}; then
# Delete unencrypted tar
log "Delete unencrypted tar file"
rm -f "${TARFILE}"
rm -f ${TARFILE}
fi
# Delete MySQL temporary dump file
log "Delete MySQL temporary dump file"
rm -f ${TEMPDIR}*.sql
log "Backup progress complete"
if ${ENCRYPTFLG}; then
BACKUPSIZE=$(du -h ${TARFILE}.enc | cut -f1)
log "File name: ${TARFILE}.enc, File size: ${BACKUPSIZE}"
@ -141,7 +165,7 @@ else
log "File name: ${TARFILE}, File size: ${BACKUPSIZE}"
fi
# Transfer file to Google Drive
# Transfer backup file to Google Drive
# If you want to install gdrive command, please visit website:
# https://github.com/prasmussen/gdrive
# of cause, you can use below command to install it
@ -152,16 +176,61 @@ if [ ! "$(command -v "gdrive")" ]; then
log "gdrive is not installed"
log "File transfer skipped. please install it and try again"
else
log "Tranferring tar backup to Google Drive"
log "Tranferring backup file to Google Drive"
if ${ENCRYPTFLG}; then
gdrive upload --no-progress ${TARFILE}.enc >> ${LOGFILE}
else
gdrive upload --no-progress ${TARFILE} >> ${LOGFILE}
fi
log "File transfer completed"
log "Tranfer completed"
fi
### END OF TAR BACKUP ###
### START OF DELETE OLD BACKUP FILE###
getFileDate() {
unset FILEYEAR FILEMONTH FILEDAY FILETIME FILEDAYS FILEAGE
FILEYEAR=$(echo "$1" | cut -d_ -f2 | cut -c 1-4)
FILEMONTH=$(echo "$1" | cut -d_ -f2 | cut -c 5-6)
FILEDAY=$(echo "$1" | cut -d_ -f2 | cut -c 7-8)
FILETIME=$(echo "$1" | cut -d_ -f2 | cut -c 9-14)
if [[ "${FILEYEAR}" && "${FILEMONTH}" && "${FILEDAY}" && "${FILETIME}" ]]; then
#Approximate a 30-day month and 365-day year
FILEDAYS=$(( $((10#${FILEYEAR}*365)) + $((10#${FILEMONTH}*30)) + $((10#${FILEDAY})) ))
FILEAGE=$(( 10#${DAYS} - 10#${FILEDAYS} ))
return 0
fi
### END OF TAR BACKUP ###
return 1
}
AGEDAILIES=${LOCALAGEDAILIES}
DAY=$(date +%d)
MONTH=$(date +%m)
YEAR=$(date +%C%y)
#Approximate a 30-day month and 365-day year
DAYS=$(( $((10#${YEAR}*365)) + $((10#${MONTH}*30)) + $((10#${DAY})) ))
cd ${LOCALDIR} || exit
if ${ENCRYPTFLG}; then
LS=($(ls *.enc))
else
LS=($(ls *.tgz))
fi
for f in ${LS[*]}
do
getFileDate ${f}
if [ $? == 0 ]; then
if [[ ${FILEAGE} -gt ${AGEDAILIES} ]]; then
rm -f ${f}
log "Old backup file name:${f} has been deleted"
fi
fi
done
### END OF DELETE OLD BACKUP FILE###
ENDTIME=$(date +%s)