Ricerca nel sito web

Come eseguire il backup e il ripristino di un database PostgreSQL


In un ambiente di produzione, non importa quanto grande o piccolo possa essere il tuo database PostgreSQL, il backup regolare è un aspetto essenziale della gestione del database. In questo articolo imparerai come eseguire il backup e ripristinare un database PostgreSQL.

Supponiamo che tu abbia già un'installazione funzionante del sistema di database PostgreSQL. In caso contrario, leggi i nostri articoli seguenti per installare PostgreSQL sulla tua distribuzione Linux.

Iniziamo…

Eseguire il backup di un singolo database PostgreSQL

PostgreSQL fornisce l'utilità pg_dump per aiutarti a eseguire il backup dei database. Genera un file di database con comandi SQL in un formato che può essere facilmente ripristinato in futuro.

Per eseguire il backup di un database PostgreSQL, inizia accedendo al server del database, quindi passa all'account utente Postgres ed esegui pg_dump come segue (sostituisci tecmintdb con il nome del database di cui desideri eseguire il backup). Per impostazione predefinita, il formato di output è un file di script SQL di testo semplice.

pg_dump tecmintdb > tecmintdb.sql

pg_dump supporta anche altri formati di output. Puoi specificare il formato di output utilizzando l'opzione -F, dove c significa file di archivio in formato personalizzato, d significa archivio in formato directory e t significa file di archivio in formato tar: tutti i formati sono adatti per essere inseriti in pg_restore.

Per esempio:

pg_dump -F c tecmintdb > tecmintdb.dump
OR
pg_dump -F t tecmintdb > tecmintdb.tar

Per eseguire il dump dell'output nel formato di output della directory, utilizzare il flag -f (che viene utilizzato per specificare il file di output) per specificare la directory di destinazione invece di un file. La directory che verrà creata da pg_dump non deve esistere.

pg_dump -F d tecmintdb -f tecmintdumpdir	

Per eseguire il backup di tutti i database PostgreSQL, utilizzare lo strumento pg_dumpall come mostrato.

pg_dumpall > all_pg_dbs.sql

Puoi ripristinare il dump utilizzando psql come mostrato.

psql -f all_pg_dbs.sql postgres

Ripristino di un database PostgreSQL

Per ripristinare un database PostgreSQL, puoi utilizzare le utilità psql o pg_restore. psql viene utilizzato per ripristinare file di testo creati da pg_dump mentre pg_restore viene utilizzato per ripristinare un database PostgreSQL da un archivio creato da pg_dump< in uno dei formati non di testo normale (personalizzato, tar o directory).

Ecco un esempio di come ripristinare un dump di un file di testo semplice:

psql tecmintdb < tecmintdb.sql

Come accennato in precedenza, un dump in formato personalizzato non è uno script per psql, quindi deve essere ripristinato con pg_restore come mostrato.

pg_restore -d tecmintdb tecmintdb.dump
OR
pg_restore -d tecmintdb tecmintdb.tar
OR
pg_restore -d tecmintdb tecmintdumpdir	

Backup del database PostgreSQL compresso

Se il database di cui stai effettuando il backup è grande e desideri generare un file di output abbastanza più piccolo, puoi eseguire un dump compresso in cui devi filtrare l'output di pg_dump tramite uno strumento di compressione come gzip o uno dei tuoi preferiti:

pg_dump tecmintdb | gzip > tecmintdb.gz

Se il database è estremamente grande, puoi eseguire il dump in parallelo scaricando simultaneamente le tabelle number_of_jobs utilizzando il flag -j, come mostrato.

pg_dump -F d -j 5 -f tecmintdumpdir

È importante notare che l'opzione di dump parallelo riduce il tempo del dump, ma d'altro canto aumenta anche il carico sul server del database.

Backup di database PostgreSQL remoti

pg_dump è un normale strumento client PostgreSQL, supporta operazioni su server di database remoti. Per specificare il server del database remoto pg_dump che deve contattare, utilizza le opzioni della riga di comando -h per specificare l'host remoto e -p specifica il server remoto porta su cui è in ascolto il server del database. Inoltre, utilizza il flag -U per specificare il nome del ruolo del database con cui connettersi.

Ricordati di sostituire 10.10.20.10 e 5432 e tecmintdb rispettivamente con l'indirizzo IP o il nome host dell'host remoto, la porta del database e il nome del database.

pg_dump -U tecmint -h 10.10.20.10 -p 5432 tecmintdb > tecmintdb.sql

Assicurati che l'utente che si connette in remoto disponga dei privilegi richiesti per accedere al database e che il metodo di autenticazione del database appropriato sia configurato sul server del database, altrimenti verrà visualizzato un errore come quello mostrato nello screenshot seguente.

È anche possibile eseguire il dump di un database direttamente da un server a un altro, utilizzando le utility pg_dump e psql come mostrato.

pg_dump -U tecmint -h 10.10.20.10 tecmintdb | pqsl -U tecmint -h 10.10.20.30 tecmintdb

Backup automatico del database PostgreSQL utilizzando un lavoro Cron

Puoi eseguire backup a intervalli regolari utilizzando processi cron. I lavori Cron sono un mezzo comunemente utilizzato per pianificare vari tipi di attività da eseguire su un server.

Puoi configurare un processo cron per automatizzare il backup del database PostgreSQL come segue. Tieni presente che devi eseguire i seguenti comandi come superutente PostgreSQL:

mkdir -p /srv/backups/databases

Successivamente, esegui il comando seguente per modificare il crontab per aggiungere un nuovo processo cron.

crontab -e

Copia e incolla la seguente riga alla fine del crontab. È possibile utilizzare uno qualsiasi dei formati di dump spiegati sopra.

0 0 * * *  pg_dump  -U postgres tecmintdb > /srv/backups/postgres/tecmintdb.sql

Salvare il file ed uscire.

Il servizio cron inizierà automaticamente a eseguire questo nuovo lavoro senza riavviare. E questo lavoro cron verrà eseguito ogni giorno a mezzanotte, è una soluzione minima all'attività di backup.

Per ulteriori informazioni su come pianificare i processi cron, vedere: Come creare e gestire processi cron su Linux

Per ora è tutto! È una buona idea rendere il backup dei dati parte della routine di gestione del database. Per contattarci per qualsiasi domanda o commento, utilizza il modulo di feedback qui sotto. Per ulteriori informazioni, consultare le pagine di riferimento pg_dump e pg_restore.