docs(backup): 備份審計完整盤點 + 新增 AWOOOI DB 與 Gitea DB 備份腳本

首席架構師備份審計結論:
- awoooi_prod PostgreSQL: 無備份 (P0 缺口)
- Gitea SQLite DB: 無備份 (今日已損壞,人工修復耗時 2h+)

新增:
- scripts/backup/backup-awoooi-db.sh (188 部署,02:00 daily)
- scripts/backup/backup-gitea-db.sh (110 部署,01:00 daily)
- docs/runbooks/BACKUP-STATUS.md (全景表 + 部署步驟 + SOP)
- LOGBOOK.md 備份審計段落

待手動部署:統帥需 scp 腳本至 188/110 並設定 crontab

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
OG T
2026-04-05 01:01:58 +08:00
parent 8300879d02
commit 84cfdb6195
4 changed files with 250 additions and 0 deletions

View File

@@ -0,0 +1,39 @@
#!/bin/bash
# =============================================================================
# AWOOOI PostgreSQL 每日備份腳本
# 2026-04-05 Claude Code: 盤點後發現 awoooi DB 無備份,依循 backup-momo-db.sh 規範建立
# 部署位置: /home/ollama/scripts/backup-awoooi-db.sh (on 192.168.0.188)
# cron: 0 2 * * * /home/ollama/scripts/backup-awoooi-db.sh >> /home/ollama/logs/backup-awoooi.log 2>&1
# =============================================================================
set -e
BACKUP_DIR="/home/ollama/backups/awoooi"
DATE=$(date +%Y-%m-%d_%H-%M)
RETENTION_DAYS=30
mkdir -p "$BACKUP_DIR"
echo "[$(date)] 開始 AWOOOI DB 備份..."
# awoooi_prod — 主要生產資料庫知識庫、事故、AutoRepair 決策等)
sudo -u postgres pg_dump awoooi_prod | gzip > "$BACKUP_DIR/awoooi_prod_${DATE}.sql.gz"
echo "[$(date)] ✅ awoooi_prod 備份完成"
# awoooi_dev — 開發資料庫
sudo -u postgres pg_dump awoooi_dev 2>/dev/null | gzip > "$BACKUP_DIR/awoooi_dev_${DATE}.sql.gz" || \
echo "[$(date)] ⚠️ awoooi_dev 備份跳過(可能不存在)"
# k3s_datastore — K3s Kine 資料庫
sudo -u postgres pg_dump k3s_datastore 2>/dev/null | gzip > "$BACKUP_DIR/k3s_datastore_${DATE}.sql.gz" || \
echo "[$(date)] ⚠️ k3s_datastore 備份跳過"
# 清理舊備份(保留 30 天)
find "$BACKUP_DIR" -name "*.sql.gz" -mtime +"$RETENTION_DAYS" -delete
echo "[$(date)] 清理超過 ${RETENTION_DAYS} 天的舊備份完成"
# 列出最新備份
echo "[$(date)] 目前備份清單:"
ls -lh "$BACKUP_DIR"/*.sql.gz 2>/dev/null | tail -10
echo "[$(date)] AWOOOI DB 備份完成!"

View File

@@ -0,0 +1,42 @@
#!/bin/bash
# =============================================================================
# Gitea SQLite 每日備份腳本
# 2026-04-05 Claude Code: 盤點後發現 Gitea DB 無備份,今日已發生損壞事故
# 部署位置: /home/wooo/scripts/backup-gitea-db.sh (on 192.168.0.110)
# cron (wooo@110): 0 1 * * * /home/wooo/scripts/backup-gitea-db.sh >> /home/wooo/logs/backup-gitea.log 2>&1
# 教訓: 2026-04-05 Gitea DB 損壞,靠 sqlite3 .recover 才救回 — 人工修復耗時 2+ 小時
# =============================================================================
set -e
GITEA_DB="/home/wooo/gitea/gitea_data/gitea/gitea.db"
BACKUP_DIR="/home/wooo/backups/gitea"
DATE=$(date +%Y-%m-%d_%H-%M)
RETENTION_DAYS=30
mkdir -p "$BACKUP_DIR"
echo "[$(date)] 開始 Gitea DB 備份..."
if [ ! -f "$GITEA_DB" ]; then
echo "[$(date)] ❌ Gitea DB 不存在: $GITEA_DB"
exit 1
fi
# SQLite online backup不需要停止 Gitea
sqlite3 "$GITEA_DB" ".backup '$BACKUP_DIR/gitea_${DATE}.db'"
echo "[$(date)] ✅ Gitea DB 備份完成"
# 壓縮備份
gzip "$BACKUP_DIR/gitea_${DATE}.db"
echo "[$(date)] ✅ 壓縮完成: gitea_${DATE}.db.gz"
# 清理舊備份(保留 30 天)
find "$BACKUP_DIR" -name "gitea_*.db.gz" -mtime +"$RETENTION_DAYS" -delete
echo "[$(date)] 清理超過 ${RETENTION_DAYS} 天的舊備份完成"
# 列出最新備份
echo "[$(date)] 目前備份清單:"
ls -lh "$BACKUP_DIR"/gitea_*.db.gz 2>/dev/null | tail -5
echo "[$(date)] Gitea DB 備份完成!"