进入后台如何备份shell
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了进入后台如何备份shell相关的知识,希望对你有一定的参考价值。
进入后台怎么备份shell数据库?在哪备份?我怎么找不到?要详细的!可截图
参考技术A 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"
后台导入SqlYog备份文件
SqlYog导出的sql备份文件通过shell导入的方法:
写sh:
#!/bin/bash
mysql -u用户 -p密码 <<EOF
use 数据库名;
source /home/用户/sql文件路径
exit;
EOF
然后使用:
nohup 上面sh文件路径 >> load.log 2>&1 &
执行后台导入即可
以上是关于进入后台如何备份shell的主要内容,如果未能解决你的问题,请参考以下文章