Quando gestiamo un database, uno dei fattori importanti è saper gestire i dati in esso contenuti. In questa guida vedremo come esportare tabelle specifiche, intere basi dati e come creare un sistema di backup compresso e automatico. Queste operazioni possono essere utili anche per migrare basi dati da un server ad un altro o per duplicare un ambiente.
Note sulla compatibilità
Se si sta utilizzando MariaDB dalla versione 10.x in poi, quando vengono lanciati i comandi (ad esempio mysql o msqldump) viene visualizzato un messaggio “comando deprecato“. Questo, in quanto MariaDB, ha introdotto come utility predefinite mariadb e mariadb-dump.
Perché è importante? Anche se la sintassi è quasi identica, mariadb-dump è l’unico in grado di gestire correttamente le funzionalità avanzate di MariaDB, come le Invisible Columns o il motore Aria. In questa guida utilizzeremo i comandi di MariaDB, nel caso si stia utilizzando MySQL sostituire il comando corrispondente.
Esportazione e Importazione manuale
Iniziamo vedendo il comando per esportare l’intero database che faremo tramite l’utility mariadb-dump (mysqldump se si sta utilizzando MySQL)
mariadb-dump -u [utente] -p [nome_db] > backup_db.sqlPer database di grandi dimensioni che utilizzano InnoDB, aggiungi il flag –single-transaction per evitare il blocco delle tabelle durante l’operazione
mariadb-dump -u [utente] -p [nome_db] --single-transaction --quick > backup_db.sqle possiamo anche aggiungere la compressione del file per risparmiare spazio su disco
mariadb-dump -u [utente] -p [nome_db] --single-transaction | gzip > backup_db.sql.gzCome verificare se il database utilizza InnoDB? Colleghiamoci al database
mariadb -u root -ped eseguiamo la seguente query
SELECT table_name, engine
FROM information_schema.tables
WHERE table_schema = 'NomeDatabase';il risultato sarà l’elenco delle tabelle presenti nel database con il relativo motore
+--------------------------------------+--------+
| table_name | engine |
+--------------------------------------+--------+
| Tabella001 | InnoDB |
| Tabella002 | InnoDB |
| Tabella003 | InnoDB |
+--------------------------------------+--------+
3 rows in set (0.003 sec)Se invece è necessario estrarre solo alcune tabelle (es. clienti e ordini), vanno semplicemente elencate dopo il nome del database
mariadb-dump -u [utente] -p [nome_db] clienti ordini > backup_tabelle.sqlOra vediamo come importare i dati esportati. Per prima cosa va creato il database di destinazione qualora non esiste già
mariadb -u root -p
CREATE DATABASE [NomeNuovoDatabase];
EXIT;e di seguito vediamo come importare i dati nei 3 casi di esportazione che abbiamo visto in precedenza.
Importazione dell’intero database
mariadb -u [utente] -p [nuovo_db] < backup_db.sqlImportazione dell’intero database compresso
gunzip < backup_db.sql.gz | mariadb -u [utente] -p [nome_db]Importazione di tabelle specifiche
mariadb -u [utente] -p [nuovo_db] < backup_tabelle.sqlAutomatizzare l’esportazione
Abbiamo fin qui visto come fare l’esportazione e l’importazione dei dati in modo manuale. Ora vediamo uno script Bash che esporta, comprime in tempo reale e gestisce la rotazione dei file con gli export per non esaurire lo spazio su disco. Creiamo un nuovo file
vi backup_db.shcon il seguente contenuto
#!/bin/bash
# --- CONFIGURAZIONE ---
USER="tuo_utente"
PASSWORD="tua_password"
DATABASE="nome_tuo_db"
BACKUP_DIR="percorso_backup"
DATA=$(date +"%Y-%m-%d_%H%M")
GIORNI_CONSERVAZIONE=7
# Crea la cartella se non esiste
mkdir -p $BACKUP_DIR
# --- ESECUZIONE (Esportazione + Compressione) ---
echo "Inizio backup compresso per $DATABASE..."
# Il comando mariadb-dump viene passato direttamente a gzip
mariadb-dump -u $USER -p$PASSWORD $DATABASE --single-transaction --quick | gzip > $BACKUP_DIR/${DATABASE}_${DATA}.sql.gz
if [ $? -eq 0 ]; then
echo "Backup creato: ${DATABASE}_${DATA}.sql.gz"
else
echo "ERRORE durante il backup!"
exit 1
fi
# Rimuove i file più vecchi di 7 giorni
find $BACKUP_DIR -type f -name "*.sql.gz" -mtime +$GIORNI_CONSERVAZIONE -delete
echo "Pulizia completata."assegniamo al file i permessi di esecuzione
chmod +x backup_db.she scheduliamo l’esecuzione con cron (crontab -e) tutte le notti alle 03:00
00 03 * * * /percorso/backup_db.sh >> /var/log/backup_db.log 2>&1Qualche consiglio sulla sicurezza
- Regola del 3-2-1: Non tenere i backup solo sul server di produzione. Usa tool come scp o rsync per inviare una copia del backup su un altro sistema o cloud storage esterno
- Test di Ripristino: Un backup è utile solo se funziona. Sembra un’affermazione banale ma occorre periodicamente effettuare anche dei test di restore dei backup effettuati automaticamente per verificarne l’integrità
- Evitare Password in chiaro: Invece di scrivere la password nello script, usa un file ~/.my.cnf nella tua home directory con permessi 600
[client]
user=tuo_utente
password=tua_passwordImportante: assicurati che il file abbia permessi 600 (lettura e scrittura solo per il proprietario), altrimenti MariaDB potrebbe ignorarlo per motivi di sicurezza
chmod 600 ~/.my.cnfora lo script è più pulito e sicuro, poiché non contiene credenziali “in chiaro”
#!/bin/bash
# --- CONFIGURAZIONE ---
# Non serve specificare USER e PASSWORD qui, verranno letti da ~/.my.cnf
DATABASE="nome_tuo_db"
BACKUP_DIR="percorso_backup"
DATA=$(date +"%Y-%m-%d_%H%M")
GIORNI_CONSERVAZIONE=7
# Crea la cartella se non esiste
mkdir -p $BACKUP_DIR
# --- ESECUZIONE ---
echo "Inizio backup compresso per il database: $DATABASE..."
# mariadb-dump leggerà automaticamente le credenziali da ~/.my.cnf
mariadb-dump $DATABASE --single-transaction --quick | gzip > $BACKUP_DIR/${DATABASE}_${DATA}.sql.gz
# Verifica esito
if [ $? -eq 0 ]; then
echo "Backup completato con successo: ${DATABASE}_${DATA}.sql.gz"
else
echo "ERRORE durante il backup! Controlla ~/.my.cnf o i permessi del database."
exit 1
fi
# Rimuove i file più vecchi di 7 giorni
find $BACKUP_DIR -type f -name "*.sql.gz" -mtime +$GIORNI_CONSERVAZIONE -delete
echo "Pulizia vecchi backup completata."Conclusione: La prevenzione è la tua miglior strategia
In un ecosistema digitale dinamico con cui ci dobbiamo confrontare ogni giorno, l’efficienza nella gestione dei dati passa inevitabilmente per l’automazione e la sicurezza. Adottare i comandi nativi MariaDB, proteggere le credenziali con il file ~/.my.cnf e implementare script di backup compressi non sono solo accorgimenti tecnici, ma pilastri fondamentali per la continuità del tuo business o del tuo progetto personale.
Ricorda: il miglior backup è quello che non devi ricordarti di fare, ma che è pronto a salvarti quando meno te lo aspetti.
