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.
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.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ì.Problemi di rete o di accesso?
Se il crash è dovuto alla rete — probabilmente il tuo server non ha ancora bisogno di operazioni di ripristino.Fattore umano:
Ammettilo... qualcuno ha lanciatoDROP 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 -lper controllare la dimensione dei tuoi file. Se il file è insolitamente piccolo, potrebbe esserci un problema. - Controlla il file con il comando
file. Per esempio:
Dovresti vedere info sul file che indica che è un dump SQL.file backup_file.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:
Se usi un backup SQL (
pg_dump): Per ripristinare usa il comandopsql -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.
- Se usi un backup binario (
pg_basebackupopg_dumpconcustom):
Per ripristinare usa:
Nota che questi backup non sono in formato testo, ma contengono dati "impacchettati".pg_restore -U username -d new_database backup_file.dump
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:
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).
Usa i checksum: Se prima avevi creato dei checksum per le tabelle, ora è il momento di confrontarli:
md5sum backup_file.sqlControlla 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:
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.Backup danneggiato . Se il tuo backup è danneggiato, potresti perdere parte dei dati.
Soluzione: usa la replica dei backup (tipo tenere più versioni).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".
GO TO FULL VERSION