Automatyczny backup danych na Google Drive

Moderator: fracz

Awatar użytkownika
fracz
Posty: 2256
Rejestracja: pt paź 28, 2016 10:56 pm
Lokalizacja: Kraków

  1. Przełącz się na roota: sudo su
  2. Pobierz aplikację gdrive wybierając odpowiednią dystrybucję (w większośći linux-386, maliny linux-rpi), nadaj jej prawa wykonania i przenieś ją do /usr/bin. Przykładowo:

    Kod: Zaznacz cały

    wget -O gdrive https://docs.google.com/uc?id=0B3X9GlR6EmbnLV92dHBpTkFhTEU&export=download
    chmod +x gdrive
    mv gdrive /usr/bin
    
  3. Wróć do swojego użytkownika, który jest w grupie docker i wykonaj tam komendę

    Kod: Zaznacz cały

    gdrive about
    Pokaże się link, który należy skopiować do przeglądraki i uzyskać access code. Należy go podać w konsoli. Po tym działaniu komenda gdrive about powinna pokazywać Twoje konto na Google Drive i quotę a gdrive list - listę plików.
  4. Stwórz nieudostępniony katalog na swoim Google Drive do którego będą przesyłane backupy bazy. Po wejściu do niego w przeglądarce pokaże się adres postaci

    Kod: Zaznacz cały

    https://drive.google.com/drive/u/0/folders/0B0OnuB36CtoeknVRX2xRbS1sT1E
    Interesuje nas identyfikator katalogu - ostania część adresu URL, czyli w powyższym przypadku

    Kod: Zaznacz cały

    0B0OnuB36CtoeknVRX2xRbS1sT1E
    .
  5. Utwórz skrypt backupujący, np. w katalogu domowym: https://gist.github.com/fracz/3c58c9981 ... 2315a12014 Dostosuj zmienne na początku skryptu tak by zawierały prawdziwe informacje.
  6. Nadaj prawa wykonania do skryptu i spróbuj czy wszystko działa:

    Kod: Zaznacz cały

    chmod +x backup.sh
    ./backup.sh
  7. Dodaj do crontaba automatyczne wykonywanie skryptu backupującego. Poniższa konfiguracja wykonuje backup co 2 godziny.

    Kod: Zaznacz cały

    0 */2 * * * /home/unicorn/backup.sh > /home/unicorn/backup.log 2>&1
    Stare backupy są usuwane po liczbie dni skonfigurowanej w skrypcie.
Awatar użytkownika
makrz
Posty: 395
Rejestracja: wt lis 27, 2018 1:43 pm
Lokalizacja: Opole

Witam
Mój problem jest taki, że stare backupy nie są usuwane. Coś pomieszałem?
Pozdrawiam

Kod: Zaznacz cały

#!/usr/bin/env bash

# Sample crontab: 0 */2 * * * /home/unicorn/backup.sh > /home/unicorn/backup.log 2>&1

NOW=$(date +"%Y%m%d%H%M%S")
BACKUP_FILE=supla-$NOW.sql
GDRIVE_DIR=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
SUPLA_PATH=/home/pi/supla-docker
BACKUP_EXPIRATION_DAYS=2

cd "$(dirname "$0")"

source $SUPLA_PATH/.env && \
docker exec supla-db mysqldump -u root --password="$DB_PASSWORD" supla > $BACKUP_FILE && \
gzip $BACKUP_FILE && \
gdrive upload $BACKUP_FILE.gz --parent $GDRIVE_DIR --delete

sleep 5

OLD_BACKUPS=$(date -u -d "${BACKUP_EXPIRATION_DAYS} days ago" +"%Y-%m-%dT%H:%M:%SZ")

OBSOLETE_BACKUPS=$(gdrive list -m 1000 --query \
"(('${GDRIVE_DIR}' in parents) and trashed=false and modifiedTime < '$OLD_BACKUPS'" \
--order  "modifiedTime asc" --no-header | cut -d ' ' -f1)

while read -r OBSOLETE_BACKUP_ID; do
  if [ ! -z "$OBSOLETE_BACKUP_ID" ]; then
    echo Deleting $OBSOLETE_BACKUP_ID
    gdrive delete $OBSOLETE_BACKUP_ID
  fi
done <<< "$OBSOLETE_BACKUPS"
i mam tak:

Kod: Zaznacz cały

pi@SUPLA-SERWER:~ $ ./backup.sh
Uploading supla-20220327202839.sql.gz
Uploaded xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx at 3.3 MB/s, total 4.1 MB
Removed supla-20220327202839.sql.gz
Deleting Failed
Failed to get file: googleapi: Error 404: File not found: Failed., notFound
pi@SUPLA-SERWER:~ $
ODPOWIEDZ

Wróć do „supla-docker”