Files
awoooi/scripts/backup/backup-awoooi-frequent.sh
OG T be3aa6069b feat(backup): AWOOOI 高頻備份 — 每 6 小時備份 awoooi_prod
awoooi_prod 為核心生產 DB,每日一次最大損失 24 小時不可接受:

- backup-awoooi-frequent.sh:每 6 小時備份 awoooi_prod(08/14/20:00)
- 02:00 由 backup-all.sh 完整備份(含 dev/k3s)
- 合計 4次/天,最大數據損失 ≤ 6 小時
- GFS 保留:28h 高頻 + 30日 + 12週 + 24月

首次執行: 680K,4s,snapshot db050dbc

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-05 01:14:50 +08:00

77 lines
2.7 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# =============================================================================
# WOOO AIOps - AWOOOI 高頻備份(每 6 小時)
# 2026-04-05 Claude Code: awoooi_prod 為核心生產 DB每日一次不夠
# 部署位置: /backup/scripts/backup-awoooi-frequent.sh (on 192.168.0.110)
# cron: 0 */6 * * * /backup/scripts/backup-awoooi-frequent.sh >> /backup/logs/cron.log 2>&1
# 說明: 每 6 小時備份 awoooi_prod最多損失 6 小時資料
# 完整備份(含 Gitea/Harbor仍由 backup-all.sh 每日 02:00 執行
# =============================================================================
set -euo pipefail
source "$(dirname "$0")/common.sh"
SERVICE="awoooi-frequent"
AWOOOI_HOST="192.168.0.188"
AWOOOI_DB_USER="awoooi"
AWOOOI_DB_PASS="awoooi_prod_2026"
AWOOOI_DB_HOST="localhost"
AWOOOI_DB_PORT="5432"
LOCAL_REPO="${BACKUP_BASE}/awoooi"
DUMP_DIR="/tmp/awoooi-freq-backup-$$"
# 高頻備份保留策略
KEEP_HOURLY=28 # 保留 7 天的 6 小時快照7*4=28
KEEP_DAILY=30
KEEP_WEEKLY=12
KEEP_MONTHLY=24
main() {
local start_time=$(date +%s)
log_info "========== AWOOOI 高頻備份 ($(date '+%H:%M')) =========="
mkdir -p "${DUMP_DIR}"
local timestamp=$(date "+%Y%m%d_%H%M%S")
# 只備份 awoooi_prod高頻核心
if ssh ollama@${AWOOOI_HOST} "PGPASSWORD='${AWOOOI_DB_PASS}' pg_dump \
-U ${AWOOOI_DB_USER} -h ${AWOOOI_DB_HOST} -p ${AWOOOI_DB_PORT} \
awoooi_prod" > "${DUMP_DIR}/awoooi_prod_${timestamp}.sql" 2>&1; then
local size=$(du -h "${DUMP_DIR}/awoooi_prod_${timestamp}.sql" | cut -f1)
log_success "awoooi_prod dump 完成 (${size})"
else
log_error "awoooi_prod dump 失敗"
notify_clawbot "failed" "${SERVICE}" "AWOOOI 高頻備份失敗"
rm -rf "${DUMP_DIR}"
exit 1
fi
# Restic 備份(同一倉庫,頻率不同)
restic -r "${LOCAL_REPO}" backup "${DUMP_DIR}" \
--password-file "${RESTIC_PASSWORD_FILE}" \
--tag "service:awoooi" --tag "freq:6h" \
--tag "timestamp:${timestamp}" 2>&1
local snapshot_id=$(restic -r "${LOCAL_REPO}" snapshots --latest 1 --json \
--password-file "${RESTIC_PASSWORD_FILE}" 2>/dev/null | \
grep -oP '"short_id":"\K[^"]+' | head -1)
log_success "快照: ${snapshot_id}"
# GFS 清理(加入 hourly 保留)
restic -r "${LOCAL_REPO}" forget --prune \
--password-file "${RESTIC_PASSWORD_FILE}" \
--keep-hourly ${KEEP_HOURLY} \
--keep-daily ${KEEP_DAILY} \
--keep-weekly ${KEEP_WEEKLY} \
--keep-monthly ${KEEP_MONTHLY} 2>&1
rm -rf "${DUMP_DIR}"
local end_time=$(date +%s)
log_success "========== AWOOOI 高頻備份完成 ($((end_time-start_time))s) =========="
}
main "$@"