ba69bc3355
db_backup/backup_mysql 改为检测文件存在并用 bash 调用;install_ops_cron 一并 chmod 备份脚本。 Co-authored-by: Cursor <cursoragent@cursor.com>
48 lines
1.5 KiB
Bash
48 lines
1.5 KiB
Bash
#!/usr/bin/env bash
|
|
# Nexus — MySQL 定时备份(Docker 1Panel / 宿主机)
|
|
#
|
|
# 0 3 * * * NEXUS_ROOT=/opt/nexus /opt/nexus/deploy/db_backup.sh >> /var/log/nexus_backup.log 2>&1
|
|
#
|
|
# 亦可通过: sudo bash deploy/install_ops_cron.sh
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
NEXUS_ROOT="${NEXUS_ROOT:-$(dirname "$SCRIPT_DIR")}"
|
|
BACKUP_DIR="${NEXUS_BACKUP_DIR:-/var/backups/nexus}"
|
|
RETENTION_DAYS="${NEXUS_BACKUP_RETENTION_DAYS:-30}"
|
|
DUMP_SH="${SCRIPT_DIR}/mysql_dump_to_file.sh"
|
|
|
|
if [[ ! -f "$DUMP_SH" ]]; then
|
|
echo "[$(date)] ERROR: missing $DUMP_SH"
|
|
exit 1
|
|
fi
|
|
chmod +x "$DUMP_SH" 2>/dev/null || true
|
|
|
|
mkdir -p "$BACKUP_DIR"
|
|
TIMESTAMP="$(date +%Y%m%d_%H%M%S)"
|
|
RAW_FILE="${BACKUP_DIR}/nexus_daily_${TIMESTAMP}.sql"
|
|
BACKUP_FILE="${RAW_FILE}.gz"
|
|
|
|
echo "[$(date)] Starting backup → $BACKUP_FILE"
|
|
if ! NEXUS_ROOT="$NEXUS_ROOT" bash "$DUMP_SH" --output "$RAW_FILE" --root "$NEXUS_ROOT"; then
|
|
echo "[$(date)] ERROR: mysqldump failed"
|
|
rm -f "$RAW_FILE"
|
|
exit 1
|
|
fi
|
|
|
|
gzip -f "$RAW_FILE"
|
|
if [[ ! -f "$BACKUP_FILE" ]]; then
|
|
echo "[$(date)] ERROR: backup file not created"
|
|
exit 1
|
|
fi
|
|
|
|
SIZE="$(du -h "$BACKUP_FILE" | cut -f1)"
|
|
echo "[$(date)] Backup completed: $BACKUP_FILE ($SIZE)"
|
|
|
|
DELETED="$(find "$BACKUP_DIR" -name 'nexus_*.sql.gz' -mtime +"${RETENTION_DAYS}" -delete -print 2>/dev/null | wc -l)"
|
|
if [[ "$DELETED" -gt 0 ]]; then
|
|
echo "[$(date)] Cleaned up $DELETED old backup(s) (>${RETENTION_DAYS} days)"
|
|
fi
|
|
|
|
echo "[$(date)] Backup process complete"
|