Automatizzare i backup è come avere uno spazzolino da denti automatico, ma per il tuo database. Il processo regolare di backup salva il mondo (in questo caso — i tuoi dati) dalle catastrofi. Nessuno vuole ricevere alle 3 di notte un messaggio che il server è crashato, realizzando che l'ultimo backup risale a due settimane fa. L'automazione risolve questo problema: niente più compromessi e rischi per i dati a causa del fattore umano.
Ci sono un sacco di strumenti per automatizzare, ma oggi parliamo dei due più popolari:
cron— il classico e universale scheduler di task su Linux.pg_cron— un'estensione di PostgreSQL che ti permette di lanciare task direttamente dal server del database.
L'estensione pg_cron sotto il cofano chiama il servizio cron. Questo servizio è disponibile solo su Linux!
Andiamo!
Installazione di pg_cron
pg_cron è un'estensione di PostgreSQL che ti permette di schedulare task automatici direttamente nel database. È figo, comodo e porta il tuo PostgreSQL al livello di un piccolo centro operativo.
Passi per l'installazione:
- Assicurati di usare PostgreSQL 10+, perché
pg_cronè supportato solo sulle versioni moderne. Installa l'estensione usando il package manager del tuo sistema. Su Ubuntu, ad esempio:
sudo apt install postgresql-<version>-cronSostituisci
<version>con la versione di PostgreSQL che hai installato.Abilita l'estensione nella configurazione di PostgreSQL. Apri il file
postgresql.confe aggiungi:shared_preload_libraries = 'pg_cron'Perché serve?
pg_cronha bisogno che la libreria venga caricata all'avvio di PostgreSQL — è obbligatorio.Riavvia il server PostgreSQL:
sudo systemctl restart postgresqlAttiva l'estensione nel tuo database:
CREATE EXTENSION pg_cron;
A questo punto pg_cron è pronto all'uso!
Creazione di un job per il backup automatico
La cosa più forte di pg_cron è che puoi lanciare comandi a orari precisi. Facciamo un job che lancia pg_dump in automatico.
Esempio:
SELECT cron.schedule(
'backup_notturno', -- nome del job
'0 2 * * *', -- schedulazione (ogni notte alle 2)
$$pg_dump -U username -F c -f /backups/university_backup.dump university$$ -- comando
);
Spieghiamo la magia:
'backup_notturno'— è il nome custom del job, così lo riconosci subito.'0 2 * * *'— la schedulazione in formato cron: ogni giorno alle 2:00.- Il comando dentro
$$ $$: eseguiamopg_dumpper creare il backup del databaseuniversity.
Dopo aver creato il job, partirà secondo la schedulazione!
Visualizzare e cancellare i job di pg_cron
Per vedere tutti i job esistenti:
SELECT * FROM cron.job;
Se un job non ti serve più, puoi cancellarlo così:
SELECT cron.unschedule(job_id);
Sostituisci job_id con l'id del job che trovi dalla query sopra.
Usare cron per l'automazione
Se preferisci il classico approccio Linux all'automazione o pg_cron per qualche motivo non è disponibile, ti viene in soccorso il mitico cron.
Configurare un job con cron
Per prima cosa assicurati che cron sia installato e attivo:
sudo systemctl enable cron
sudo systemctl start cron
Ora aggiungiamo un job per il backup. Apri l'editor per configurare i job di cron:
crontab -e
Aggiungi questa riga:
0 2 * * * pg_dump -U username -F c -f /backups/university_backup.dump university
Questa riga magica fa questo:
- Alle 2 di notte ogni giorno (
0 2 * * *) crea il backup del databaseuniversity. - Tutti i backup vengono salvati nel file
/backups/university_backup.dump.
Dopo aver salvato il file crontab, il job schedulato partirà da solo.
Log di esecuzione di cron
A volte è utile sapere cosa è andato storto. Assicurati che l'output dei comandi venga scritto su un file di log per poterlo analizzare. Per farlo aggiungi il redirect dell'output al comando:
0 2 * * * pg_dump -U username -F c -f /backups/university_backup.dump university >> /var/log/backup.log 2>&1
Ora tutto quello che succede durante il job verrà salvato nel file /var/log/backup.log.
Confronto tra pg_cron e cron
Quindi, abbiamo due strumenti potenti. Come scegliere quello giusto?
pg_cronè perfetto se vuoi gestire la schedulazione e i job direttamente da PostgreSQL. È comodo, non devi uscire dal database e puoi scalare i job facilmente.cronè più universale. Puoi usarlo non solo per PostgreSQL, ma anche per automatizzare qualsiasi altra cosa.
| Caratteristica | pg_cron | cron |
|---|---|---|
| Facilità di integrazione | Integrato in PostgreSQL, ma richiede estensione | Funziona per qualsiasi processo |
| Installazione | Serve installare l'estensione | Già presente nella maggior parte dei sistemi Linux |
| Log | Salvati in PostgreSQL (tabella cron.job_run_details) |
Scritti nei log di sistema (di solito /var/log/syslog) |
| Flessibilità | Esegue solo SQL dentro PostgreSQL | Può lanciare qualsiasi comando, script o binario |
Verifica dell'esecuzione dei job
Per controllare che il backup funzioni, puoi lanciare il comando cron a mano:
pg_dump -U username -F c -f /backups/university_backup.dump university
È anche utile controllare che i file di backup siano presenti nella directory indicata, la loro dimensione e la data di creazione. Ad esempio:
ls -lh /backups/
Controlla regolarmente i log e assicurati che i job vengano eseguiti correttamente.
Protezione semplice dagli errori più comuni
Errore n°1: "Dimenticato di impostare i permessi!"
Se l'utente con cui gira cron non ha i permessi per eseguire pg_dump, i job non funzioneranno. Assicurati che l'utente abbia accesso al database.
Errore n°2: "Il file è finito nel posto sbagliato!"
Specifica sempre il percorso completo per file e comandi. cron non conosce il tuo ambiente — il percorso completo è obbligatorio: pg_dump -> /usr/bin/pg_dump.
Errore n°3: "Dove sono i miei log?"
Non dimenticare di reindirizzare l'output del comando su un file di log. Senza questo, non avrai nessuna info sui problemi.
A questo punto sei pronto per automatizzare i backup del tuo database. Ora, anche se il server decide di andare in vacanza all'improvviso, i tuoi dati saranno al sicuro!
GO TO FULL VERSION