需求是这样的,需要每天全量备份生产环境数据库,因为服务器空间较小,每天自动删除15天之前备份的数据,但为方便溯源,每月会保留一份存档.

首先安装Oracle客户端,这个没什么好说的,直接去Oracle下载客户端,
需要3个rpm包,分别是basic sqlplus tools(导入导出数据功能都是这个包里面的)
然后使用rpm -ivh直接安装就好了.

使用下面配置即可实现

centos定时任务配置
记录每次执行的日志,通过crontab -e命令进入
centos定时任务

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是每月存档

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