diff --git a/cron.backupdb.sh b/cron.backupdb.sh new file mode 100644 index 0000000..8fcf952 --- /dev/null +++ b/cron.backupdb.sh @@ -0,0 +1,56 @@ +#!/bin/sh + +# Add log redirection for all output +exec 1>>/var/log/cron.backupdb.log 2>&1 + +# Add timestamp to log entry +echo "=== Backup started at $(date '+%Y-%m-%d %H:%M:%S') ===" + +# Set variables +TIMESTAMP=$(date +%Y%m%d_%H%M%S) +DB_LIST="qvyun postgres" # Replace with your database names +POSTGRES_DIR="/opt/services/postgres" +BACKUP_DIR="${POSTGRES_DIR}/data/backups" + +# Create backup directory if not exists +# 如果 BACKUP_DIR 存在则不创建,否则创建 +[ -d $BACKUP_DIR ] || mkdir -p $BACKUP_DIR + +# Create temp directory for dumps +TEMP_DIR="${BACKUP_DIR}/temp_${TIMESTAMP}" +mkdir -p $TEMP_DIR + +# Enhance logging for database backup +cd $POSTGRES_DIR || { + echo "[$(date '+%Y-%m-%d %H:%M:%S')] Failed to change directory to $POSTGRES_DIR"G + exit 1 +} + +for DB_NAME in $DB_LIST; do + echo "[$(date '+%Y-%m-%d %H:%M:%S')] Backing up database: $DB_NAME" + docker compose exec -T pg pg_dump -U postgres -w -Fc "$DB_NAME" -f "/var/lib/postgresql/data/backups/temp_${TIMESTAMP}/${DB_NAME}.dump" + if [ $? -eq 0 ]; then + echo "[$(date '+%Y-%m-%d %H:%M:%S')] Successfully backed up $DB_NAME" + else + echo "[$(date '+%Y-%m-%d %H:%M:%S')] Error backing up $DB_NAME" + fi +done + +# Return to backup directory for zip operation +cd $BACKUP_DIR || { + echo "[$(date '+%Y-%m-%d %H:%M:%S')] Failed to change directory to $BACKUP_DIR" + exit 1 +} + +# Create zip archive +cd $BACKUP_DIR +zip -r "postgres_backup_${TIMESTAMP}.zip" "temp_${TIMESTAMP}" + +# Cleanup temp directory +rm -rf $TEMP_DIR + +# Upload to Aliyun OSS +rclone sync --update /opt/services/postgres/data/backups/ alioss:/rogee-backups/server/ali/bj01/backups + +echo "[$(date '+%Y-%m-%d %H:%M:%S')] Backup completed: postgres_backup_${TIMESTAMP}.zip" +echo "=== Backup finished at $(date '+%Y-%m-%d %H:%M:%S') ===" diff --git a/docker-compose.backend.yaml b/docker-compose.backend.yaml index f667a01..5b90442 100644 --- a/docker-compose.backend.yaml +++ b/docker-compose.backend.yaml @@ -8,3 +8,6 @@ services: - /data:/app/processed ports: - 9600:9600 + logging: + options: + max-size: "100m"