feat: add server database backup cron job

This commit is contained in:
Rogee
2024-12-17 14:02:46 +08:00
parent be19daf5fe
commit db05ee4265
2 changed files with 59 additions and 0 deletions

56
cron.backupdb.sh Normal file
View File

@@ -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') ==="