Questo esempio crea un dump dei dati e della struttura di un database MySQL con tabelle InnoDB, poi ne prova il ripristino. Servono client MySQL compatibili, gzip, Bash e account autorizzati. Durante il dump evita modifiche allo schema; per routine ed eventi aggiungi le opzioni e i privilegi appropriati alla tua strategia di backup.
1. Esporta senza promuovere file incompleti
Salva come backup.sh, sostituisci account e database ed esegui bash backup.sh:
#!/usr/bin/env bash
set -euo pipefail
umask 077
backup_dir=$(mktemp -d ./backup-mysql.XXXXXX)
mysqldump -h localhost -u backup -p --single-transaction --no-tablespaces nome_db \
| gzip > "$backup_dir/dump.sql.gz.partial"
gzip -t "$backup_dir/dump.sql.gz.partial"
mv -- "$backup_dir/dump.sql.gz.partial" "$backup_dir/dump.sql.gz"
printf 'Backup completato: %s\n' "$backup_dir/dump.sql.gz"Il percorso casuale evita di sovrascrivere un backup precedente. La password viene richiesta. In caso di errore lo script si ferma e l’eventuale file .partial non va considerato un backup valido. Conserva la copia riuscita anche fuori dal server.
2. Ripristina su un database di prova
Crea un database vuoto e isolato, ad esempio restore_prova. Usa soltanto un dump fidato: istruzioni SQL importate possono modificare dati. Il dump qui sopra, senza --databases, non aggiunge CREATE DATABASE e USE per cambiare destinazione.
set -o pipefail
gzip -dc ./backup-mysql.XXXXXX/dump.sql.gz | mysql -h localhost -u restore -p restore_provaSostituisci XXXXXX con la directory realmente creata. Il comando deve terminare con codice 0. Per dump di altri produttori controlla prima quali database vengono selezionati dalle istruzioni SQL.
3. Controlla i dati
Confronta SHOW TABLES e il conteggio di una tabella nota fra origine e copia. Prova una lettura dell’applicazione sul database ripristinato. gzip -t verifica solo la compressione, non la completezza del database. Le tabelle non transazionali richiedono una strategia di consistenza diversa.