CodeGym /Corsi /SQL SELF /Configurazione dell'automazione dei backup con pg_...

Configurazione dell'automazione dei backup con pg_cron e cron su Linux

SQL SELF
Livello 44 , Lezione 0
Disponibile

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:

  1. cron — il classico e universale scheduler di task su Linux.
  2. 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:

  1. Assicurati di usare PostgreSQL 10+, perché pg_cron è supportato solo sulle versioni moderne.
  2. Installa l'estensione usando il package manager del tuo sistema. Su Ubuntu, ad esempio:

    sudo apt install postgresql-<version>-cron
    

    Sostituisci <version> con la versione di PostgreSQL che hai installato.

  3. Abilita l'estensione nella configurazione di PostgreSQL. Apri il file postgresql.conf e aggiungi:

    shared_preload_libraries = 'pg_cron'
    

    Perché serve? pg_cron ha bisogno che la libreria venga caricata all'avvio di PostgreSQL — è obbligatorio.

  4. Riavvia il server PostgreSQL:

    sudo systemctl restart postgresql
    
  5. Attiva 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 $$ $$: eseguiamo pg_dump per creare il backup del database university.

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 database university.
  • 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!

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