- 实现每天定时备份数据,并删除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