wasbakup.sh:备份数据库和应用并上传到FTP
#!/bin/bash #备份目录变量 BACKUPDIR=”/home/WasBackup” #WAS起停脚本目录 WASBIN=”/opt/WebSphere/AppServer/bin” #IBMHTTP 起停脚本目录 IBMHTTP=”/opt/IBMHttpServer/bin” #WAS用户名和密码 USER=”wpsbind” PASS=”welcome” #生成日志 LOG=”WasBackup`date +”%m-%d-%y”`.log” #生成备份文件 FILE=”WasBak`date +”%m-%d-%y”`.tar.z” ORAFILE=”Oradatabak`date +”%m-%d-%y”`.tar.z” #设置ORACLE参数 ORACLE_HOME=/home/oracle/product/9.2.4 ORADATAFILE=/home/oracle/oradata ORAALLFILE=/home/oracle FLAGUSER=”sys” FLAGTNSNAME=”wpsdb” FLAGPASS=”welcomeoracle” WARING=”The Db Not Run” #FTP 设置 IP=”122.120.1.90″ FTPUSER=”ftpbak” FTPPASS=”welcome” FTPROOT=”coldbak” FTPDIR=PRODWas`date +”%Y-%m-%d”` IP1=”122.120.1.21″ FTPUSER1=”ftpbak” FTPPASS1=”welcome” FTPDIR1=PRODWas`date +”%Y-%m-%d”` echo “ =============================== ” echo “ | Begin Backup WAS | ” echo “ =============================== ” #JUDGERUN=`ps -ef |grep WasBackup.sh |grep /bin/bash` #WHORUN=`ps -ef |grep WasBackup.sh |grep /bin/bash |awk ‘{ print $6 }’` #if [ "${JUDGERUN}" != "" ]; then # echo “This shell is already run by IP:`who |grep $WHORUN |awk ‘{print $6}’`” # exit 0 #fi if [ ! -d $BACKUPDIR ];then mkdir $BACKUPDIR fi cd $WASBIN #./serverStatus.sh -all -username $USER -password $PASS >> $BACKUPDIR/$LOG 2>>&1 echo “………….Stop All Services………………” echo “=============STOP server1===================” > $BACKUPDIR/$LOG ./stopServer.sh server1 -username $USER -password $PASS >> $BACKUPDIR/$LOG 2>>$BACKUPDIR/$LOG echo “=================END STOP===================” >> $BACKUPDIR/$LOG echo “” >>$BACKUPDIR/$LOG echo “=============STOP WebSphere_Portal==========” >> $BACKUPDIR/$LOG ./stopServer.sh WebSphere_Portal -username $USER -password $PASS >> $BACKUPDIR/$LOG 2>>$BACKUPDIR/$LOG echo “=============END STOP=======================” >> $BACKUPDIR/$LOG echo “” >>$BACKUPDIR/$LOG cd $IBMHTTP echo “=============STOP IBMHTTPServer=============” >> $BACKUPDIR/$LOG ./apachectl stop >> $BACKUPDIR/$LOG 2>>$BACKUPDIR/$LOG echo “=============END STOP=======================” >> $BACKUPDIR/$LOG 2>>$BACKUPDIR/$LOG echo “” >>$BACKUPDIR/$LOG DBRUNWPSDB=`ps -ef |grep ora_ |awk ‘{print $8 }’ |sed ‘s/^ora_//g’|sed ‘s/^…..//g’|grep wpsdb` if [ "${DBRUNWPSDB}" = "" ]; then echo “” >>$BACKUPDIR/$LOG echo “*******************************” >> $BACKUPDIR/$LOG 2>>$BACKUPDIR/$LOG echo $WARING >> $BACKUPDIR/$LOG 2>>$BACKUPDIR/$LOG echo “*******************************” >> $BACKUPDIR/$LOG 2>>$BACKUPDIR/$LOG else echo “” >>$BACKUPDIR/$LOG echo “======================================” >> $BACKUPDIR/$LOG 2>>$BACKUPDIR/$LOG echo ” ” su – oracle -c “sqlplus /nolog @$ORACLE_HOME/mysql/stopdb.sql $FLAGUSER $FLAGTNSNAME $FLAGPASS” >> $BACKUPDIR/$LOG 2>>$BACKUPDIR/$LOG echo “======================================” >> $BACKUPDIR/$LOG 2>>$BACKUPDIR/$LOG fi echo “” >>$BACKUPDIR/$LOG echo “==============Stop Listener====================” >> $BACKUPDIR/$LOG 2>>$BACKUPDIR/$LOG su – oracle -c “lsnrctl stop” >> $BACKUPDIR/$LOG 2>>$BACKUPDIR/$LOG echo “==============END==============================” >> $BACKUPDIR/$LOG 2>>$BACKUPDIR/$LOG echo “…………..ALL Services Stopped………………….” cd echo “” >>$BACKUPDIR/$LOG if [ -f $BACKUPDIR/$FILE ]; then echo “The $FILE Exist!!” else echo “……………Starting Backup Was………………” echo “============Starting Backup WAS============” >> $BACKUPDIR/$LOG 2>>$BACKUPDIR/$LOG date +”%Y年-%m月-%d日:%T:Begin backup WAS” >> $BACKUPDIR/$LOG 2>>$BACKUPDIR/$LOG tar cvfz $BACKUPDIR/$FILE /opt/IBMHttpServer/ /opt/mqm/ /opt/WebSphere/ /opt/wemps/ /var/mqm/ /var/wemps/ >> $BACKUPDIR/$LOG 2>>$BACKUPDIR/$LOG date +”%Y年-%m月-%d日:%T:End backup ” >> $BACKUPDIR/$LOG 2>>$BACKUPDIR/$LOG echo “============End Backup Was=================” >> $BACKUPDIR/$LOG 2>>$BACKUPDIR/$LOG echo “……………End WAS Backup……………………” fi echo “” >>$BACKUPDIR/$LOG if [ -f $BACKUPDIR/$ORAFILE ]; then echo “The $ORAFILE Exist!!” else echo “……………Starting Backup Oracle Datafile…………” echo “===============Starting Backup Oracle Data================” >> $BACKUPDIR/$LOG 2>>$BACKUPDIR/$LOG date +”%Y年-%m月-%d日:%T:Begin backup Oracle Datafile” >> $BACKUPDIR/$LOG 2>>$BACKUPDIR/$LOG tar cvfz $BACKUPDIR/$ORAFILE $ORADATAFILE >> $BACKUPDIR/$LOG 2>>$BACKUPDIR/$LOG date +”%Y年-%m月-%d日:%T:End backup ” >> $BACKUPDIR/$LOG 2>>$BACKUPDIR/$LOG echo “===============End DB Backup================” >> $BACKUPDIR/$LOG 2>>$BACKUPDIR/$LOG echo “……………End Db Backup…………………………” fi echo “……………..Starting All Services………………” echo “=================Starting ORACLE =================” >> $BACKUPDIR/$LOG 2>>$BACKUPDIR/$LOG DBRUNWPSDB=`ps -ef |grep ora_ |awk ‘{print $8 }’ |sed ‘s/^ora_//g’|sed ‘s/^…..//g’|grep wpsdb` if [ "${DBRUNWPSDB}" = "" ]; then su – oracle -c “sqlplus /nolog @$ORACLE_HOME/mysql/startdb.sql $FLAGUSER $FLAGTNSNAME $FLAGPASS” >> $BACKUPDIR/$LOG 2>>$BACKUPDIR/$LOG else echo “The db have started!!” >> $BACKUPDIR/$LOG 2>>$BACKUPDIR/$LOG fi echo “=================END DB Start======================” >> $BACKUPDIR/$LOG 2>>$BACKUPDIR/$LOG cd $WASBIN echo “=================Starting server1==================” >> $BACKUPDIR/$LOG 2>>$BACKUPDIR/$LOG ./startServer.sh server1 >> $BACKUPDIR/$LOG 2>>$BACKUPDIR/$LOG echo “=================END server1 Start=================” >> $BACKUPDIR/$LOG 2>>$BACKUPDIR/$LOG echo “”>>$BACKUPDIR/$LOG 2>>$BACKUPDIR/$LOG echo “=================Starting WebSPhere_Portal=========” >> $BACKUPDIR/$LOG 2>>$BACKUPDIR/$LOG ./startServer.sh WebSphere_Portal >> $BACKUPDIR/$LOG 2>>$BACKUPDIR/$LOG echo “=================END WebSphere_Portal==============” >> $BACKUPDIR/$LOG 2>>$BACKUPDIR/$LOG cd $IBMHTTP echo “=================Starting IBMHTTPServer==================” >> $BACKUPDIR/$LOG 2>>$BACKUPDIR/$LOG ./apachectl start>> $BACKUPDIR/$LOG 2>>$BACKUPDIR/$LOG echo “=================END IBMHTTPserver Start=================” >> $BACKUPDIR/$LOG 2>>$BACKUPDIR/$LOG cd #产生一个日期记录文件 DATELOG=`date +”%m-%d-%y”` echo $DATELOG >dateflag.txt # echo “………………FTP Trans $IP………………..” date +”%Y年-%m月-%d日:%T:FTP $IP Trans Begin…” >> $BACKUPDIR/$LOG 2>>$BACKUPDIR/$LOG ftp -d -i -n > $BACKUPDIR/$LOG 2>>$BACKUPDIR/$LOG open $IP user $FTPUSER $FTPPASS cd $FTPROOT mkdir $FTPDIR cd $FTPDIR bi lcd $BACKUPDIR put $FILE put $ORAFILE put $LOG bye FTPIT date +”%Y年-%m月-%d日:%T:FTP $IP Trans END…” >> $BACKUPDIR/$LOG 2>>$BACKUPDIR/$LOG # #echo “………………FTP Trans $IP1………………..” #date +”%Y年-%m月-%d日:%T:FTP $IP1 Trans Begin…” >> $BACKUPDIR/$LOG 2>>$BACKUPDIR/$LOG #ftp -d -i -n > $BACKUPDIR/$LOG 2>>$BACKUPDIR/$LOG #open $IP1 #user $FTPUSER1 $FTPPASS1 #mkdir $FTPDIR1 #cd $FTPDIR1 #bi #lcd $BACKUPDIR #put $FILE #put $ORAFILE #put $LOG #bye #FTPIT #date +”%Y年-%m月-%d日:%T:FTP $IP1 Trans END…” >> $BACKUPDIR/$LOG 2>>$BACKUPDIR/$LOG #echo “………………Trans Finish…………….”>>$BACKUPDIR/$LOG 2>>$BACKUPDIR/$LOG
del_files.sh:删除前一天备份的数据,加到crontab中,可以在备份前执行
#!/bin/sh ########################################### #此程序是删除历史文件两天前的,避免人为删除错误 #做此程序得目的是当删除历史文件得时候 #只保留wasbackup.sh最近2天备份的文件和之后的arc日志备份 #人为的删除可能会将之后的arc删除,使备份无意义 # # author songrh ########################################### #要删除文件的目录 HOMEDIR=”/home/WasBackup” #磁盘使用 USEDISK=`df -k |sed -n ‘/home/’p | awk ‘{print $5}’ |sed ‘s/%//’` if [ "$USEDISK" -ge "85" ]; then #提取日期 MONTH=`date +”%m”` DAY=`date +”%d”` YEAR=`date +”%y”` MONTH=`expr $MONTH + 0` DAY=`expr $DAY + 0 – 2` YEAR=`expr $YEAR + 0` CURRENTWEEK=`date +”%a”` #这里是为了最大称度增强通用性设置得变量,但是郁闷得是后面得字符串处理还是出现了指定得情况(*.tar.z),以后再研究吧 ARCFILE=”Prodarclog” WASFILE=”WasBak” ORAFILE=”Oradatabak” LOGFILE=”Prodarcbak” #COUNTNUM=0 #定义一个函数做比较,参数顺序$files $YEAR $MONTH $DAY del_files () { FILEMONTH=`echo $1 |sed ‘s/.tar.z//g’|tr -cs “[0-9]” “[ 12*]” |sed -n ’2p’` FILEDAY=`echo $1 |sed ‘s/.tar.z//g’|tr -cs “[0-9]” “[ 12*]” |sed -n ’3p’` FILEYEAR=`echo $1 |sed ‘s/.tar.z//g’|tr -cs “[0-9]” “[ 12*]” |sed -n ’4p’` #比较月份和天数决定删除的文件 FILEMONTH=`expr $FILEMONTH + 0` FILEDAY=`expr $FILEDAY + 0` FILEYEAR=`expr $FILEYEAR + 0` #echo $FILEMONTH $FILEDAY $FILEYEAR if [ "$FILEYEAR" -lt "$2" ]; then DELFILE=`echo $1 |sed ‘s/.tar.z//g’` echo “…正在删除文件$DELFILE……..” >> del_files_list.txt rm -rf $HOMEDIR/$DELFILE* else if [ "$FILEMONTH" -lt "$3" ]; then DELFILE=`echo $1 |sed ‘s/.tar.z//g’` echo “…正在删除文件$DELFILE……..” >> del_files_list.txt rm -rf $HOMEDIR/$DELFILE* else if [ "$FILEMONTH" -eq "$3" ]; then if [ "$FILEDAY" -lt "$4" ]; then DELFILE=`echo $1 |sed ‘s/.tar.z//g’` echo “…正在删除文件$DELFILE……..” >> del_files_list.txt rm -rf $HOMEDIR/$DELFILE* fi fi fi fi } #处理数据 echo “==========`date +”%y-%m-%d”`执行删除===============”>>del_files_list.txt for files in `ls -l /home/WasBackup/*.tar*|awk ‘{print $9}’|sed ‘s//.*/*///’` do #COUNTNUM=`expr $COUNTNUM + 1` #echo $COUNTNUM file=`echo $files |sed ‘s/.tar.z//g’|tr -cs “[a-z][A-Z]” “[ 12*]“` case $file in $ARCFILE) del_files $files $YEAR $MONTH $DAY ;; $WASFILE) #if [ "$CURRENTWEEK" = "Wed" ]; then del_files $files $YEAR $MONTH $DAY #fi ;; $ORAFILE) #if [ "$CURRENTWEEK" = "Wed" ]; then del_files $files $YEAR $MONTH $DAY #fi ;; *) echo “” ;; esac done echo “==========End===========================”>>del_files_list.txt else exit 1 fi