shell腳本實現自動化備份


1、備份規則:

  在生產環境中有若干服務器需要定時將服務器中應用程序,以及數據庫等進行備份。要求在本地服務器中保存近一周的備份,備份服務器中保存最近一月的備份文件。

                               

  以服務器A為例:在服務器A上有應用程序業務及(/ucap/UServer_V5.5.1_5002),有數據庫業務(mongodb和mysql)需要將以上三個業務進行備份,且在A服務器上創建backup-dir將備份文件存放在目錄下,每日凌晨進行備份,並將備份文件上傳至備份服務器(NFS),在平時備份服務器與服務器A不會有聯系,即只是在上傳備份文件,服務器A自動掛載備份文件共享目錄,備份完成卸載目錄。本地服務器保存近一周文件,備份服務器保存近30日備份文件。

2、具體實現如下步驟:

  

 1 #delet backup when is sunday   周日刪除上周文件。
 2 WEEK=$(date +%w)            
 3 BACKUP_ROOT=/backup
 4 BACKUP_DIR=/backup/backup_full_`date +%F`
 5 if [ -e $BACKUP_ROOT ]
 6         then
 7                 cd $BACKUP_ROOT  #如果/backup目錄存在,進入目錄。
 8      if [ $WEEK -eq 0 ]
 9                 then
