CodeGym /Corsi /SQL SELF /Tipi di backup in PostgreSQL: completo, incrementale, dif...

Tipi di backup in PostgreSQL: completo, incrementale, differenziale

SQL SELF
Livello 43, Lezione 1
Disponibile

Allora, immagina che il tuo database sia un enorme archivio di biblioteca con migliaia di libri. Un backup completo è come mandare ogni notte un corriere a copiare tutti i libri. Ma se quasi nulla è cambiato? Non solo è lento, ma stressa un sacco il trasporto e occupa un sacco di spazio. Ed è qui che entrano in gioco gli approcci incrementale e differenziale. Lavoriamo in modo più smart, copiando solo quello che è davvero cambiato.

Oggi vediamo questi tipi di backup:

  • Backup completo: copia completa del database.
  • Backup incrementale: copia solo le modifiche dall'ultimo backup.
  • Backup differenziale: copia le modifiche dall'ultimo backup completo.

Ognuno di questi approcci ha i suoi pro, contro e casi d'uso. Vediamoli insieme.

Backup completo

Il backup completo (o Full Backup) è una copia di sicurezza dell'intero database in un dato momento. Contiene sia la struttura del database (tabelle, indici, schemi), sia tutti i dati presenti. In parole povere, è uno "snapshot" istantaneo di tutto il database.

Esempio di comando per un backup completo:

pg_dump -U username -d database_name -F c -f full_backup.dump

Qui:

  • -U username — nome utente PostgreSQL.
  • -d database_name — nome del database.
  • -F c — formato del backup (custom, comodo per il restore con pg_restore).
  • -f full_backup.dump — nome del file dove viene salvata la copia di backup.

Scoprirai di più sul comando pg_dump e i suoi parametri nelle prossime lezioni :P

Vantaggi del backup completo:

  1. Facilità di ripristino. Se qualcosa va storto, il backup completo ti permette di ripristinare tutto il database in fretta.
  2. Snapshot completo dei dati. Può essere usato per spostare tutto il database su un altro server o ambiente.

Svantaggi del backup completo:

  1. Volume dei dati: il backup completo può essere enorme, soprattutto se hai tanti dati.
  2. Tempo di esecuzione: più dati hai, più tempo ci vuole per fare la copia.
  3. Spazio di archiviazione: ogni backup completo occupa spazio separato, e può mangiarsi un sacco di storage.

Quando usare il backup completo:

  • Quando crei la prima copia di backup.
  • Prima di fare grandi cambiamenti nel database.
  • Per archiviazione a lungo termine (fai un backup completo e lo mandi in uno storage "freddo").

Backup incrementali

Il backup incrementale (Incremental Backup) salva solo quei file che sono cambiati dall'ultimo backup — che sia completo o incrementale. Questo permette di risparmiare un sacco di spazio su disco e velocizza il processo di backup.

In PostgreSQL i backup incrementali si possono fare con lo strumento pgBackRest — una utility potente pensata per creare e gestire backup PostgreSQL con supporto per strategie complete, incrementali e differenziali.

Come funziona pgBackRest?

  • pgBackRest usa metadati e checksum dei file per capire cosa è cambiato.
  • Solo i file davvero modificati vengono inclusi nel backup incrementale.
  • Supporta l'archiviazione automatica dei file WAL, così puoi fare il restore fino al punto che ti serve.

Esempio di comando per backup incrementale:

pgbackrest --stanza=main --type=incr backup

Dove:

  • --stanza=main — nome della configurazione (set di parametri per un certo DB).
  • --type=incr — indica che si fa un backup incrementale.

Prima del primo backup incrementale devi per forza aver fatto un completo (--type=full).

Vantaggi dei backup incrementali con pgBackRest:

  1. Risparmio di spazio: vengono copiati solo i file modificati.
  2. Backup veloce: soprattutto se ci sono poche modifiche.
  3. Gestione automatica dei WAL: pgBackRest archivia e applica i file WAL da solo.
  4. Flessibilità nel restore: puoi scegliere il punto di ripristino (PITR).

Svantaggi e particolarità:

  1. Serve una configurazione iniziale: devi configurare stanza, la cartella del repository, i permessi.
  2. Non è semplicissimo per chi inizia: serve capire i WAL e l'architettura di PostgreSQL.
  3. Dipendenza dal repository: tutti i backup stanno centralizzati — è importante gestire bene lo storage.

Quando usare i backup incrementali:

  • Se il database viene aggiornato spesso.
  • Quando il backup completo è troppo pesante o ci mette troppo tempo.
  • Se vuoi una strategia di restore affidabile e automatica con il minimo sforzo.

Backup differenziali

Il backup differenziale (Differential Backup) salva tutte le modifiche avvenute dall'ultimo backup completo. La differenza rispetto all'incrementale è che ogni backup differenziale contiene tutte le modifiche a partire dall'ultimo backup completo. Quindi, per ripristinare il database, ti serve solo l'ultimo backup completo e l'ultimo differenziale.

Esempio di processo:

  1. Prima sera: si fa un backup completo (A).
  2. Seconda sera (B): si fa un backup differenziale — contiene le modifiche da A.
  3. Terza sera (C): si fa un backup differenziale — contiene ancora le modifiche da A.

Vantaggi:

  1. Facilità di ripristino: Per ripristinare il database servono solo il backup completo e l'ultimo differenziale.
  2. Più veloce del completo: Il backup differenziale è più rapido del completo, perché copia solo le modifiche.

Svantaggi:

  1. Dimensione del file di backup: Ogni nuovo backup differenziale cresce di dimensione, perché contiene tutte le modifiche dall'ultimo completo.
  2. Spazio su disco: A lungo andare può servire più spazio rispetto agli incrementali.

Il backup differenziale è utile quando vuoi semplificare il restore: tiene tutte le modifiche dall'ultimo completo. È comodo soprattutto se i dati cambiano spesso, ma fare sempre backup completi è troppo pesante in termini di tempo o risorse. In questi casi, l'approccio differenziale è un buon compromesso tra velocità e affidabilità.

Confronto tra i tipi di backup

Tipo di backup Completo Incrementale Differenziale
Volume dei dati Massimo Minimo Medio
Tempo di esecuzione Lungo Veloce Moderato
Ripristino Semplice Complicato (dipende da tutti i backup) Medio (serve l'ultimo completo e differenziale)
Quando usarlo Copia iniziale, migrazioni Backup frequenti in tempo reale Backup regolari

La scelta del tipo di backup dipende da quanto vuoi essere sicuro sui dati, da quanto spesso cambiano e dalle risorse che hai. Per database piccoli va bene il backup completo regolare. Se il database cresce, i backup incrementali ti fanno risparmiare spazio. E se per te è importante ripristinare in fretta, i backup differenziali possono essere la scelta migliore. L'importante è non dimenticare la regolarità e l'automazione!

2
Compito
SQL SELF, livello 43, lezione 1
Bloccato
Creazione di un backup completo del database
Creazione di un backup completo del database
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION