centos定时备份数据库(Oracle)
需求是这样的,需要每天全量备份生产环境数据库,因为服务器空间较小,每天自动删除15天之前备份的数据,但为方便溯源,每月会保留一份存档.
首先安装Oracle客户端,这个没什么好说的,直接去Oracle下载客户端, 需要3个rpm包,分别是basic sqlplus tools(导入导出数据功能都是这个包里面的) 然后使用rpm -ivh直接安装就好了.
使用下面配置即可实现
centos定时任务配置 记录每次执行的日志,通过crontab -e命令进入
config文件配置
username=账号 password=密码 ipStr=数据库地址 portNumber=端口 serviceName=服务名称 directoryName=备份文件目录 backupsFileDay=备份文件保存时间 expdpStr=/usr/lib/oracle/19.5/client64/bin/exp saveDb=备份的数据库
dumpshell文件内容
#!/bin/sh
. /etc/profile
. ~/.bash_profile
#db_backups_conf.txt文件路径
db_backups_conf="/opt/dumpshell/config.txt"
#判断文件是否存在
if [ -f "${db_backups_conf}" ]; then
echo $(date +%Y-%m-%d %H:%M:%S)" 数据库配置信息文件存在,开始进行数据备份"
#获取等号前内容,作为map中的Key值
dbArrOne=($(awk -F[=] {print $1} ${
db_backups_conf}))
#获取等号后内容,作为map中的value值
dbArrTwo=($(awk -F[=] {print $2} ${
db_backups_conf}))
#创建一个空map
declare -A map=()
#通过循环,将db_backups_conf配置文件中的信息存储在map中
for ((i = 0; i < ${#dbArrOne[@]}; i++)); do
map[${dbArrOne[i]}]=${dbArrTwo[i]}
done
#获取备份数据库
saveDbStr=${map["saveDb"]}
#获取默认的字符串分隔符
old_ifs="$IFS"
#设置字符串分隔符为逗号
IFS=","
#将用户名的value值的字符串进行分隔,获取一个数组
saveDbArr=($saveDbStr)
#将字符串的分隔符重新设置为默认的分隔符
IFS="$old_ifs"
#获取当前年月日
saveday=$(date +%Y%m%d)
savemonth=$(date +%Y%m)
#获取超出备份天数的年月日
delday=$(date -d ${
map["backupsFileDay"]} days ago +%Y%m%d)
#遍历要备份的用户名,删除两天前备份的数据文件
echo "即将删除"${map["backupsFileDay"]}"天之前备份的数据"
find /data/dumpdata/ -maxdepth 1 -mtime +${map["backupsFileDay"]} -name "*.*"
find /data/dumpdata/ -maxdepth 1 -mtime +${map["backupsFileDay"]} -name "*.dmp" -exec rm -Rf {
} ;
#遍历要备份的数据库,备份数据文件
for saveDb in ${saveDbArr[@]}; do
echo $(date +%Y-%m-%d %H:%M:%S)" 备份数据库:"${saveDb}
${map["expdpStr"]} ${map["username"]}/${map["password"]}@${map["ipStr"]}:${map["portNumber"]}/${map["serviceName"]} file=${map["directoryName"]}/expdp_${saveDb}_database_${saveday}.dmp owner=${map["saveDb"]}
done
#归档数据 每月保留一条
cp -rf ${map["directoryName"]}/expdp_${saveDb}_database_${saveday}.dmp ${map["directoryName"]}/backupFiles/expdp_${saveDb}_database_${savemonth}.dmp
echo $(date +%Y-%m-%d %H:%M:%S)" 数据备份完毕,脚本执行完毕"
else
echo "文件不存在"
fi
附件 一目了然
然后备份文件夹创建
backupFiles是每月存档
