Add delete old file feature

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

119
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 [[ $EUID -ne 0 ]] && echo 'Error: This script must be run as root!' && exit 1
### START OF CONFIG ### ### START OF CONFIG ###
# Encrypt flag(true:encrypt, false:not encrypt) # Encrypt flag(true:encrypt, false:not encrypt)
ENCRYPTFLG=true 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 # OPTIONAL: If you want MySQL to be backed up, enter the root password below
MYSQL_ROOT_PASSWORD="" 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 # Below is a list of files and directories that will be backed up in the tar backup
# For example: # For example:
# File: /data/www/default/test.tgz # File: /data/www/default/test.tgz
@ -47,15 +50,18 @@ TARFILE="${LOCALDIR}""$(hostname)"_"${BACKUPDATE}".tgz
# Backup MySQL dump file name # Backup MySQL dump file name
SQLFILE="${TEMPDIR}mysql_${BACKUPDATE}.sql" SQLFILE="${TEMPDIR}mysql_${BACKUPDATE}.sql"
# Number of days to store daily local backups
LOCALAGEDAILIES="7"
### END OF CONFIG ### ### END OF CONFIG ###
log() { log() {
echo "$(date "+%Y-%m-%d %H:%M:%S")" "$1" echo "$(date "+%Y-%m-%d %H:%M:%S")" "$1"
echo -e "$(date "+%Y-%m-%d %H:%M:%S")" "$1" >> ${LOGFILE} 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 # Check if the backup folders exist and are writeable
if [ ! -d "${LOCALDIR}" ]; then if [ ! -d "${LOCALDIR}" ]; then
mkdir -p ${LOCALDIR} mkdir -p ${LOCALDIR}
@ -74,16 +80,14 @@ for BINARY in "${BINARIES[@]}"; do
exit 1 exit 1
fi fi
done done
### END OF CHECKS ###
STARTTIME=$(date +%s) STARTTIME=$(date +%s)
cd ${LOCALDIR} || exit
cd "${LOCALDIR}" || exit log "Backup progress start"
### END OF CHECKS ###
### START OF MYSQL BACKUP ### ### START OF MYSQL BACKUP ###
if [ -z ${MYSQL_ROOT_PASSWORD} ]; then if [ -z ${MYSQL_ROOT_PASSWORD} ]; then
log "MySQL root password not set, MySQL back up skip" log "MySQL root password not set, MySQL back up skip"
else else
@ -95,24 +99,39 @@ EOF
log "MySQL root password is incorrect. Please check it and try again" log "MySQL root password is incorrect. Please check it and try again"
exit 1 exit 1
fi fi
mysqldump -u root -p"${MYSQL_ROOT_PASSWORD}" --all-databases > "${SQLFILE}"
if [ $? -ne 0 ]; then
log "MySQL backup failed"
exit 1
fi
log "MySQL dump completed"
log "MySQL dump file name: ${SQLFILE}"
#Add MySQL backup dump file to BACKUP list
BACKUP=(${BACKUP[*]} ${SQLFILE})
fi
if [ "${MYSQL_DATABASE_NAME[*]}" == "" ]; then
mysqldump -u root -p"${MYSQL_ROOT_PASSWORD}" --all-databases > "${SQLFILE}"
if [ $? -ne 0 ]; then
log "MySQL all databases backup failed"
exit 1
fi
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 ### ### END OF MYSQL BACKUP ###
### START OF TAR BACKUP ### ### START OF TAR BACKUP ###
log "Backup progress start"
log "Tar backup file start" log "Tar backup file start"
tar -zcPf ${TARFILE} ${BACKUP[*]} tar -zcPf ${TARFILE} ${BACKUP[*]}
if [ $? -ne 0 ]; then if [ $? -ne 0 ]; then
@ -129,10 +148,15 @@ if ${ENCRYPTFLG}; then
# Delete unencrypted tar # Delete unencrypted tar
log "Delete unencrypted tar file" log "Delete unencrypted tar file"
rm -f "${TARFILE}" rm -f ${TARFILE}
fi fi
# Delete MySQL temporary dump file
log "Delete MySQL temporary dump file"
rm -f ${TEMPDIR}*.sql
log "Backup progress complete" log "Backup progress complete"
if ${ENCRYPTFLG}; then if ${ENCRYPTFLG}; then
BACKUPSIZE=$(du -h ${TARFILE}.enc | cut -f1) BACKUPSIZE=$(du -h ${TARFILE}.enc | cut -f1)
log "File name: ${TARFILE}.enc, File size: ${BACKUPSIZE}" log "File name: ${TARFILE}.enc, File size: ${BACKUPSIZE}"
@ -141,7 +165,7 @@ else
log "File name: ${TARFILE}, File size: ${BACKUPSIZE}" log "File name: ${TARFILE}, File size: ${BACKUPSIZE}"
fi fi
# Transfer file to Google Drive # Transfer backup file to Google Drive
# If you want to install gdrive command, please visit website: # If you want to install gdrive command, please visit website:
# https://github.com/prasmussen/gdrive # https://github.com/prasmussen/gdrive
# of cause, you can use below command to install it # 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 "gdrive is not installed"
log "File transfer skipped. please install it and try again" log "File transfer skipped. please install it and try again"
else else
log "Tranferring tar backup to Google Drive" log "Tranferring backup file to Google Drive"
if ${ENCRYPTFLG}; then if ${ENCRYPTFLG}; then
gdrive upload --no-progress ${TARFILE}.enc >> ${LOGFILE} gdrive upload --no-progress ${TARFILE}.enc >> ${LOGFILE}
else else
gdrive upload --no-progress ${TARFILE} >> ${LOGFILE} gdrive upload --no-progress ${TARFILE} >> ${LOGFILE}
fi 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
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 fi
### END OF TAR BACKUP ### 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) ENDTIME=$(date +%s)