10                         rm -rf $BACKUP_ROOT/* #如果進入是星期天(0表示星期天)執行刪除/backup下所有的備份文件。
11      fi
12      if [ $? -eq 0 ]     #判斷是否刪除成功
13           then
14               action "old-backup is remove." /bin/true
15      fi
16  
17 fi
18 ####mkdir backup-dir    #創建本地備份目錄。如果目錄存在則輸出目錄已經存
19 #在,否則表示不存在目錄則創建包含時間的目錄文件目錄
20 if [ -e $BACKUP_DIR ]    
21         then
22                 action "$BACKUP_DIR had been created."  /bin/true
23         else
24 #含當前時間的目錄文件實際可以用$BACKUP_DIR
25                 mkdir -p /backup/backup_full_`date +%F`
26                 action "$BACKUP_DIR  is creating."  /bin/true
27 fi     
本地創建備份目錄及周日刪除

  注意:周日刪除必須在創建當天目錄之前。因為一旦先創建目錄在刪除文件由於使用的是rm -rf $BACKUP_ROOT/*意思是將本地備份目錄下的所有文件刪除,所有新創建的目錄也會被刪除。因此應該執行先刪除再創建。

 1 ###tar backup  /ucap/UServer_V5.5.1_5002
 2 CMSP=/ucap
 3 cd $CMSP
 4 FILE_UCM=UServer_V5.5.1_5002
 5 #使用tar -g快照功能進行備份將快照snapshot.cms也存放在備份目錄下,然后將備份文件按照ip地址以及日期進行打包存放在備份目錄下的當日文件目錄下。
 6 tar -g $BACKUP_ROOT/snapshot.cms -cvf $BACKUP_DIR/${FILE_UCM}_ip_1.25_backup.$(date +%F).tar  $FILE_UCM >/dev/null 2>&1
 7 
 8 if [ $? = 0 ]    #判斷是否執行成功。
 9         then
10                 action "$FILE_UCM is backup." /bin/true
11         else
12                 action "$FILE_UCM is no been backuped." /bin/true
13 fi
14 ###tar backup  /ucap/mongodb
15 CMSP=/ucap
16 cd $CMSP
17 FILE_UCM=mongodb
18 #備份規則同上。
19 tar -g $BACKUP_ROOT/snapshot.cms -cvf $BACKUP_DIR/${FILE_UCM}_ip_1.25_backup.$(date +%F).tar  $FILE_UCM >/dev/null 2>&1
20 
21 if [ $? = 0 ]
22         then
23                 action "$FILE_UCM is backup." /bin/true
24         else
25                 action "$FILE_UCM is no been backuped." /bin/true
26 fi
備份文件及mongodb
 1 #parameter defined
 2 BAKDATE=`date +%F`
 3 MYSQL_PATH=/usr/local/mysql/bin
 4 MYUSER=root
 5 MYPASS="Ucap7890&*()"
 6 #DBNAME=`mysql -uroot -p'Ucap7890&*()' -e "show databases;"|grep  cpmdb`
 7 DATA_FILE=${BACKUP_DIR}/mysql_backup_${BAKDATE}.sql.gz
 8 [ ! -d  ${BACKUP_DIR} ] && mkdir -p ${BACKUP_DIR}
 9 #command defined
10 #定義mysqldump命令備份cpmdb庫並進行行鎖
11 MYSQL_DUMP="${MYSQL_PATH}/mysqldump -u$MYUSER -p$MYPASS -S /tmp/mysql.sock  -F -B cpmdb --single-transaction -e"
12 #backup command#執行命令並用GZI打包至備份目錄當前日期下的文件中。
13 ${MYSQL_DUMP} | gzip > $DATA_FILE
Mysql備份
 1 #####copye backup_tar to backup_server
 2 BACKUP_SERVER=23.202.1.23:/backup/Search   #NFS備份服務器
 3 LOCAL_DIR=/backup1                                     #本地掛載點
 4 RPC_PID=`/etc/init.d/rpcbind status|wc -l`         #判斷RPC
 5 MOUNT_STATUS=`df -h | grep backup1 | wc -l`  #判斷是否已經掛載
 6 BACKUP_FILEDIR=backup_full_`date +%F`
 7 SERVER_IP=`ifconfig| grep Bcast|awk '{print $2}'`  #本機IP
 8  if [ ! -e ${LOCAL_DIR} ]              #判斷掛載點目錄是否存在
 9       then 
10               mkdir ${LOCAL_DIR} 
11  fi
12 
13  if [ ${RPC_PID} -eq 0 ]               #判斷RPC-BIND是否啟動沒有啟動執行啟動
14       then
15               /etc/init.d/rpcbind start
16  fi
17         if [ $MOUNT_STATUS -eq 0 ]  #判斷NFS是否掛載沒有掛載執行掛載
18              then 
19                 mount -t nfs ${BACKUP_SERVER}    ${LOCAL_DIR}
20                 cd ${LOCAL_DIR}         #進入掛載目錄
21                 find ${LOCAL_DIR} -mtime +30 -exec rm{} \; #刪除30天以前文件
22               if [ `find ${LOCAL_DIR} -mtime +30 -exec ls{} \;|wc -l` -eq 0 ]    #如果沒有了30天前的文件將本地備份目錄下的備份文件備份至備份服務器。
23                         then
24                                 cd $BACKUP_ROOT
25                                 cp -r ${BACKUP_FILEDIR}  ${LOCAL_DIR}/
26               fi
27               if [ $? -eq 0 ]    #判斷執行是否成功,成功后卸載掛載目錄。
28                         then 
29                                 umount -l ${LOCAL_DIR}
30               fi
31               else      #表示已經掛載了NFS備份服務器執行刪除備份卸載。
32                  cd ${LOCAL_DIR}
33                  find ${LOCAL_DIR} -mtime +30 -exec rm{} \; 
34                  cd $BACKUP_ROOT
35                  cp -r ${BACKUP_FILEDIR}  ${LOCAL_DIR}/
36                  umount -l ${LOCAL_DIR}
37                  exit 1
38  fi
本地備份存放至本分服務器並刪除30日前的備份文件

3、整個腳本,由於本分腳本中含有數據庫密碼所有在最好做判斷只有root用戶才能執行腳本。

  1 #!/bin/bash
  2 ##########################################
  3 # this script is created by xuxuedong.                             #
  4 # e_mail:365***746@qq.com                                        #
  5 # qqinfo:365***746                                                     #
  6 # This is backup the fiel for  the server.                          #
  7 # version:1.1                                                               #
  8 ##########################################
  9 . /etc/init.d/functions
 10 #set env
 11 export PATH=$PATH:/bin:/sbin:/usr/sbin
 12 export LANG="zh_CN.GB18030"
 13 
 14 # Require root to run this script.  判斷是否是root用戶執行。
 15 if [[ "$(whoami)" != "root" ]]; then
 16   echo "Please run this script as root." >&2
 17   exit 1
 18 fi
 19 
 20 # Source function library.
 21 #. /etc/init.d/functions
 22 WEEK=$(date +%w)
 23 BACKUP_ROOT=/backup
 24 BACKUP_DIR=/backup/backup_full_`date +%F`
 25 if [ -e $BACKUP_ROOT ]
 26         then
 27                 cd $BACKUP_ROOT
 28      if [ $WEEK -eq 0 ]
 29                 then
 30                         rm -rf $BACKUP_ROOT/*
 31       fi
 32         if [ $? -eq 0 ]
 33                 then
 34                         action "old-backup is remove." /bin/true
 35         fi
 36           else
 37                 echo "Time is not, cannot be deleted." /bin/false
 38 
 39 fi
 40 ####mkdir backup-dir
 41 if [ -e $BACKUP_DIR ]
 42         then
 43                 action "$BACKUP_DIR had been created."  /bin/true
 44         else
 45                 mkdir -p /backup/backup_full_`date +%F`
 46                 action "$BACKUP_DIR  is creating."  /bin/true
 47 fi 
 48 ###tar backup  /ucap/UServer_V5.5.1_5002
 49 CMSP=/ucap
 50 cd $CMSP
 51 FILE_UCM=UServer_V5.5.1_5002
 52 tar -g $BACKUP_ROOT/snapshot.cms -cvf $BACKUP_DIR/${FILE_UCM}_ip_1.25_backup.$(date +%F).tar  $FILE_UCM >/dev/null 2>&1
 53 
 54 if [ $? = 0 ]
 55         then
 56                 action "$FILE_UCM is backup." /bin/true
 57         else
 58                 action "$FILE_UCM is no been backuped." /bin/true
 59 fi
 60 ###tar backup  /ucap/mongodb
 61 CMSP=/ucap
 62 cd $CMSP
 63 FILE_UCM=mongodb
 64 tar -g $BACKUP_ROOT/snapshot.cms -cvf $BACKUP_DIR/${FILE_UCM}_ip_1.25_backup.$(date +%F).tar  $FILE_UCM >/dev/null 2>&1
 65 
 66 if [ $? = 0 ]
 67         then
 68                 action "$FILE_UCM is backup." /bin/true
 69         else
 70                 action "$FILE_UCM is no been backuped." /bin/true
 71 fi
 72 #parameter defined
 73 BAKDATE=`date +%F`
 74 MYSQL_PATH=/usr/local/mysql/bin
 75 MYUSER=root
 76 MYPASS="Ucap7890&*()"
 77 #DBNAME=`mysql -uroot -p'Ucap7890&*()' -e "show databases;"|grep  cpmdb`
 78 DATA_FILE=${BACKUP_DIR}/mysql_backup_${BAKDATE}.sql.gz
 79 [ ! -d  ${BACKUP_DIR} ] && mkdir -p ${BACKUP_DIR}
 80 #command defined
 81 MYSQL_DUMP="${MYSQL_PATH}/mysqldump -u$MYUSER -p$MYPASS -S /tmp/mysql.sock  -F -B cpmdb --single-transaction -e"
 82 #backup command
 83 ${MYSQL_DUMP} | gzip > $DATA_FILE
 84 
 85 #####copye backup_tar to backup_server
 86 BACKUP_SERVER=23.202.1.23:/backup/Search
 87 LOCAL_DIR=/backup1
 88 RPC_PID=`/etc/init.d/rpcbind status|wc -l`
 89 MOUNT_STATUS=`df -h | grep backup1 | wc -l`
 90 BACKUP_FILEDIR=backup_full_`date +%F`
 91 SERVER_IP=`ifconfig| grep Bcast|awk '{print $2}'`
 92  if [ ! -e ${LOCAL_DIR} ]
 93       then 
 94               mkdir ${LOCAL_DIR} 
 95  fi
 96 
 97  if [ ${RPC_PID} -eq 0 ]
 98       then
 99               /etc/init.d/rpcbind start
100  fi
101         if [ $MOUNT_STATUS -eq 0 ]
102              then 
103                 mount -t nfs ${BACKUP_SERVER}    ${LOCAL_DIR}
104                 cd ${LOCAL_DIR}
105                 find ${LOCAL_DIR} -mtime +30 -exec rm{} \;
106               if [ `find ${LOCAL_DIR} -mtime +30 -exec ls{} \;|wc -l` -eq 0 ]
107                         then
108                                 cd $BACKUP_ROOT
109                                 cp -r ${BACKUP_FILEDIR}  ${LOCAL_DIR}/
110               fi
111               if [ $? -eq 0 ]
112                         then 
113                                 umount -l ${LOCAL_DIR}
114               fi
115               else
116                  cd ${LOCAL_DIR}
117                  find ${LOCAL_DIR} -mtime +30 -exec rm{} \; 
118                  cd $BACKUP_ROOT
119                  cp -r ${BACKUP_FILEDIR}  ${LOCAL_DIR}/
120                  umount -l ${LOCAL_DIR}
121                  exit 1
122  fi
所有腳本

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM