40 lines
1.6 KiB
Bash
Executable File
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) ---"
|