← Tutti gli articoliPHP e database

PHP e database

Dump mysql compresso in gzip e restore

Matteo Galacci ·

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_prova

Sostituisci 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.

Fonti e approfondimenti