CodeGym /Corsi /SQL SELF /Ripristino dei dati dopo un crash

Ripristino dei dati dopo un crash

SQL SELF
Livello 44 , Lezione 2
Disponibile

I crash possono essere di vario tipo: guasti hardware, blackout, errori nel codice o, cosa che succede spesso, la cancellazione accidentale del database da parte di un admin distratto che ha deciso di pulire "qualcosa di vecchio". In queste situazioni, i backup e un processo di ripristino ben rodato diventano la tua "bacchetta magica".

Vediamo insieme il processo di ripristino passo dopo passo, come se stessimo montando un mobile IKEA: niente panico e seguiamo le istruzioni alla lettera.

Passo 1. Analisi della causa del crash

Prima di correre a ripristinare i dati a tutta velocità, è importante capire cosa è successo esattamente.

  1. Errore dell'applicazione o del database?
    Controlla i log della tua applicazione e di PostgreSQL (di solito li trovi in /var/log/postgresql/ o in una directory simile a seconda del tuo sistema operativo). Cerca gli indicatori di errore.

  2. Guasto hardware?
    Se il server è fisicamente danneggiato (tipo problemi con l'hard disk), prima assicurati che l'hardware sia ok. Se il disco è rotto, collegane un altro e ripristina tutto da lì.

  3. Problemi di rete o di accesso?
    Se il crash è dovuto alla rete — probabilmente il tuo server non ha ancora bisogno di operazioni di ripristino.

  4. Fattore umano:
    Ammettilo... qualcuno ha lanciato DROP DATABASE? Se sì, abbiamo ancora una chance di recuperare i dati dal backup.

Ricorda che capire bene la causa del crash ti aiuterà a evitarlo in futuro.

Passo 2. Verifica della disponibilità dei backup

È il momento di assicurarci di avere il backup giusto. Trova gli ultimi backup del database che hai creato con pg_dump o pg_basebackup. Controlla che siano integri. Se non sai ancora come fare, ecco un breve promemoria:

  • Usa il comando ls -l per controllare la dimensione dei tuoi file. Se il file è insolitamente piccolo, potrebbe esserci un problema.
  • Controlla il file con il comando file. Per esempio:
    file backup_file.sql
    
    Dovresti vedere info sul file che indica che è un dump SQL.

Per un archivio tar controlla che sia estraibile:

tar -tf backup.tar

Nessun errore? Ottimo! Siamo pronti per andare avanti.

Passo 3. Stop di PostgreSQL

Prima di iniziare il ripristino, è importante fermare il server PostgreSQL per mettere tutto in sicurezza. Puoi farlo con questo comando (da admin del server):

sudo systemctl stop postgresql

Fermare il database garantisce che nessun processo interferisca con il ripristino.

Passo 4. Preparazione di un nuovo database per il ripristino

Se il tuo database è stato completamente cancellato o danneggiato, prima ricrealo da zero. Esempio di comando:

createdb -U postgres new_database

Sostituisci new_database con il nome del tuo database.

Passo 5. Ripristino dal backup

Vediamo i due scenari principali di ripristino:

  1. Se usi un backup SQL (pg_dump): Per ripristinare usa il comando

    psql -U username -d new_database -f backup_file.sql
    
  • username — il tuo utente PostgreSQL.
  • new_database — il database dove importare i dati.
  • backup_file.sql — il tuo file di backup.
  1. Se usi un backup binario (pg_basebackup o pg_dump con custom):
    Per ripristinare usa:
    pg_restore -U username -d new_database backup_file.dump
    
    Nota che questi backup non sono in formato testo, ma contengono dati "impacchettati".

Extra:

  • Se nel backup ci sono solo i dati, usa --data-only.
  • Se vuoi ripristinare solo la struttura, aggiungi --schema-only.

Passo 6. Avvio di PostgreSQL e test

Dopo aver lanciato il comando di ripristino, avvia il server:

sudo systemctl start postgresql

Ora è il momento di fare dei test. Prova a collegarti al database ripristinato tramite psql o pgAdmin. Fai qualche select per controllare che i dati siano ok:

SELECT * FROM your_table_name LIMIT 10;

Se tutto sembra a posto, congratulazioni: dati ripristinati!

Passo 7. Verifica dell'integrità dei dati

Dopo il ripristino è importante controllare che i dati siano integri. Per esempio:

  1. Confronta il numero di righe nelle tabelle con i backup:

    SELECT COUNT(*) FROM your_table_name;
    

    Confronta il risultato con quello che hai nel backup (se disponibile).

  2. Usa i checksum: Se prima avevi creato dei checksum per le tabelle, ora è il momento di confrontarli:

    md5sum backup_file.sql
    
  3. Controlla le relazioni tra le tabelle: Assicurati che le relazioni FOREIGN KEY ripristinate funzionino correttamente.

Passo 8. Test dell'applicazione

Ora controlla che la tua applicazione che usa questo database funzioni. Prova i principali scenari d'uso. Ci sono errori? Tutto si vede correttamente?

Esempi di errori reali di ripristino

Vediamo ora qualche caso pratico per capire come evitare problemi:

  1. Incompatibilità tra versioni di PostgreSQL.
    Immagina che il backup sia stato fatto con la versione 12 e il server sia stato aggiornato alla versione 15. Durante il ripristino incontrerai errori.
    Soluzione: usa la stessa versione di PostgreSQL con cui hai creato il backup, oppure consulta la documentazione sulla compatibilità: PostgreSQL Documentation.

  2. Backup danneggiato . Se il tuo backup è danneggiato, potresti perdere parte dei dati.
    Soluzione: usa la replica dei backup (tipo tenere più versioni).

  3. Errore nel ripristino di una tabella specifica.
    Se ripristini una tabella specifica ma mancano le dipendenze (tipo le foreign key), il processo può fallire.
    Soluzione: ripristina sempre le tabelle nell'ordine giusto, partendo da quelle "parent".

Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION