Pagina 1 di 5 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 49
  1. #1

    [PILLOLA] Spostare database Mysql da una macchina ad un'altra

    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/

  2. #2
    Bravo Guidoz...

    Credo pero' sarebbe stato molto utile accennare anche al dump di "mysql administrator" che surclassa tutto e tutti... riducendo di decine di volte il tempo di backup e restore.

    E' possibile schedulare i backup, non necessita del supporto di php e poi ripeto e' di una velocita' tale al punto che, inizialmente, lascia il dubbio che abbia effettivamente completato il lavoro.

    Lavora al meglio su mysql 4.1 e sup.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Moderatore di Javascript L'avatar di ciro78
    Registrato dal
    Sep 2000
    residenza
    Napoli
    Messaggi
    8,505
    bella guida molto interessante
    Ciro Marotta - Programmatore JAVA - PHP
    Preferisco un fallimento alle mie condizioni che un successo alle condizioni altrui.


  4. #4
    up ... su ... dai forza....


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    A me è servita molto questa pillola...mi ha reso più chiare le idee visto che ho sempre lavorato in locale...!
    Complimenti Guido!

  6. #6
    Bravo Guidoz,
    pillola molta chiara e utile.

    Mi permetto di citare un altro metodo per effetturare il backup: MySQL offre infatti "mysqlhotcopy", uno script in Perl che crea una copia fisica delle tabelle di un database. Poiché non crea un file SQL, questo è il metodo più veloce per la creazione di un backup.
    Funziona però solo per tabelle MyISAM e ISAM.

    Maggiori info qui:
    http://dev.mysql.com/doc/mysql/en/mysqlhotcopy.html


  7. #7
    [supersaibal]Originariamente inviato da Gianni_T
    Poiché non crea un file SQL, questo è il metodo più veloce per la creazione di un backup.
    [/supersaibal]
    però suppongo sia necessario avere pieni permessi sulla directory di mysql.. no?

    allora a quel punto un metodo ancora più veloce ed empirico: mi copio la directory "data" e via..



    PS: quello che cita piero non ho granchè idea di cosa sia.. se vuole approfondire lui...

  8. #8
    [supersaibal]Originariamente inviato da }gu|do[z]{®©
    però suppongo sia necessario avere pieni permessi sulla directory di mysql.. no?

    allora a quel punto un metodo ancora più veloce ed empirico: mi copio la directory "data" e via.. [/supersaibal]
    Si, servono i diritti sulla cartella dei dati. Si può lanciare così:
    su mysql -c 'mysqlhotcopy ...'

    in teoria è la stessa cosa di una copia manuale, in pratica no perché questo script si prende cura di realizzare una copia coerente, ovvero effettua il LOCK delle tabelle ed il FLUSH di tutte le operazioni in pendenza (porta su disco ciò che è ancora in ram). Inoltre, a seconda delle opzioni passate da riga di comando, essettua ulteriori compiti come ad esempio azzerare il log binario, ecc.

  9. #9
    [supersaibal]Originariamente inviato da }gu|do[z]{®©
    PS: quello che cita piero non ho granchè idea di cosa sia.. se vuole approfondire lui... [/supersaibal]
    Scarica e installa mysql administrator se gia' non lo ha fatto per conto suo l'installazione di mysql 4.1.x. Apri backup/restore e leggi le due righe richieste, compila i campi e prova. Dopo di che butterai tutti gli altri ... come ho fatto io.

    Altrimenti per le isam / myisam basta copiare i tre file. Altra alternativa che utilizzo in alcuni casi e' quella del SELECT ... INTO OUTFILE da recuperare con LOAD DATA INFILE... anche questa estremamente veloce e che permette di fare facilmente backup incrementali basandosi su un range di date o sull'id auto_increment.



    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  10. #10
    Utente di HTML.it L'avatar di chris
    Registrato dal
    Sep 1999
    Messaggi
    1,568
    Aggiunto alle pillole.

    P.s. Guido, a te e al tuo nick
    "Nei prossimi tre anni col mio governo vogliamo vincere anche il cancro, che colpisce ogni anno 250.000 italiani e riguarda quasi due milioni di nostri concittadini"

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.