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 <<FTPIT >> $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 <<FTPIT >> $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]" "[\012*]" |sed -n '2p'`
FILEDAY=`echo $1 |sed 's/.tar.z//g'|tr -cs "[0-9]" "[\012*]" |sed -n '3p'`
FILEYEAR=`echo $1 |sed 's/.tar.z//g'|tr -cs "[0-9]" "[\012*]" |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]" "[\012*]"`
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