Files
mp-qvyun/cron.backupdb.sh
2025-01-06 19:24:11 +08:00

67 lines
2.1 KiB
Bash

#!/bin/sh
# Add log redirection for all output
exec 1>>/var/log/cron.backupdb.log 2>&1
# Add timestamp to log entry
start_time=$(date "+%Y-%m-%d %H:%M:%S")
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') ==="
end_time=$(date "+%Y-%m-%d %H:%M:%S")
/usr/bin/curl -X POST "https://gotify.jdwan.com/message?token=AknNrK_M.ZGqDz5" \
-H "Content-Type: application/json" \
-d "{
\"message\": \"Backup completed from $start_time to $end_time\",
\"title\": \"Backup Complete\",
\"priority\": 5
}"