脚本说明
1.该脚本为Linux环境下自动备份、删除Kingbase数据库备份脚本(逻辑备份);
2.执行脚本前,请先对脚本进行修改后,再使用。
脚本效果
1.执行脚本时,若备份目录不存在,则自动创建备份目录;
2.当备份文件数量少于设置的保存文件数量时,只做备份不做删除;
3.当备份文件数量等于保存文件数量时,先做逻辑备份,再删除最早备份的文件。
脚本文件
kingbase_backup.sh
#!/bin/bash
# ------------------按需修改以下内容------------------
dbInstallPath="/data/Kingbase/ES/V8/"
backupDir="/data/Kingbase/dmp_bak"
dbIP="127.0.0.1"
dbPort="54321"
dbName="v7user"
dbUser="v7user"
# 保留最近几个备份文件
reservedNum=3
# ------------------按需修改以上内容------------------
# 数据库备份目录
if [ ! -d ${backupDir} ]; then
mkdir -p ${backupDir}
fi
# 数据库备份
sysDumpPwd="$(find ${dbInstallPath} -name sys_dump | head -n 1)"
nowDate=$(date +%Y%m%d_%H%M%S)
${sysDumpPwd} -h ${dbIP} -p ${dbPort} -U ${dbUser} -d ${dbName} -Fc > ${backupDir}/${dbName}_${nowDate}.sql
# 备份文件删除
sqlFileNum="$(ls -l ${backupDir}/${dbName}*.sql |grep ^- |wc -l)"
nowNum=${sqlFileNum}
if((${nowNum} > reservedNum));then
while(( sqlFileNum > reservedNum))
do
OldFile="$(ls -rt ${backupDir}/${dbName}*.sql | head -1)"
rm -f $OldFile
let "sqlFileNum--"
done
else
echo "当前备份文件数:${nowNum}小于需保留文件数:${reservedNum},不执行删除操作!"
fi
# 还原
# 注意:还原时候操作逻辑为先删除原始数据库,再恢复
# /data/Kingbase/ES/V8/Server/bin/sys_restore -h 127.0.0.1 -p 54321 -U v7user -d v7user -c /data/Kingbase/dmp_bak/v7user_20241211_114909.sql
内容由Windows环境复制过去,在Linux执行时候会报错,如“kingbase_backup.sh:行37: 未预期的符号 `$‘\r’’ 附近有语法错误”,可在Linux上,使用命令:dos2unix kingbase_backup.sh修改脚本编码。
定时任务
crontab -e
# 每天凌晨2点执行一次
# 演示中:脚本放置目录为:/data/Kingbase/
0 2 * * * cd /data/Kingbase/ && bash kingbase_backup.sh