67 lines
2.1 KiB
Bash
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
|
|
}"
|