滚动备份最近x天数据

  • 实现每天定时备份数据,并删除x天前的备份,节省空间

touch /data/backup/mysql/backup.sh

#!/usr/bin/env bash

# 备份文件前缀
FILE_PREFIX="mysql-bak"
# 备份文件后缀
FILE_SUFFIX=".tgz"

# 备份命令 $BACKUP_FILE是备份目标文件全路径
BACKUP_CMD="tar zcf \${BACKUP_FILE} /data/mysql"

# 滚动删除备份时间,单位/days
ROLL_TIME=30




SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
DATA_DIR="$SCRIPT_DIR/data"
mkdir -p "${DATA_DIR}"
exec 5<&1
exec 6<&2
exec 1>> "${DATA_DIR}/run.log" 2>&1


backupData() {
    local NOW_TIME
    NOW_TIME=$(date "+%Y-%m-%d")
    FILE_NAME="${FILE_PREFIX}-${NOW_TIME}${FILE_SUFFIX}"
    export BACKUP_FILE="${DATA_DIR}/${FILE_NAME}"
    echo -e "保存数据到${BACKUP_FILE}"
    eval "$BACKUP_CMD"
}

deleteOldData() {
    echo -e "删除30天前的数据"
    local OLD_TIME
    echo -e "删除${ROLL_TIME}天前的数据"
    OLD_TIME=$(date -d "${ROLL_TIME} days ago" "+%Y-%m-%d")
    # 防止time为空
    OLD_TIME=${buyaoshanwo:-$OLD_TIME}
    FILE_NAME="${FILE_PREFIX}-${OLD_TIME}${FILE_SUFFIX}"
    echo -e "删除文件: ${DATA_DIR}/${FILE_NAME}"
    rm -f "${DATA_DIR}/${FILE_NAME}"
}

main() {
    printf "备份脚本执行时间: "  && echo "$(date +"%Y-%m-%d %H:%M:%S")"
    backupData || {
      echo "备份失败, 直接退出"; exit 1
    }
    deleteOldData
}
main



crontab -e

25 4 * * * /bin/bash /data/backup/mysql/backup.sh
posted @ 2022-03-14 11:43  小小记录本  阅读(73)  评论(0编辑  收藏  举报