大家可能为了数据安全,每晚都会进行备份操作。特别可能是数据库上有几个用户的情况,如果使用物理备份会将整个库进行还原。如果只想备份单独的模式或者用户可以使用以下脚本。
schname=BAK1
filename=$schname-$(date '+%Y%m%d%H%M%S')
echo $filename
ftp_user="username"
ftp_password="password"
ftp_host="ip"
dst_dir="/home/dmdba/bak"
function auto_ftp
{
ftp -niv << EOF
open $ftp_host
user $ftp_user $ftp_password
cd $dst_dir
put "$filename".tar.gz
bye
EOF
}
## 设置环境变量
export DM_HOME=/home/dmdba/dmdbms/bin
export PATH=$DM_HOME/bin:$DM_HOME/tool:$PATH:$HOME/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$DM_HOME/bin
## 导出用户BAK1的数据
cd /home/dmdba/dmdbms/bin/
./dexp BAK1/1234567890@ip:port_num owner=$schname directory=/dw/dmbak file=$filename.dmp log=$filename.log parallel=4
## 压缩备份文件和日志文件然后删除dmp和log文件
cd /dw/dmbak
tar zcvf $filename.tar.gz *.dmp *.log --remove-files
##传输备份文件
auto_ftp "$filename".tar.gz
## 保存30天备份文件,删除29天之前备份
find /dw/dmbak/ -mtime +29 -name "*.tar.gz" -exec rm -rf {} \;
设置好备份频率
* 3 * * * /home/dmdba/shell/bak.sh >> /home/dmdba/shell/dmbak.log 2>&1