Shell脚本定时备份数据库目录到远程服务器,并保留指定数量的备份

1. 备份需求

        Shell脚本每天定时复制数据库目录到远程服务器,但是复制的备份时间都是数据库目录创建的时间,不是执行脚本的时间,那如何保留最近7个备份。

2. 解决方案

        核心思路是:在备份时主动为文件或目录打上当前时间戳,然后基于此时间戳实施保留策略。无需依赖文件系统的创建时间,而是通过脚本逻辑来管理。

3. 完整脚本

#!/bin/bash
# 数据库目录备份脚本(解决时间戳问题,保留最近7个备份)

# --- 配置参数 ---
BACKUP_SRC="/mnt/postgresql/data"          # 请修改为您的数据库实际目录
BACKUP_BASE="/mnt/pg_bak"                 # 本地备份存放的基目录
REMOTE_SERVER="root@192.168.0.149"        # 远程服务器地址
REMOTE_PATH="/data/postgresql_bak_192.168.0.118"               # 远程服务器上的备份路径
BACKUP_COUNT=7                           # 要保留的备份份数
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
BACKUP_NAME="db_backup_${TIMESTAMP}"

# --- 开始备份 ---
echo "$(date) 开始备份数据库..."

# 创建本地带时间戳的备份目录
mkdir -p "${BACKUP_BASE}/${BACKUP_NAME}"
if [ $? -ne 0 ]; then
    echo "错误:无法创建本地备份目录 ${BACKUP_BASE}/${BACKUP_NAME}"
    exit 1
fi

# 复制数据(假设您有权限停止/锁定数据库后再复制,或数据库支持热备)
# 重要:为确保数据一致性,在复制前可能需要暂停数据库写入或使用数据库自带工具创建快照
cp -a "${BACKUP_SRC}"/* "${BACKUP_BASE}/${BACKUP_NAME}/" 2>/dev/null
if [ $? -eq 0 ]; then
    echo "本地数据复制完成:${BACKUP_BASE}/${BACKUP_NAME}"
else
    echo "错误:数据复制失败,请检查权限和路径"
    exit 1
fi

# --- 同步到远程服务器 ---
echo "开始同步到远程服务器..."
rsync -avz --delete "${BACKUP_BASE}/${BACKUP_NAME}" "${REMOTE_SERVER}:${REMOTE_PATH}/"
if [ $? -eq 0 ]; then
    echo "远程同步成功。"
else
    echo "警告:远程同步可能存在问题。"
fi

# --- 清理旧备份(保留最近7份)---
echo "清理本地旧备份(保留最新的 ${BACKUP_COUNT} 份)..."
cd "${BACKUP_BASE}"
# 列出所有备份目录并按时间倒序排序,删除第8个(含)之后的所有旧备份
ls -dt db_backup_*/ 2>/dev/null | tail -n +$((${BACKUP_COUNT} + 1)) | xargs -I {} rm -rf {}

echo "清理远程旧备份..."
ssh "${REMOTE_SERVER}" "cd \"${REMOTE_PATH}\" && ls -dt db_backup_*/ 2>/dev/null | tail -n +$((${BACKUP_COUNT} + 1)) | xargs -I {} rm -rf {}"

echo "$(date) 备份流程全部完成。当前备份:${BACKUP_NAME}"

4. 配置定时任务

vim   /etc/crontab

crontab  -e

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值