浏览代码

Add delete old file feature

Teddysun 9 年之前
父节点
当前提交
c1da0b7595
共有 1 个文件被更改,包括 92 次插入23 次删除
  1. 92 23
      backup.sh

+ 92 - 23
backup.sh

@@ -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
-
-### END OF CHECKS ###
+cd ${LOCALDIR} || exit
+log "Backup progress start"
 
 
 
 
 ### 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
+
+    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
     fi
+
     log "MySQL dump completed"
     log "MySQL dump completed"
-    log "MySQL dump file name: ${SQLFILE}"
-    #Add MySQL backup dump file to BACKUP list
-    BACKUP=(${BACKUP[*]} ${SQLFILE})
-fi
 
 
+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,18 +176,63 @@ 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
 fi
-
 ### END OF TAR BACKUP ###
 ### 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
+
+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)
 DURATION=$((ENDTIME - STARTTIME))
 DURATION=$((ENDTIME - STARTTIME))
 log "All done"
 log "All done"