linux 备份脚本 指定时间范围 获取

2017年11月17日 0 条评论 1.3k 次阅读 0 人点赞

备份文件保留说明

为节省空间以及确保数据备份作用,备份文件保留机制为:

  1. 一个星期以内:每6小时备份一次,每天4个文件全部保存

  2. 一个星期以外&一个月以内:每天保留一个备份文件

  3. 一个月以外&3个月以内:每个月保留4个备份文件(每月06、13、20、27号保留06点的备份文件)

  4. 3个月以外:每个月保留一个备份文件(每月13号06点)

命令操作

#备份部分采用每6小时一次 

#crontab内容

#备份 
1 */6 * * * /bin/sh /root/backup.sh 
#删除 
1 1 * * 1 /bin/sh /root/del_backup.sh

#backup.sh内容

#!/bin/bash
#crontab
#1 */6 * * * /bin/sh /*/backup.sh 
now=`date +%Y%m%d%H%M%S`
#用来识别备份文件
dmpfile=backup_$now.dmp
DATA_PUMP_DIR=/u01/app/oracle/admin/moe1/dpdump
/opt/oracle/11.2.0/bin/expdp user/pass@moe1 DUMPFILE=$dmpfile DIRECTORY=DATA_PUMP_DIR full=y compression=all
tar cjf ${DATA_PUMP_DIR}/${dmpfile}.bz2 ${DATA_PUMP_DIR}/${dmpfile}
if [ -f ${DATA_PUMP_DIR}/${dmpfile}.bz2 ];then rm -rf ${DATA_PUMP_DIR}/${dmpfile};fi

#del_backup.sh内容

#!/bin/bash
#crontab
#1 1 * * 1 /bin/sh /*/del_backup.sh export bak_path=/backup
# > 90days
for val in `find ${bak_path} -mtime +90 -name "*.bz2" | grep -v 'backup_......\(1306\)'`;do rm -rf ${val};done
# > 30days && < 90days
for val in `find ${bak_path} -mtime -90 -mtime +30 -name "*.bz2" |grep -E -v 'backup_......(0606|1306|2006|2706)'`;do rm -rf ${val};done
# > 7days && < 30days
for val in `find ${bak_path} -mtime -30 -mtime +7 -name "*.bz2" |grep -E -v 'backup_........06'`;do rm -rf ${val};done

#用来创建测试文件的脚本

#!/bin/bash
yearN=$(date '+%Y')
tmpDoc="/tmp/tmpDoc/${yearN}"
mkdir -p "${tmpDoc}" && cd "${tmpDoc}" || exit 1
for((i=1;i<=12;i++));do
    montht=$i
    if [ "${#montht}" == "1" ];then montht="0${i}";fi
    mkdir -p "${tmpDoc}/${montht}"
    for((j=1;j<=31;j++));do
        dayt=$j
        if [ "${#dayt}" == "1" ];then dayt="0$j";fi
        touch -t "${yearN}${montht}${dayt}$(date '+%H%M.%S')" "${tmpDoc}/${montht}/${dayt}.file"
    done
done


2023-03-27

整合的备份脚本

#!/bin/bash
path0=/opt/mysql
backup0="$path0/backup"
tmp0="$path0/tmp"
year0=$(date '+%Y')
month0=$(date '+%m')
day0=$(date '+%d')
workdoc="$backup0/$year0/$month0"
tmpdoc="$tmp0/$year0/$month0"
#mysql backup
#2month daily
#2month~5month weekly
#5month~1year monthly

#for backup
mkdir -p "$workdoc"
mkdir -p "$tmpdoc"
/usr/bin/mysqldump -uroot -pyourpass yourdb > "$workdoc/$day0.sql"
if [ -f "$workdoc/$day0.sql" ];then
    cd "$workdoc"
    # tar cjf - "$day0.sql" | openssl des3 -salt -k 'yourpass' -out "$day0.bz2"
    tar czf "$day0.tar.gz" "$day0.sql"
    if [ -f "$workdoc/$day0.tar.gz" ];then rm -rf "$workdoc/$day0.sql";fi
fi

#for delete
#5month~1year monthly
for file in $(find "$backup0" -mtime +150 -name "*.tar.gz" | grep -v '01.tar.gz$');do
    filedoc=$(echo ${file%/*} | sed "s#$backup0#$tmp0#g")
    mkdir -p "$filedoc"
    if ! mv "$file" "$filedoc/";then exit;fi
done
#2month~5month weekly
for file in $(find "$backup0" -mtime -150 -mtime +60 -name "*.tar.gz" | grep -v '1.tar.gz$');do
    filedoc=$(echo ${file%/*} | sed "s#$backup0#$tmp0#g")
    mkdir -p "$filedoc"
    if ! mv "$file" "$filedoc/";then exit;fi
done

Sevenfal

这个人太懒什么东西都没留下

文章评论(0)