Viste le numerose domande sull'argomento provo a schematizzare delle linee guida in merito, in modo da avere un unico thread di riferimento in cui approfondire anche il discorso.
1. Premesse:
1.1 Cos'è un dump di un database
Un dump non è altro che un file di testo generato dal DBMS (o da qualche interfaccia grafica come PHPMyAdmin) che contiene, nè più nè meno, una serie di comandi SQL che permettono di ricostruire il vostro database in modo identico all'originale su qualsiasi macchina esso venga interpretato.
Possiamo avere un dump dello schema (o struttura) che contiene esclusivamente i comandi necessari a ricostruire lo schema del database, senza istanziare i dati.
Possiamo avere anche un dump dei dati, che contiene solamente i comandi necessari a ripopolare lo schema con i dati originali.
E infine possiamo avere, ovviamente, un dump completo che contiene le istruzioni per ricreare sia lo schema che l'istanza (sia struttura che dati) del vostro database
Chiaramente per poter esportare un database la prima cosa da fare è eseguire un dump. Di seguito le istruzioni necessarie.
1.2 Esportare un database da linea di comando
Se sulla macchina sorgente (ad esempio il vostro PC locale) avete accesso root/admin, ovvero se siete abilitati a lanciare comandi dalla riga di comando, e se, sopratutto, avete i privilegi necessari sul DBMS, potete esportare facilmente un database con il seguente comando:
mysqldump nome_database -u root -p > nome_del_file_dump.sql
vi verrà chiesta la password di root, e di seguito verrà creato il dump del database indicato, con il nome file indicato.
NB: su macchine windows è possibile che mysqldump non sia registrato come comando di sistema, quindi per eseguirlo dovete prima di tutto recarvi nella directory bin del vostro MySQl [in una installazione standard di mysql 4.1 si trova a questo path "C:\Programmi\MySQL\MySQL Server 4.1\bin"]
1.3 Esportare un database da phpmyadmin
Se non abbiamo accesso shell, e non possiamo utilizzare tool alternativi come indicato più avanti, l'unica alternativa è installare phpmyadmin sulla macchina sorgente. Per istruzioni sull'installazione di phpmyadmin vi rimando ai link a fine pillola.
Una volta installato PHPmyadmin, dovremo selezionare il database [o eventualmente la singola tabella] che ci interessa esportare, usando il frame di sinistra dell'interfaccia grafica di phpmyadmin.
A questo punto troveremo, nel frame di destra, una barra di menu' in alto, che tra le altre cose presenta la voce "Esporta".
Clicchiamo su "Esporta" e ci troviamo di fronte la pagina per l'esportazione del database. La pagina è ricca di opzioni ma quelle utili e utilizzate più spesso sono le seguenti:
Struttura: da selezionare se volete esportare la struttura. Tra le sue sotto-opzioni potreste voler selezionare anche "Aggiungi DROP TABLE" che semplicemente verifica, al momento dell'importazione, se esiste già una tabella con lo stesso nome di quella che si sta importando, ed in tal caso la cancella prima di ricrearla. Senza questa opzione una situazione del genere produrrebbe un errore e non permetterebbe il completamento dell'importazione
Dati: da selezionare se volete esportare i dati del database. Chiaramente se usato in combinazione con la precedente consente un dump completo.
Salva con nome: questa opzione va selezionata se volete avere il dump su un file. Diversamente otterreste a video la lista dei comandi necessari al dump.
E' possibile selezionare un tipo di compressione, per ottimizzare il trasferimento dal server al client.
NB: come spiegato più avanti, dump troppo grossi potrebbero creare problemi a phpmyadmin in fase di importazione [in fase di esportazione non dovrebbero esserci particolari problemi].. per cui in certi casi si consiglia di fare un dump dell'intera struttura del database, e di seguito i dump delle singole tabelle.. accorpando magari quelle meno violuminose, ma dividendo anche in più files quelle più grosse.
Di norma questa operazione può esssere fatta anche con un semplice editor di testi, partendo dal file completo e stando attenti solamente a non spezzare le singole istruzioni. Più conveniente è invece lasciare questo compito all'applicazione con cui abbiamo eseguito il dump, se questa lo permette [le recenti versioni di phpmyadmin ad esempio permettono di impostare dei limiti sul numero di righe esportate, ma solo se facciamo i dump delle singole tabelle]
1.4 Alternative a phpmyadmin
Se state lavorando su un database mysql ma non state lavorando con PHP, potete usare altri strumenti (applicazioni eseguibili). Il web ne è pieno. Ad esempio su windows potete usare il valido Mysql front.
NB: se volete esportare un database remoto con questi tool, è necessario che Mysql permetta connessioni remote. Questra configurazione è però abbastanza rara, per ragioni di sicurezza.
2. Importare il dump sulla macchina di destinazione
Una volta ottenuto il dump dobbiamo importarlo sulla macchina di destinazione. Possiamo distinguere due casi principali:
1) Abbiamo accesso shell sulla macchina di destinazione (ovvero possiamo eseguirvi comandi.. che sia remota o meno)
2) Non abbiamo accesso shell sulla macchina di destinazione
2.1 Abbiamo accesso shell sulla macchina di destinazione
Se possiamo eseguire comandi sulla macchina di destinazione siamo a cavallo: in qualsiasi modo sia stato estratto il dump ci basterà caricare in remoto il file e lanciare i seguenti comandi:
mysqladmin drop nome_database -u root -p
[se vogliamo cancellare un precedente database con lo stesso nome]
mysqladmin create nome_database -u root -p
[se dobbiamo creare un database, vuoto, in cui importare il dump]
mysql nome_database -u root -p < nome_del_file_dump.sql
[l'importazione vera e propria]
Anche qui, dopo ciascun comando, vi verrà chiesta la password di root di MySQL.
Anche qui, se siamo su macchina windows, è possibile che il comando non venga riconosciuto dal sistema e sia necessario spostarsi nella directory bin di Mysql per poterlo eseguire.
Questo metodo, rispetto alle alternative da interfaccia grafica, richiede tempi di elaborazione notevolmente ridotti, e anche con dump di grosse dimensioni non dovremmo avere particolari problemi.
2.2 Non abbiamo accesso shell sulla macchina di destinazione
Se non abbiamo accesso shell sulla macchina di destinazione dovremo usare tool alternativi.
Possiamo distinguere due sottocasi:
2.2.1 Mysql permette accessi da remoto
Sebbene sia una configurazione rara per ragioni di sicurezza, MySQL potrebbe consentire l'accesso da remoto.
In questo caso possiamo utilizzare qualsiasi tool che dalla nostra macchina si connetta a quella remota ed vi importi il dump. Una qualsiasi applicazione eseguibile dovrebbe essere più performante di phpmyadmin in questo caso.
2.2.2 Mysql non permette accessi da remoto
Questa è una situazione molto comune, e potremmo trovarci in un brutto pasticcio se il dump è troppo pesante: PHPMyAdmin rischierebbe seriamente di andare in timeout durante l'importazione del database, complicandoci parecchio il lavoro.
Conviene dunque spezzettare il dump in più files, ed eseguirli uno alla volta. Vedere la sezione relativa all'esportazione da phpmyadmin (anche altri tool potrebbero avere cmq opzioni apposite, dunque documentatevi sul tool che intendete usare)
Per importare un file sql con phpmyadmin dobbiamo prima di tutto posizionarci sul database che ci interessa usare (eventualemnte creandolo prima), selezionandolo nel frame di sinistra.
A questo punto dalla barra di menù che troveremo in alto nel frame di destra cliccheremo su "SQL". Si aprirà una pagina con una textarea in cui inserire l'SQL che vogliamo eseguire. Alternativamente, ed è il nostro caso, potremmo selezionare un file dal campo successivo, e semplicemente inviare il form.
Come già detto, se il file non è troppo pesante non avremo particolari problemi e avremo importato il nostro database sulla macchina remota.
3. Link
Documentazione ufficiale di Mysql: http://www.mysql.com/documentation
Documentazione di php myadmin [la trovate anche in locale sulla macchina su cui il tool è installato]: http://www.phpmyadmin.net/home_page/docs.php
guida a phpmyadmin [freephp.it]: http://freephp.html.it/guide/lezioni.asp?idguida=9
Guida all'installazione di phpmyadmin [phpnews.it]: http://www.phpnews.it/content/view/117/80/