ali_rds_dbbackup.sh

#!/bin/bash
source /etc/profile

shellpath=$(cd "$(dirname "$0")";pwd)
bakdir='/dbbackup/mysqlbak/databackup'
week_day=$(date +%w)
month_day=$(date +%d)

dbinfo=(`mysql --login-path=p_arch -N -e "select concat(instance_id,',',instance_desc,',',ak,',',cutname,',',backup_type) from dba.instance_info where backup_type <>2 and env_type='proc';"`)
for(( i=0;i<${#dbinfo[@]};i++ ))
do 
array=(`echo ${dbinfo[$i]} | tr ','  ' '`)
rdsid=`echo ${array[0]}`
rdsdesc=`echo ${array[1]}`
ak=`echo ${array[2]}`
dirname=`echo ${array[3]}`
baktype=`echo ${array[4]}`
#echo ${dbinfo[$i]}
#判断如果备份类型为0或者备份类型为1并且是周二,或者备份类型为3且为15号则进行备份
if [ ${baktype} -eq 0 ] || ([ ${baktype} -eq 1 ] && [ $week_day -eq 2 ]) || ([ ${baktype} -eq 3 ] && [ $month_day -eq 15 ]); then
  aliyun_DownloadURL=`aliyun --profile ${ak} rds DescribeBackups --DBInstanceId $rdsid --BackupStatus Success |jq .Items.Backup[0].BackupIntranetDownloadURL`
  aliyun_DownloadURL=`echo ${aliyun_DownloadURL}|sed s#\"##g`
  filename=`echo $aliyun_DownloadURL|cut -d '?' -f 1 |cut -d '/' -f 5`
  filedir=${bakdir}/${dirname}
  if [ ! -d ${filedir} ]; then
    mkdir -p ${filedir}
  fi
  #下载备份文件
  echo `date +%Y-%m-%d_%H:%M:%S`:Begin Download the ${rdsdesc} backup file...
  /usr/bin/wget -c ${aliyun_DownloadURL} -O ${filedir}/${filename}
  echo `date +%Y-%m-%d_%H:%M:%S`:Finish Download ${rdsdesc} to ${filedir}/${filename} !
else
  echo `date +%Y-%m-%d_%H:%M:%S`: ${rdsdesc} 为每周或每月归档实例,跳过此次归档...
fi
#清理一年前的备份,并保留每周一个备份,-mtime +365   365天以前
find ${bakdir}/ -mtime +365 -type f -name '*hins*' -exec rm -f {} \;
done

 

posted @ 2025-06-21 02:59  屠魔的少年  阅读(8)  评论(0)    收藏  举报