mydocker/backup_db.sh

40 lines
1.6 KiB
Bash
Executable File

#!/bin/bash
# Logowanie wszystkiego do pliku backup.log
LOG_FILE="/home/seba/mydocker/backup.log"
exec > >(tee -a "$LOG_FILE") 2>&1
DATE=$(date +%Y%m%d_%H%M)
BACKUP_DIR="/media/seagata16t/backups/db_dumps"
# Ustawiamy ścieżkę zgodną z tym, co widzi rclone (sprawdź rclone lsd gdrive:)
REMOTE_PATH="gdrive:backups_n_configs/acemagic/db_dumps"
RCLONE_CONF="/home/seba/.config/rclone/rclone.conf"
echo "--- Backup start: $DATE ---"
# 1. Zrzut bazy z kompresją
echo "Dumping database..."
DBS=$(docker exec postgres18 psql -U homeassistant -tAc "SELECT datname FROM pg_database WHERE datistemplate=false AND datname!='postgres' ORDER BY datname;" | tr '\n' ',')
echo "Databases: ${DBS%,}"
docker exec postgres18 pg_dumpall -U homeassistant | gzip > $BACKUP_DIR/db_dump_$DATE.sql.gz
SIZE=$(du -sh $BACKUP_DIR/db_dump_$DATE.sql.gz | cut -f1)
echo "Dump size: $SIZE"
# 2. Wysyłka do Google Drive
echo "Uploading to Google Drive..."
rclone --config $RCLONE_CONF copy $BACKUP_DIR/db_dump_$DATE.sql.gz $REMOTE_PATH
# 3. Usuwanie starych kopii na GDrive (zostawia 3 najnowsze)
echo "Cleaning old backups on GDrive..."
rclone --config $RCLONE_CONF lsf $REMOTE_PATH --format "tp" --separator ";" --files-only | sort | head -n -3 | while read -r line; do
FILENAME=$(echo $line | cut -d';' -f2)
echo "Deleting old remote file: $FILENAME"
rclone --config $RCLONE_CONF delete "$REMOTE_PATH/$FILENAME"
done
# 4. Usuwanie lokalne
find $BACKUP_DIR -type f -name "*.sql.gz" -mtime +1 -delete
DURATION=$(( $(date +%s) - $(date -d "${DATE:0:8} ${DATE:9:2}:${DATE:11:2}" +%s) ))
echo "Duration: ${DURATION}s"
echo "--- Backup finished: $(date) ---"