|
#### Dosya 2: `postgres_s3_backup.sh` |
|
*(Scriptin son hali - **Lütfen kendi Access Keylerinizi silip yerine placeholder koyarak paylaşın!**)* |
|
|
|
```bash |
|
#!/bin/bash |
|
|
|
# ========================================================= |
|
# PostgreSQL Docker -> AWS S3 Backup Script |
|
# Description: Auto-discovers DBs in Docker, dumps them, |
|
# zips them, and uploads to AWS S3. |
|
# ========================================================= |
|
|
|
# --- AYARLAR: POSTGRESQL --- |
|
CONTAINER_NAME="postgres" # Docker container name |
|
BACKUP_DIR="/var/backups/postgres_hourly" |
|
PG_USER="postgres" # DB User inside container |
|
|
|
# --- AYARLAR: AWS S3 --- |
|
# GUVENLIK UYARISI: Bu bilgileri guvenli tutun veya ENV'den cekin |
|
MY_AWS_ACCESS_KEY="YOUR_ACCESS_KEY_HERE" |
|
MY_AWS_SECRET_KEY="YOUR_SECRET_KEY_HERE" |
|
MY_AWS_REGION="eu-central-1" |
|
MY_BUCKET_NAME="your-bucket-name" |
|
|
|
export AWS_ACCESS_KEY_ID=$MY_AWS_ACCESS_KEY |
|
export AWS_SECRET_ACCESS_KEY=$MY_AWS_SECRET_KEY |
|
export AWS_DEFAULT_REGION=$MY_AWS_REGION |
|
|
|
# Yedekleme klasoru olustur |
|
mkdir -p $BACKUP_DIR |
|
|
|
# --- BASLANGIC --- |
|
echo "---------------------------------------------------" |
|
echo " PostgreSQL Auto Backup & S3 Upload Started" |
|
echo " Date: $(date +'%Y-%m-%d %H:%M:%S')" |
|
echo "---------------------------------------------------" |
|
|
|
# 1. Veritabani listesini Docker icinden cek |
|
# (Template ve postgres veritabanlarini haric tutmak isterseniz SQL'i duzenleyin) |
|
RAW_DBS=$(docker exec $CONTAINER_NAME psql -U $PG_USER -t -c "SELECT datname FROM pg_database WHERE datistemplate = false;" | tr -d '\r' | xargs) |
|
|
|
IFS=' ' read -r -a DB_ARRAY <<< "$RAW_DBS" |
|
TOTAL=${#DB_ARRAY[@]} |
|
CURRENT=0 |
|
|
|
if [ $TOTAL -eq 0 ]; then |
|
echo "[ERROR] No databases found inside container: $CONTAINER_NAME" |
|
exit 1 |
|
fi |
|
|
|
# --- DONGU --- |
|
for DB in "${DB_ARRAY[@]}"; do |
|
((CURRENT++)) |
|
|
|
# Yuzde Hesaplama |
|
PERCENT=$(( 100 * CURRENT / TOTAL )) |
|
|
|
# Ilerleme Cubugu |
|
BAR_SIZE=20 |
|
DONE_CHARS=$(( PERCENT * BAR_SIZE / 100 )) |
|
TODO_CHARS=$(( BAR_SIZE - DONE_CHARS )) |
|
BAR=$(printf "%${DONE_CHARS}s" | tr " " "=") |
|
EMPTY=$(printf "%${TODO_CHARS}s" | tr " " ".") |
|
|
|
echo -n "[${BAR}${EMPTY}] %${PERCENT} | (${CURRENT}/${TOTAL}) $DB : Backing up... " |
|
|
|
TEMP_FILE="$BACKUP_DIR/${DB}_temp.sql.gz" |
|
FINAL_FILE="$BACKUP_DIR/${DB}_latest.sql.gz" |
|
|
|
# 2. YEDEK ALMA (Docker -> Host Disk) |
|
docker exec $CONTAINER_NAME pg_dump -U $PG_USER $DB | gzip > $TEMP_FILE |
|
|
|
if [ ${PIPESTATUS[0]} -eq 0 ]; then |
|
mv $TEMP_FILE $FINAL_FILE |
|
echo -n "-> [LOCAL OK] -> Uploading to S3... " |
|
|
|
# 3. S3 YUKLEME |
|
aws s3 cp $FINAL_FILE s3://$MY_BUCKET_NAME/hourly_backups/${DB}_latest.sql.gz --quiet |
|
|
|
if [ $? -eq 0 ]; then |
|
echo "[S3 OK]" |
|
else |
|
echo "[S3 FAILED]" |
|
fi |
|
else |
|
rm -f $TEMP_FILE |
|
echo "-> [LOCAL FAILED]" |
|
fi |
|
done |
|
|
|
echo "---------------------------------------------------" |
|
echo " Backup Process Completed." |