DMS系统创建本地备份机制

Linux·学习 · 29 天前
DMS系统创建本地备份机制

一、在服务器(dms.rongyi.site)上创建同步用户

useradd -m syncer
passwd syncer

配置只读备份目录权限:

chown -R syncer:syncer /bak
chmod -R 755 /bak

二、在本地 Debian 生成 SSH 密钥

ssh-keygen -t ed25519 -C "backup"

上传公钥到服务器:

ssh-copy-id syncer@dms.rongyi.site

测试免密登录:

ssh syncer@dms.rongyi.site

三、创建 rsync 同步脚本

   #!/bin/bash

REMOTE_USER="syncer"
REMOTE_HOST="dms.rongyi.site"
REMOTE_DIR="/bak"

LOCAL_DIR="/root/dms_backups"
LOG="/root/log/sync_dms_backup.log"

EXCLUDES=(
    --exclude='flask_session'
)

RETENTION_DAYS=7

SERVERCHAN_SENDKEY="SCTxxxxxxxxxxxx"

# ============ 双输出日志函数 ============
log(){
    echo -e "$1" | tee -a "$LOG"
}

# ============ Server 酱通知 ============
push_message(){
    TITLE="$1"
    CONTENT="$2"
    curl -s -X POST "https://sctapi.ftqq.com/${SERVERCHAN_SENDKEY}.send" \
        -d "title=${TITLE}" \
        -d "desp=${CONTENT}" >/dev/null 2>&1
}

# ============ 开始 ============
log "====== $(date '+%Y-%m-%d %H:%M:%S') 开始增量同步 ======"

START_TIME=$(date +%s)

# -------- 1) rsync 增量同步 --------
log "[*] 开始同步远程备份目录..."

rsync -avz --delete \
    "${EXCLUDES[@]}" \
    $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/ \
    $LOCAL_DIR/ 2>&1 | tee -a "$LOG"

RSYNC_STATUS=${PIPESTATUS[0]}

if [ $RSYNC_STATUS -eq 0 ]; then
    log "[OK] $(date '+%H:%M:%S') 数据同步成功"
else
    log "[ERROR] $(date '+%H:%M:%S') 数据同步失败!错误代码:$RSYNC_STATUS"

    push_message \
        "❌ DMS 本地备份同步失败" \
        "失败时间:$(date '+%Y-%m-%d %H:%M:%S')  
错误代码:$RSYNC_STATUS  
请检查网络、SSH 或服务器目录是否正常。"

    exit 1
fi

# -------- 2) 清理过期备份 --------
log "[*] 清理超过 $RETENTION_DAYS 天的本地备份..."

find $LOCAL_DIR -maxdepth 1 -type d -name "day_*" -mtime +$RETENTION_DAYS \
    -print -exec rm -rf {} \; 2>&1 | tee -a "$LOG"

CLEAN_STATUS=${PIPESTATUS[0]}

if [ $CLEAN_STATUS -ne 0 ]; then
    log "[ERROR] 清理旧备份失败!"

    push_message \
        "⚠️ DMS 同步成功,但清理旧备份失败" \
        "请检查本地目录权限或磁盘空间。"

    exit 1
fi

END_TIME=$(date +%s)
RUN_SECONDS=$((END_TIME - START_TIME))

# -------- 3) 成功通知 --------
log "[OK] $(date '+%H:%M:%S') 同步与清理全部完成"

push_message \
    "✅ DMS 本地同步备份成功" \
    "完成时间:$(date '+%Y-%m-%d %H:%M:%S')  
耗时:${RUN_SECONDS} 秒  
排除目录:flask_session  
保留天数:$RETENTION_DAYS  
本地路径:\`${LOCAL_DIR}\`  
状态:全部成功。"

log ""

保存为 dms.sh

赋予执行权限

chmod +x dms.sh

四、手动运行测试

./dms.sh

五、设置计划任务

crontab -e

0 1 * * * /root/dms.sh

linux dms 备份