Operando attraverso interfacce web o altri programmi per la gestione di database MySQL, non abbiamo bisogno di conoscere i comandi che andremo a vedere in questo articolo, perché stiamo utilizzando un software che nasconde le istruzioni a basso livello, per conoscere però bene i risultati delle operazioni occorre studiare anche questi. In questo articolo, in particolare, vedremo come importare ed esportare la struttura ed i dati contenuti all’interno dei database MySQL con i comandi standard offerti dal server.
Spesso occorre trasferire la struttura ed a volte anche i dati da un database di una macchina verso un altro database o addirittura verso un altro server con un’altra architettura. Per mantenere questa portabilità si può ricorrere a due metodi differenti: ci annotiamo tutte le istruzioni SQL necessarie oppure ricorriamo al comando mysqldump. Con questo comando è possibile farsi generare tutte le istruzioni, perfino le INSERT, per ripristinare un database, una tabella o perfino soltanto i valori ivi contenuti. La sintassi del comando è la seguente:
mysqldump [opzioni] database [tabella]
Oltre alle comuni opzioni viste per gli altri comandi del server, le più utili sono:
- –add-drop-table Inserisce il comando di cancellazione prima di quello di creazione della tabella.
- -t Non inserisce i comandi di creazione della tabella, solo quelli di INSERT.
- -d Genera solo la struttura della tabella, senza comandi di INSERT.
Oltre alle opzioni dobbiamo indicare il database su cui operare ed opzionalmente la tabella interessata, se si omettesse il nome verranno estratte tutte le tabelle del database. Ad esempio, se volessimo generare gli script per la creazione della tabella “clienti” presente nel database “test” daremo il comando:
mysqldump -u root -pxxxxx test clienti > clienti.sql
come potete osservare l’output del comando è stato reindirizzato sul file clienti.sql altrimenti sarebbe andato su stdout, ossia lo schermo. Ora possiamo cancellare la tabella dando questi comandi:
mysql -u root -pxxxx
mysql> use test;
mysql> drop table clienti;
mysql> quit;
ricordo che è anche possibile inserire i comandi all’interno di un file e redirezionare l’input al programma mysql. Una volta cancellata la tabella passiamo a crearla ed andiamo poi a verificare se è ritornato tutto come prima:
mysql -u root -pxxxxx < clienti.sql
mysql -u root -pxxxxx
mysql> use test;
mysql> show tables;
mysql> select * from clienti;
come è possibile verificare tutto è ritornato come era al momento del salvataggio.
Non sempre è possibile importare dati nelle tabelle del database con delle comode istruzioni INSERT, magari perché questi archivi vengono forniti in formato testo, delimitati da appositi caratteri. Per automatizzare queste operazioni, MySQL mette a disposizione il comando mysqlimport, vediamo la sintassi:
mysqlimport [opzioni] database nomefile
abbiamo le opzioni, il database ed il nome del file che occorre importare, unica limitazione è che il nome della tabella avrà lo stesso nome del file esclusa l’estensione, ad esempio clienti.doc e clienti.dat formeranno sempre la tabella clienti. Ovviamente esiste tutta una serie di opzioni che permettono di descrivere il formato del file, per default abbiamo i campi separati da un carattere di tabulazione, le righe da un carattere di fine riga e la presenza di eventuali caratteri speciali ( il singolo apice ) con uno slash rovesciato. Ecco la lista delle opzioni utili ad importare i dati:
- –fields-terminated-by=X Specifica il carattere che indica il fine campo.
- –fileds-enclosed-by=X Caratteri che racchiudono un valore di campo.
- –field-optionally-enclosed-by=X Caratteri che opzionalmente racchiudono un campo.
- –fields-escaped-by=X Indicatore di carattere speciale.
- –lines-terminated-by=X Carattere indicante la fine riga.
- -f Continua l’importazione anche se ci sono errori.
- -d Elimina i record esistenti nella tabella prima dell’importazione.
- -r Se viene riscontrato un doppione nelle chiavi uniche viene considerato il dato che si sta importando.
- -i Come l’opzione precedente, ma in questo caso è il dato che si sta importando ad essere scartato.
Come esercizio potete preparare un file di testo con dei dati da importare ed eseguire il comando mysqlimport come ormai dovrete essere in grado di saper utilizzare. Vorrei segnalarvi soltanto che il file di testo deve essere leggibile dall’utente con cui si avvia il demone di MySQL server, quindi occhio ai permessi.