Backup e ripristino del database PostgreSQL e MySQL
Il backup è una delle procedure chiave che garantisce la sicurezza dei dati. Anche con un hosting affidabile, possono verificarsi errori dell'applicazione, aggiornamenti errati o cancellazioni accidentali dei dati.
In questa guida, mostreremo come creare e ripristinare backup di database PostgreSQL e MySQL utilizzando le utility standard da riga di comando — pg_dump e mysqldump.
1. Backup di PostgreSQL
1.1. Cos'è pg_dump
pg_dump è un'utilità standard di PostgreSQL per creare un backup logico del database. Salva sia la struttura (DDL) che i dati (DML) in un file SQL di testo che può essere utilizzato successivamente per il ripristino.
1.2. Sintassi del comando
pg_dump -U <user> -h <host> -p <port> -d <database> -F p -f <path_to_file.sql>
1.3. Esempio di backup
pg_dump -U myuser -h localhost -d mydatabase -F p -f /backups/mydatabase_$(date +%F).sql
Spiegazione dei parametri:
- -U myuser — nome utente di PostgreSQL;
- -h localhost — host del server (può essere specificato l'IP);
- -d mydatabase — nome del database;
- -F p — formato di output (plain — SQL regolare);
- -f — percorso del file in cui verrà salvato il backup;
- $(date +%F) — aggiunge la data corrente al nome del file (es. 2025-11-03).
1.4. Backup compresso
Per ridurre la dimensione del file, è possibile utilizzare la compressione gzip:
pg_dump -U myuser mydatabase | gzip > /backups/mydatabase_$(date +%F).sql.gz
2. Ripristino del Database PostgreSQL
2.1. Utilizzando psql
Per ripristinare un database da un backup di testo, utilizzare:
psql -U myuser -d mydatabase -f /backups/mydatabase_2025-11-03.sql
Se il backup è compresso:
gunzip -c /backups/mydatabase_2025-11-03.sql.gz | psql -U myuser -d mydatabase
2.2. Se il database non esiste
Creare prima un nuovo database:
createdb -U myuser newdatabase
psql -U myuser -d newdatabase -f /backups/mydatabase_2025-11-03.sql
3. Backup di MySQL
3.1. Cos'è mysqldump
mysqldump è un'utilità standard per creare dump di MySQL. Salva i comandi SQL necessari per ricreare le tabelle e inserire i dati.
3.2. Sintassi del comando
mysqldump -u <user> -p -h <host> <database> > <path_to_file.sql>
3.3. Esempio di backup
mysqldump -u myuser -p mydatabase > /backups/mydatabase_$(date +%F).sql
Spiegazione dei parametri:
- -u myuser — nome utente di MySQL;
- -p — richiede una password;
- mydatabase — nome del database;
- > — reindirizza l'output a un file.
3.4. Dump compresso
mysqldump -u myuser -p mydatabase | gzip > /backups/mydatabase_$(date +%F).sql.gz
4. Ripristino del Database MySQL
4.1. Ripristino da file SQL
mysql -u myuser -p mydatabase < /backups/mydatabase_2025-11-03.sql
4.2. Se il database non esiste
Creare un nuovo database prima del ripristino:
mysql -u myuser -p -e "CREATE DATABASE newdatabase;"
mysql -u myuser -p newdatabase < /backups/mydatabase_2025-11-03.sql
4.3. Ripristino da dump compresso
gunzip -c /backups/mydatabase_2025-11-03.sql.gz | mysql -u myuser -p mydatabase
5. Automazione e Raccomandazioni di Sicurezza
5.1. Backup Automatici con Cron
Per processi di backup regolari senza intervento manuale, impostare l'automazione utilizzando cron.
Configurazione base di cron:
# Apri l'editor di cron crontab -e
Aggiungi una riga, per esempio:
0 2 * * * /usr/local/bin/db_backup.sh
Questo comando eseguirà lo script giornalmente alle 2:00 AM.
Approccio avanzato utilizzando uno script. Creare /usr/local/bin/db_backup.sh:
#!/bin/bash DATE=$(date +%F) BACKUP_DIR="/backup/$DATE" mkdir -p $BACKUP_DIR # Backup di PostgreSQL pg_dump -U myuser mydatabase | gzip > $BACKUP_DIR/postgres_mydatabase.sql.gz # Backup di MySQL mysqldump -u myuser -p mydatabase | gzip > $BACKUP_DIR/mysql_mydatabase.sql.gz # Rimuovi backup più vecchi di 7 giorni find /backup/ -type f -mtime +7 -delete
Rendere lo script eseguibile:
chmod +x /usr/local/bin/db_backup.sh
E aggiungere a cron:
0 2 * * * /usr/local/bin/db_backup.sh
5.2. Raccomandazioni di Sicurezza e Archiviazione
- Archiviazione fuori server: archiviare i backup in cloud storage (AWS S3, Google Cloud) o su unità esterne.
- Controllo degli accessi: limitare l'accesso alla cartella /backups, poiché i file possono contenere dati riservati.
chmod 700 /backup
chmod 600 /backup/*.sql.gz
- Verifica dell'integrità: eseguire ripristini di prova mensili per verificare la funzionalità del backup.
- Riservatezza: i file di backup contengono contenuti del database — trattarli come informazioni riservate.
Conclusione
Utilizzare pg_dump e mysqldump è un modo semplice, affidabile e universale per eseguire il backup di database PostgreSQL e MySQL. Questi strumenti sono adatti sia per backup manuali che per processi automatizzati con il minimo sforzo.
I backup regolari sono la chiave per la stabilità del tuo progetto e la sicurezza dei dati.