- 1 1. Introduzione
- 2 2. Uso base di mysqldump
- 3 3. Varianti di esportazione
- 4 4. Opzioni più Usate e le Loro Spiegazioni
- 5 5. Come Importare un File di Esportazione
- 6 6. Consigli pratici e precauzioni
- 7 7. Domande frequenti (FAQ)
- 8 8. Conclusion
1. Introduzione
MySQL è uno dei sistemi di gestione di database relazionali (RDBMS) più ampiamente utilizzati per servizi web e applicazioni aziendali. I database costruiti con MySQL spesso costituiscono il nucleo delle operazioni e dei servizi quotidiani. Se i dati vengono persi a causa di guasti di sistema o errori umani, l’impatto sulla continuità aziendale può essere significativo.
Questo è il punto in cui i “backup” diventano critici. MySQL fornisce uno strumento da riga di comando ufficiale chiamato “mysqldump”, che consente di esportare facilmente il contenuto del database e salvarlo come file di backup.
Sfruttando questo strumento, è possibile gestire varie esigenze operative come il disaster recovery, la migrazione verso un altro ambiente e l’archiviazione periodica.
In questo articolo spiegheremo come esportare i database MySQL usando “mysqldump”, coprendo tutto, dall’uso di base alle configurazioni avanzate. Anche i principianti possono seguirlo, poiché forniamo spiegazioni dettagliate con esempi pratici di comandi.
2. Uso base di mysqldump
mysqldump è uno strumento da riga di comando usato per esportare il contenuto di un database MySQL in un file SQL. La sintassi di base è molto semplice e i backup possono essere creati con poche righe di comandi. In questa sezione spieghiamo i metodi di esportazione più comuni.
Esportare un singolo database
Il caso d’uso più comune è esportare un intero singolo database.
mysqldump -u username -p database_name > backup.sql
Dopo l’esecuzione, ti verrà chiesto di inserire la password e il contenuto del database specificato verrà scritto in un file chiamato backup.sql.
Esportare più database
Se desideri eseguire il backup di più database contemporaneamente, usa l’opzione --databases.
mysqldump -u username -p --databases db1 db2 db3 > multi_backup.sql
In questo formato, per ogni database viene inclusa una dichiarazione CREATE DATABASE, il che rende il ripristino più affidabile e comodo.
Esportare tutti i database
Per eseguire il backup di tutti i database sul server, usa l’opzione --all-databases.
mysqldump -u username -p --all-databases > all_backup.sql
Questo comando esporta tutti i database presenti sul server MySQL (inclusi mysql, information_schema, performance_schema e altri).
Esempio: includere la data nel nome del file di output
Per i backup programmati, includere la data nel nome del file di output semplifica la gestione. Di seguito un esempio che utilizza una shell UNIX:
mysqldump -u username -p database_name > backup_$(date +%F).sql
Con questo approccio, un file come backup_2025-04-13.sql viene generato automaticamente, rendendo la gestione dei backup più organizzata.
3. Varianti di esportazione
mysqldump può fare più di una semplice esportazione dell’intero database. Supporta anche opzioni di esportazione flessibili a seconda delle tue esigenze. In questa sezione presentiamo tecniche avanzate come l’esportazione di tabelle specifiche, l’esportazione solo dello schema o solo dei dati, e l’esportazione di dati filtrati usando condizioni.
Esportare tabelle specifiche
Se desideri eseguire il backup solo di tabelle specifiche all’interno di un database, puoi specificare i nomi delle tabelle esplicitamente.
mysqldump -u username -p database_name table1 table2 > selected_tables.sql
Esempio:
mysqldump -u root -p mydb users orders > users_orders.sql
Questo comando esporta solo le tabelle users e orders dal database mydb.
Esportare solo dati o solo schema
mysqldump fornisce opzioni per esportare solo le definizioni dello schema o solo i dati.
Esporta solo lo schema (struttura):
mysqldump -u username -p --no-data database_name > schema_only.sqlEsporta solo i dati (escludi le dichiarazioni CREATE TABLE):
mysqldump -u username -p --no-create-info database_name > data_only.sql
Queste opzioni sono utili quando si condivide solo lo schema tra ambienti di sviluppo e produzione, o quando si importano dati incrementali.
Esportare dati con condizioni (–where)
Per esportare solo un sottoinsieme di dati, usa l’opzione --where. Utilizza la stessa sintassi di una clausola SQL WHERE.
mysqldump -u username -p database_name table_name --where="condition" > filtered_data.sql
Esempio:
mysqldump -u root -p mydb users --where="created_at >= '2025-01-01'" > users_2025.sql
In questo esempio, vengono esportati solo i record creati nel 2025 o successivamente dalla tabella users.
4. Opzioni più Usate e le Loro Spiegazioni
Sebbene mysqldump sia semplice, combinare le opzioni consente backup più sicuri ed efficienti. In questa sezione spieghiamo le opzioni più comunemente usate in ambienti pratici.
–single-transaction: Mantieni la Coerenza della Transazione
mysqldump -u username -p --single-transaction database_name > backup.sql
Questa opzione è efficace quando si utilizzano motori di archiviazione che supportano le transazioni, come InnoDB. Esegue il processo di dump all’interno di una singola transazione, garantendo la coerenza durante l’esportazione senza applicare lock di lettura. È particolarmente utile quando è necessario mantenere i servizi attivi durante il backup.
Nota: Questa opzione non ha effetto sui motori non transazionali come MyISAM.
–quick: Riduci l’Uso della Memoria
mysqldump -u username -p --quick database_name > backup.sql
Con questa opzione, mysqldump recupera le righe una alla volta invece di caricare tutti i dati in memoria contemporaneamente. Ciò riduce il consumo di memoria e migliora la stabilità durante l’esportazione di tabelle di grandi dimensioni.
–routines e –events: Includi Procedure Memorizzate ed Eventi
Per impostazione predefinita, le procedure memorizzate e gli eventi non sono inclusi nelle esportazioni. Usa le seguenti opzioni per includerli:
mysqldump -u username -p --routines --events database_name > backup_with_logic.sql
--routines: Includi procedure memorizzate e funzioni--events: Includi eventi programmati
Se la logica di business è ampiamente implementata a livello di database, non dimenticare queste opzioni.
–add-drop-table: Utile per Sovrascrivere le Tabelle
mysqldump -u username -p --add-drop-table database_name > backup.sql
Questa opzione aggiunge una dichiarazione DROP TABLE IF EXISTS prima di ogni definizione di tabella. Se tabelle con lo stesso nome esistono già nell’ambiente di destinazione, verranno eliminate prima di essere ricreate.
–lock-tables: Efficace per MyISAM
mysqldump -u username -p --lock-tables database_name > backup.sql
Sebbene tipicamente non necessaria per InnoDB, questa opzione blocca le tabelle per impedire scritture durante l’esportazione quando si utilizza MyISAM. È utile quando la coerenza è fondamentale.

