Files
mp-qvyun/cron.backupdb.sh
2024-12-17 14:02:46 +08:00

57 lines
1.8 KiB
Bash

#!/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') ==="