shell如何实现自动记录备份次数??

shell如何实现自动记录备份次数??

# 这基本是我的真实备份shell的框架,实际使用中我的机器有四个数据库,并有日初、
# 日终的处理,当然也只是把下面的函数多几回调用而已。
# 启运方式使用cron机制自动启动

# 我没有主刻意去实现楼主要求的记数工作,因为我实不太明白他具体的要求、目的,
# 但我想看了下的shell,增个小功能不会太难的。

# 我懒,所以没有给各位朋友Email,大家自己看吧!


# 备份主shell   文件名:bk.sh


HOMEDIR=/u1/autodbbk/bkdir                # 自动备份主程序目录
INFORMIXNAME=informix                        # informix用户名

TODAY=`date '+%Y%m%d'`                        # 备份日期
echo $TODAY $HOMEDIR >;today                # 日期文件

BKDIR=/u3/dbbk                                # 备份目录
LOGNAME=$BKDIR/log/$TODAY.bk.log        # 备份日志

fun_dbexport()
{
  # DBNAME=$1                                # 数据库名
  # MAGNAME=$2                                # 管理用户
  echo "/nbk$1 start ......................................................../n"
  date '+%Y%m%d-%H:%M:%S'
  set -x

  su - $INFORMIXNAME -c "onmode -F"        # 释放未使用的内存
  su - $INFORMIXNAME -c "ontape -s -L 0"
  rm -r $BKDIR/$1.exp $BKDIR/dbexport.$1
  su - $2 -c "dbexport $1 -ss -o $BKDIR" >;$BKDIR/dbexport.$1
  sleep 10

  FLAG=`grep "dbexport completed" $BKDIR/dbexport.$1`
  if [ -z "$FLAG"  ]
    then echo "$1 dbexport ERR!"
    else echo "$1 dbexport OK!"

  fi
  set +x
  date '+%Y%m%d-%H:%M:%S'
  echo "/nbk$1 end ........................................................./n"
}