5. Come Importare un File di Esportazione
I file SQL esportati con mysqldump possono essere ripristinati (importati) utilizzando i metodi di importazione standard di MySQL. In questa sezione spieghiamo le basi dell’importazione da un file di backup, esempi pratici di ripristino e le principali precauzioni.
Comando di Importazione Base
Un file SQL esportato può essere importato facilmente usando il comando mysql. La sintassi di base è la seguente:
mysql -u username -p database_name < backup.sql
Esempio:
mysql -u root -p mydb < backup.sql
Quando esegui questo comando, le istruzioni SQL contenute in backup.sql vengono eseguite in ordine e il database viene ripristinato al suo stato originale.
Importazione in un Nuovo Database
Poiché un file di backup potrebbe non includere un’istruzione CREATE DATABASE, se desideri importare in un database con un nome diverso, devi creare il nuovo database in anticipo.
Esempio: Crea un Nuovo Database “mydb_restore” e Importa
CREATE DATABASE mydb_restore;
mysql -u root -p mydb_restore < backup.sql
Nota: l’SQL esportato con l’opzione --databases include istruzioni CREATE DATABASE, quindi tieni presente che la procedura differisce in quel caso.
Importazione di un File Compresso (.gz)
Se il tuo file di backup è compresso con gzip o simili, puoi importarlo direttamente durante la decompressione:
gunzip < backup.sql.gz | mysql -u username -p database_name
Questo metodo consente di ripristinare rapidamente risparmiando spazio su disco.
Errori comuni di importazione e come risolverli
| Error | Cause | Solution |
|---|---|---|
ERROR 1049 (42000): Unknown database | The target database does not exist | Create it in advance with CREATE DATABASE |
Access denied | Insufficient permissions or incorrect credentials | Recheck the username, password, and privileges |
ERROR 1064 (42000): You have an error in your SQL syntax | SQL format incompatibility between versions | Verify the dump matches the MySQL version you are using |
Riepilogo: Considerare l’importazione come parte del processo di backup
Un file di backup creato con mysqldump non è utile se lo generi solo una volta. Il vero valore di un backup è garantire che tu possa ripristinarlo quando ne hai bisogno. Per questo motivo, è consigliato testare regolarmente le importazioni e confermare che il file venga caricato correttamente.
6. Consigli pratici e precauzioni
Mentre mysqldump è facile da usare, i database di grandi dimensioni e gli ambienti di produzione a volte richiedono un’operazione attenta e strategie aggiuntive. In questa sezione, introduciamo tecniche pratiche utili e precauzioni per aiutare a prevenire problemi.
Comprimere grandi database con gzip
Poiché mysqldump genera file SQL di testo semplice, possono diventare molto grandi. Per i database di grandi dimensioni che superano diversi gigabyte, è comune combinare mysqldump con gzip per comprimere l’output.
mysqldump -u username -p database_name | gzip > backup.sql.gz
Questo metodo può ridurre significativamente l’uso del disco e diminuisce anche il carico durante i trasferimenti remoti.
Rendere l’verifica di esportazione e importazione un’abitudine
Un backup è inutile se non puoi importarlo quando necessario. Raccomandiamo operazioni come le seguenti:
- Regolarmente ripristina i backup in un ambiente separato per testarli
- Verifica l’integrità del file con md5sum o sha256sum
- Mantieni più generazioni di backup per i database critici
Attenzione alle differenze di versione
Se la versione di MySQL differisce tra la sorgente di esportazione e la destinazione di importazione, le differenze di sintassi e comportamento interno possono impedire l’esecuzione corretta del file SQL.
- Se possibile, opera sulla stessa versione
- Se devi attraversare versioni, controlla il comportamento con le opzioni (ad esempio,
--set-gtid-purged=OFF) - Prima e dopo gli aggiornamenti, conferma sempre la compatibilità della definizione dello schema
Utilizzare cron e script per l’automazione
Se desideri eseguire backup automatici giornalieri o settimanali, l’uso di script shell e cron rende la gestione efficiente.
#!/bin/bash
DATE=$(date +%F)
mysqldump -u root -p[password] mydb | gzip > /backup/mydb_$DATE.sql.gz
Posizionando uno script come questo in /etc/cron.daily/, puoi raccogliere i backup automaticamente ogni giorno.
Nota: Per motivi di sicurezza, evita di scrivere le password direttamente. È consigliato gestirle in modo sicuro con un file
.my.cnf.
Considerare anche la sicurezza
I file di backup possono contenere informazioni sensibili. Implementa le seguenti misure:
- Imposta appropriate restrizioni di accesso sulla posizione di archiviazione
- Cifra i backup per l’archiviazione e il trasferimento (ad esempio, usando GPG o SFTP)
- Quando si archivia nel cloud, considera impostazioni di backup automatico e gestione del ciclo di vita
7. Domande frequenti (FAQ)
In questa sezione, riassumiamo le domande comuni e i problemi più frequenti riscontrati quando si utilizza mysqldump in formato Q&A.
Q1. Perché ricevo un errore “Access denied” durante l’esportazione?
A. L’utente MySQL specificato potrebbe non avere i privilegi necessari, come “SELECT” o “LOCK TABLES”, sul database di destinazione. Verifica i permessi necessari e chiedi al tuo amministratore di concederli se necessario. Se il blocco delle tabelle fallisce, l’uso dell’opzione --single-transaction può aiutare in alcuni casi.
Q2. La dimensione del file di backup è estremamente grande. Esiste un modo per ridurla?
A. Se hai tabelle grandi o un alto volume di dati, il file SQL può raggiungere dimensioni di gigabyte. Puoi ridurre la dimensione usando i seguenti metodi:
- Comprimi con
gzip(esempio:mysqldump ... | gzip > backup.sql.gz) - Usa
--no-datao--no-create-infoper esportare solo ciò di cui hai bisogno - Usa l’opzione
--whereper filtrare i dati esportati (ad esempio, intervalli di date specifici)
Q3. Come posso esportare solo tabelle specifiche?
A. Elenca i nomi delle tabelle alla fine del comando per esportare solo le tabelle selezionate.
mysqldump -u root -p mydb users orders > selected.sql
Questo è comodo quando si desidera eseguire il backup solo di alcune tabelle invece dell’intero database.
Q4. Le stored procedure e gli eventi non sono inclusi nell’esportazione. Perché?
A. Per impostazione predefinita, mysqldump non include le stored procedure (routine) né gli eventi programmati. Per includerli, aggiungere le seguenti opzioni:
--routines --events
Confermare inoltre che l’utente disponga dei privilegi sufficienti per accedere a questi oggetti.
Q5. A cosa devo fare attenzione quando trasferisco un file di backup su un altro server?
A. Punti chiave da considerare:
- Codifica dei caratteri : se la codifica differisce tra i server, può causare testo illeggibile. Specificare esplicitamente
--default-character-set=utf8se necessario. - Differenze di versione : assicurarsi della compatibilità tra le versioni MySQL sulla sorgente e sulla destinazione.
- Trasferimento file sicuro : utilizzare
scp,rsync, oSFTPper trasferimenti sicuri. - Controlli di integrità del file : verificare l’integrità dopo il trasferimento usando
md5sumosha256sum.
Q6. Ci sono differenze tra i comandi Windows e Mac/Linux?
A. La sintassi di base dei comandi è la stessa, ma esistono differenze nel comportamento della shell, nell’elaborazione batch e nell’uso del comando date. Ad esempio, quando si generano nomi di file con date, Windows può utilizzare PowerShell o la variabile %DATE%, mentre Linux e macOS usano il comando date.
8. Conclusion
In questo articolo, abbiamo trattato lo strumento di backup e migrazione MySQL “mysqldump”, dall’uso di base alle tecniche avanzate e alla risoluzione dei problemi.
Sebbene mysqldump utilizzi una sintassi semplice, scegliere le opzioni corrette e le configurazioni dei comandi in base al proprio scopo fa una differenza significativa nella qualità del backup e nell’affidabilità del ripristino.
✅ Punti chiave di questo articolo
- Sintassi di base di mysqldump e tre metodi di esportazione (singola, multipla e tutti i database)
- Varianti di esportazione flessibili come solo schema, solo dati e tabelle selezionate
- Opzioni importanti per l’uso reale includendo
--single-transactione--routines - Comandi di ripristino di base e come gestire gli errori di importazione
- Suggerimenti pratici come compressione gzip e automazione con cron
- Conoscenze utili per la risoluzione dei problemi fornite nella sezione FAQ
🛡 Buone pratiche per l’uso di mysqldump
- Non limitarsi a creare backup—verificare che possano essere ripristinati
- Prepararsi a problemi causati da differenze di versione e codifica dei caratteri
- Progettare le operazioni di backup con compressione, automazione e controllo degli accessi appropriato
- Includere stored procedure ed eventi per corrispondere alla configurazione di produzione
Un sistema di backup progettato e gestito correttamente con mysqldump consente un rapido recupero in caso di guasti imprevisti e contribuisce a operazioni di sistema affidabili. Soprattutto per sistemi aziendali e siti WordPress, dove la perdita di dati può essere critica, comprendere e utilizzare efficacemente mysqldump è essenziale.
Utilizza questa guida come riferimento per costruire la strategia di backup ottimale per il tuo ambiente.


