Backup di PostgreSQL/MySQL su un servizio di archiviazione cloud
Introduzione
Il backup dei database è una delle procedure più importanti per garantire la sicurezza e l'affidabilità di siti web e applicazioni. La perdita di dati può verificarsi per molte ragioni: guasti al server, errori dell'amministratore, problemi di aggiornamento, malware o semplicemente errori umani. Effettuare backup regolari consente di ripristinare rapidamente il proprio progetto senza perdita di dati.
Questa guida spiega come eseguire il backup dei database PostgreSQL e MySQL, come archiviare i backup su un server Linux remoto utilizzando rsync o scp e come caricarli su un servizio di archiviazione cloud utilizzando rclone.
Backup di PostgreSQL
PostgreSQL mette a disposizione l’utilità standard pg_dump, che consente di creare una copia completa del database sotto forma di file SQL.
Esempio di creazione di un backup:
pg_dump -U myuser -h localhost mydatabase > /backup/mydatabase_$(date +%F).sql
Spiegazione dei parametri:
-U myuser— nome utente del database-h localhost— indirizzo del server (può essere omesso se locale)mydatabase— nome del database/backup/...— percorso di destinazione$(date +%F)— aggiunge la data corrente al nome del file
Per risparmiare spazio, comprimere immediatamente il backup:
pg_dump -U myuser mydatabase | gzip > /backup/mydatabase_$(date +%F).sql.gz
Per eseguire il backup di tutti i database presenti sul server:
pg_dumpall -U myuser | gzip > /backup/postgres_all_$(date +%F).sql.gz
Backup di MySQL
Per MySQL e MariaDB, utilizzare l'utilità mysqldump.
Esempio di backup di un singolo database:
mysqldump -u myuser -p mydatabase > /backup/mydatabase_$(date +%F).sql
Quando si esegue questo comando, il sistema richiederà la password dell'utente.
Per eseguire il backup di tutti i database:
mysqldump -u myuser -p --all-databases | gzip > /backup/mysql_all_$(date +%F).sql.gz
Per includere le procedure memorizzate e i trigger, aggiungere le opzioni --routines --triggers.
Backup su CloudBox
CloudBox di INTROSERV è una soluzione di archiviazione cloud che supporta diversi protocolli di connessione (tra cui rsync, scp, rsync su SSH, WebDAV). La facilità d’uso di CloudBox semplifica notevolmente le operazioni di caricamento, gestione e recupero dei dati.
È possibile utilizzarlo come posizione remota per l’archiviazione dei backup dei database. Di seguito sono riportati i dettagli di configurazione ed esempi di script.
Passaggio 1. Ottenere l’accesso a CloudBox
Ordina uno dei piani CloudBox disponibili sul nostro sito web — introserv.com
Dopo il pagamento, il servizio sarà disponibile in pochi minuti. Una volta attivato il servizio, riceverai i dettagli di connessione:
- indirizzo del server (
box#####.introserv.cloud) - nome utente (
box#####) e password
Passaggio 2. Connessione e sincronizzazione tramite rsync o scp
Utilizzo di rsync (consigliato):
rsync -avz -e "ssh -p 22" /backup/ user@cloudbox-server:/path_to_cloudbackups/
Dove:
user— nome utente CloudBoxcloudbox-server— indirizzo di connessione/path_to_cloudbackups/— percorso su CloudBox
Per un funzionamento automatizzato, è consigliabile configurare le chiavi SSH:
- Generare una chiave pubblica:
ssh-keygen -t rsa - Copiare il contenuto del file della chiave pubblica creata, ad esempio
/root/.ssh/id_rsa.pub, negli appunti. - Vai alla sezione "Profilo" (passa il mouse sull'icona utente in alto a destra), aggiungi il contenuto della chiave nel campo "Chiavi pubbliche" e salva le impostazioni.


A questo punto, rsync funzionerà senza richiedere la password, il che è comodo per i cron job.
Alternativa — scp:
scp /backup/mysql_mydatabase.sql.gz user@cloudbox-server:/path_to_cloudbackups/
Passaggio 3. Connessione e sincronizzazione tramite rclone
Se desideri utilizzare rclone per interagire con CloudBox, configuralo come segue:
- Installa rclone:
sudo apt install rclone - Avvia la configurazione:
rclone config
Durante l'installazione, seleziona:
n— per creare un nuovo nome remoto- , ad esempio
cloudbox - tipo di archiviazione — scegliere
sftpossh - inserire l'indirizzo del server nel formato
box#####.introserv.cloud, il nome utente nel formatobox#####, la porta (in questo caso la porta SSH — predefinita 22) e il percorso della directory - eseguire l’autenticazione (se richiesta)
Verifica la connessione:
rclone ls cloudbox:/path_to_cloudbackups/
Copia i dati di backup:
rclone copy /backup/ cloudbox:/db-backups/ --progress
Sincronizza eliminando i file mancanti localmente:
rclone sync /backup/ cloudbox:/db-backups/ --progress
Se necessario, crittografare i file prima del trasferimento:
rclone copy /backup/ cloudbox:/db-backups/ --progress --crypt
Passaggio 4. Esempio di script di automazione con CloudBox
Crea lo script /usr/local/bin/db_backup_cloudbox.sh, ad esempio:
#!/bin/bash DATE=$(date +%F) BACKUP_DIR="/backup/$DATE" mkdir -p $BACKUP_DIR # PostgreSQL pg_dump -U myuser mydatabase | gzip > $BACKUP_DIR/postgres_mydatabase.sql.gz # MySQL mysqldump -u myuser -p mydatabase | gzip > $BACKUP_DIR/mysql_mydatabase.sql.gz # Upload to CloudBox rsync -avz -e "ssh -p 22" $BACKUP_DIR/ user@cloudbox-server:/path_to_cloudbackups/$DATE/ # Upload to CloudBox (rclone option, uncomment if used) # rclone copy $BACKUP_DIR/ cloudbox:/db-backups/$DATE/ --progress # Remove backups older than 7 days find /backup/ -type f -mtime +7 -delete
Quindi aggiungere un'attività cron (nell'esempio, lo script viene eseguito ogni giorno alle 2:00 del mattino):
0 2 * * * /usr/local/bin/db_backup_cloudbox.sh
Considerazioni importanti:
- Assicurarsi che la connessione a CloudBox sia stabile e che la larghezza di banda sia sufficiente.
- Configurare il monitoraggio: verificare che i file vengano effettivamente copiati.
- Verificare periodicamente il ripristino dai backup di CloudBox.
- Quando si utilizzano dati riservati, valutare la possibilità di crittografare i backup.
Copia su un server Linux remoto tramite SSH
Se si desidera archiviare i backup non solo localmente ma anche su un altro server, utilizzare rsync o scp.
Utilizzo di rsync (consigliato, poiché copia solo le modifiche):
rsync -avz -e "ssh -p 22" /backup/ [email protected]:/remote_backups/
Spiegazione dei parametri:
user— nome utente sul server remotoremote.server— indirizzo IP o nome di dominio del server remoto/remote_backups/— percorso in cui archiviare i backup
Per operare senza inserire la password, configurare le chiavi SSH:
# Generate SSH keys: ssh-keygen -t rsa # Copy key to remote server: ssh-copy-id [email protected]
A questo punto, rsync funzionerà senza richiedere la password, il che è comodo per i lavori cron.
Alternativa a rsync — utilizzo di scp:
scp /backup/mysql_mydb.sql.gz [email protected]:/remote_backups/
Copia su un servizio di archiviazione cloud tramite rclone
Se è necessario archiviare i backup nel cloud (Google Drive, Dropbox, Amazon S3, ecc.), utilizzare rclone — uno strumento universale per la sincronizzazione dei dati con vari servizi cloud.
Installazione:
sudo apt install rclone
Configurazione:
rclone config
Segui i passaggi della configurazione interattiva:
- Selezionare
nper creare una nuova connessione - Inserisci un nome, ad esempio "
remote" - Selezionare il tipo di archiviazione (ad es.
s3,drive,dropbox) - Inserisci le chiavi di accesso o autorizza tramite browser
Verifica la connessione:
rclone ls remote:path
Esempio di caricamento dei backup sul cloud:
rclone copy /backup/ remote:db-backups/ --progress
Comando di sincronizzazione (rimuove i file mancanti localmente):
rclone sync /backup/ remote:db-backups/ --progress
È anche possibile crittografare i file prima del caricamento:
rclone copy /backup/ remote:db-backups/ --progress --crypt
Sicurezza e controllo
- Archivia i backup in almeno due posizioni: localmente e in remoto.
- Verificare regolarmente che i backup vengano creati e caricati correttamente.
- Eseguire ripristini di prova almeno una volta al mese.
- Crittografare i file contenenti dati sensibili se si utilizzano cloud pubblici:
gpg -c /backup/mysql_mydatabase.sql.gz - Assicurarsi che le autorizzazioni dei file per la cartella
/backupsiano corrette e proteggere le credenziali del database.
Ripristino dal backup
PostgreSQL:
gunzip < backup.sql.gz | psql -U myuser -d mydatabase
MySQL:
gunzip < backup.sql.gz | mysql -u myuser -p mydatabase
Conclusione
Il backup dei database PostgreSQL e MySQL è una procedura semplice ma di fondamentale importanza. Anche l'infrastruttura più affidabile non può proteggervi da errori umani o guasti tecnici. La strategia migliore consiste nell'effettuare backup automatici regolari, archiviati su almeno un server esterno e nel cloud, con test periodici di ripristino.
Utilizzando una combinazione di pg_dump, mysqldump, rsync, rclone e cron, è possibile creare un sistema di backup affidabile e completamente automatizzato senza ricorrere a software di terze parti a pagamento. Questo approccio è facile da implementare e adatto a tutti i sistemi Linux.