fun_compress()
{
  # DBNAME=$1
  echo "/ncompress $1 start ................................................/n"
  date '+%Y%m%d-%H:%M:%S'
  cd $BKDIR
  echo "compress $1.exp/*"
  compress $1.exp/*
  echo "tar cvfm $BKDIR/data/$TODAY.$1.ax.tar $1.exp dbexport.$1"
  tar cvfm $BKDIR/data/$TODAY.$1.ax.tar $1.exp dbexport.$1
  date '+%Y%m%d-%H:%M:%S'
  echo "/ncompress $1 end ................................................../n"
}

fun_ftp()
{
  # DBNAME=$1
  echo "/nftp $1 start ...................................................../n"
  date '+%Y%m%d-%H:%M:%S'
  set -x
  chmod 644 $BKDIR/data/$TODAY.$1.*
  # 做以下 cp 及传输是因为要与另一服务器备份数据对传数据,并互相异机备份,
  # 以便达到两台机器的硬盘、磁带都有备份。
  cp $BKDIR/data/$TODAY.$1.* $BKDIR/tar
  cd $BKDIR/tar

ftp -n 192.1.41.67<<!
user down abcdefg
bin
cd /u3/dbbk/tar
put $TODAY.$1.ax.tar
!

  set +x
  date '+%Y%m%d-%H:%M:%S'
  echo "/nftp $1 end ......................................................./n"
}

fun_dbchk()
{
  # DBNAME=$1                           # 数据库名
  echo "/noncheck start ..................................................../n"
  date '+%Y%m%d-%H:%M:%S'
  su - $INFORMIXNAME -c "$HOMEDIR/update.sh $1"
  su - $INFORMIXNAME -c "oncheck -cDI $1"
  date '+%Y%m%d-%H:%M:%S'
  echo "/noncheck end ....................................................../n"
}

fun_deldbfile()
{
  # 此函数专门为自动删除备份目录中超过指定天数的文件而设计
  if [ $# -lt 2 ]
    then echo "格式:fun_deldbfile 数据库名 保留天数"
    else
        # DBNAME=$1
        # MAXDAY=$2
        N=`ls $BKDIR/data/*.$1.ax.tar|sort|wc -l`        # 文件总数

        if [ $N -gt $2 ]
         then        M=`expr $N - $2`
                ls $BKDIR/data/*$1.ax.tar|sort|sed -n "1,$M"p | /
                   sed "s/^/rm /" >;tmp_dir.sh
                sh tmp_dir.sh; rm tmp_dir.sh
        fi
  fi
}

fun_wrttyp()
{
  FILE=`echo $1 | sed "s|/g"`
  if [ $# -lt 1 ]
    then        echo "格式:wrtty 文本文件名"
    else
        who |awk -F ' ' '{print $2}'|sed "s/^/cat $FILE >; //dev///" | /
             sed "s/|g" >; tmp_wrtty.sh
        sleep 1
        sh tmp_wrtty.sh; rm tmp_wrtty.sh
  fi
}

fun_killterm()
{
  echo "/nkillterm start .................................................../n"
  date '+%Y%m%d-%H:%M:%S'
  set -x

  # 根据informix用户的环境变量设置环境变量,一定要保证informix环境变量正确

  INFORMIXNAME=informix                                        # informix用户名
  INFORMIXDIR=`su - $INFORMIXNAME -c env|grep INFORMIXDIR|cut -f2 -d'='`
  INFORMIXSERVER=`su - $INFORMIXNAME -c env|grep INFORMIXSERVER|cut -f2 -d'='`
  ONCONFIG=`su - $INFORMIXNAME -c env|grep ONCONFIG|cut -f2 -d'='`
  PATH=$PATHINFORMIXDIR/bin               
  export INFORMIXDIR INFORMIXSERVER ONCONFIG PATH

  who -ux; w; onstat -u

  #杀telnet终端
  cd $HOMEDIR
  who -u|grep ttyp|awk -F ' ' '{printf "kill -9  %s/n",$7; }'        >;tmp_killt.sh
  sh  tmp_killt.sh
  cat tmp_killt.sh
  rm  tmp_killt.sh
  sleep 30
  date '+%Y%m%d-%H:%M:%S'

  #杀informix线索,因此shell后台执行,须先设置informix环境变量
  echo "INFORMIXDIR=$INFORMIXDIR"        >;  tmp_killu.sh
  echo "INFORMIXSERVER=$INFORMIXSERVER"        >;>; tmp_killu.sh
  echo "ONCONFIG=$ONCONFIG"                >;>; tmp_killu.sh
  echo "ATH=$PATH"                        >;>; tmp_killu.sh
  echo "export PATH INFORMIXDIR INFORMIXSERVER ONCONFIG">;>; tmp_killu.sh
  onstat -u
  onstat -u|sed -n "6,$"p|grep -v "maximum concurrent"|grep -v "^$" | /
      grep -v " root "|grep -v " informix " | /
      awk -F ' ' '{printf "onmode -z %s/n",$3;}' >;>; tmp_killu.sh

  sh  tmp_killu.sh
  cat tmp_killu.sh
  rm  tmp_killu.sh
  sleep 10
  who -ux; w; onstat -u

  set +x
  date '+%Y%m%d-%H:%M:%S'
  echo "/nkillterm end ...................................................../n"
  # 这段的shell的正确与否有待高手指点
}

fun_main_after()
{
  # DBNAME=$1
# 后续处理:备份压压宿、数据传送、优化及检查、删除多余的备份
  fun_compress  $1    2>;&1 | tee -a $LOGNAME
  fun_ftp       $1    2>;&1 | tee -a $LOGNAME
  fun_dbchk     $1    2>;&1 | tee -a $LOGNAME
  fun_deldbfile $1 25 2>;&1 | tee -a $LOGNAME
}

main()
{
  echo "/n自动备份启动 ......................................../n"|tee $LOGNAME
  date '+%Y%m%d-%H:%M:%S' | tee -a $LOGNAME
# 初始处理:发布通告、杀终端、删除tar目录中的旧备份
  fun_wrttyp $HOMEDIR/tz/tz0                # 把tz0文件的内容写到当前所有线ttyp
  fun_killterm           2>;&1 | tee -a $LOGNAME
  rm $BKDIR/tar/*tar


# 备份备理:执行dbexport
  fun_dbexport    data1    ocbps   2>;&1 | tee -a $LOGNAME


# 后续处理:备份压缩、数据传送、优化及检查、删除多余的备份
  fun_main_after  data1


# 写入数据到磁带
  echo "tar c8vm $TODAY.* /n"
  # 下面sleep两小时,是为了等待另一台机器的数据备份完成后传过来,再一起tar  
  cd $BKDIR/tar; sleep 7200; tar c8vm $TODAY.*                # tar到磁带
  date '+%Y%m%d-%H:%M:%S' | tee -a $LOGNAME
  echo "/n自动备份结束 ...................................../n"|tee -a $LOGNAME
}

main                                # 执行备份主程序




# 数据库优化shell   文件名:update.sh

#此文件为优化数据库用,它被系统自动备调用,请不要删除。
#格式:update.sh 数据库名
  echo "/nupdate $1 start .................................................../n"
  date '+%Y%m%d-%H:%M:%S'
  set -x
dbaccess $1 << !
        update statistics ;
!
  set +x
  date '+%Y%m%d-%H:%M:%S'
  echo "/nupdate $1 end ...................................................../n
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值