定期备份kingbase数据库
原文链接:https://blog.csdn.net/weixin_47387140/article/details/128584537
1.书写备份数据脚本
/bin/bash
#date:0106
#managed_by:mzh
bakdir=/var/lib/kingbase
if [ ! -d $bakdir ] ; then
mkdir -p $bakdir
fi
processing(){
clear
for ((i=0;$i<=100;i+=5))
do
echo -e "\e[6;9H[processing...$i%]"
sleep 0.2
done
}
kingabse_bak(){
cd /opt/Kingbase/ES/V8/
./Server/bin/sys_dump -U system -p 7701 dbname -f ${bakdir}/dbname`date+"%y%m%d-%H%M"`.sql
if [ $? -eq 0 ]; then
echo "dbname 备份完成."
fi
}
clear_bak(){
ls -lt $bakdir/* |awk 'NR>=3'|xargs rm -rf --
}
#显示进度条
processing
#备份库
kingbase_bak
#保留最近2次备份
clear_bak
1.1 遇到问题
1.1.1 执行clear_bak时报错 : rm: invalid option -- w ##解决 添加 -- 结束 rm 的参数
1.1.2 在我执行kingbase_bak时,发现不能正常执行 : 1) 当 su - dbuser后,因为bakdir目录的属主,属组不是dbuser ,用户无法写入文件 ;2) 切换到dbuser身份后,并不能继续执行属主属组为root的备份脚本 ##解决: 以root身份执行备份命令
2.为脚本添加执行权限 chmod +x sqlbak.sh
3.添加脚本路径到环境变量
export PATH=${PATH}:/root/scripts/sqlbak.sh
sed -i '$a export PATH=${PATH}:/root/scripts/sqlbak.sh' /etc/profile
source /etc/profile
4.备份脚本添加到计划任务
00 17 * * 5 bash sqlbak.sh
ls -t /data/backup | awk '$0~/tar.gz/' | awk 'NR>3' | xargs rm -rf