2012-10-28 23 views
6

Ho una tabella MySQL molto grande sul mio server dev locale: oltre 8 milioni di righe di dati. Ho caricato la tabella con successo utilizzando LOAD DATA INFILE.Esportare una grande tabella MySQL come file multipli più piccoli

Ora desidero esportare questi dati e importarli su un host remoto.

Ho provato LOAD DATI INFIL. LOCALI all'host remoto. Tuttavia, dopo circa 15 minuti la connessione all'host remoto non riesce. Penso che l'unica soluzione per me sia esportare i dati in un numero di file più piccoli.

Gli strumenti a disposizione sono PhpMyAdmin, HeidiSQL e MySQL Workbench.

So come esportare come singolo file, ma non più file. Come posso fare questo?

+1

Si potrebbe provare mysqldump'ing solo il tavolo richiesto e ricostruirlo attraverso l'importazione. –

+0

Puoi connetterti alla macchina mysql dal tuo computer locale? – Michael

+0

@ Michael - sì, certo. Ho usato HeidiSQL per database n¿manutenzione. – Billy

risposta

4

Date un'occhiata a mysqldump

le linee dovrebbe essere (da terminale):

esportazione backupfile.sql dal nome_db nel vostro mysql:

mysqldump -u user -p db_name > backupfile.sql 

importazione da backupfile a nome_db in il tuo mysql:

mysql -u user -p db_name < backupfile.sql 

Hai due opzioni per dividere le informazioni:

  1. Suddividere il file di testo di output in file più piccoli (tanti quanti ne occorrono, molti strumenti per farlo, ad es. split).
  2. Esporta una tabella ogni volta che si utilizza l'opzione per aggiungere un nome di tabella dopo il db_name, in questo modo:

    mysqldump -u user -p db_name table_name > backupfile_table_name.sql

compressione del file (s) (un file di testo) è molto efficiente e può ridurlo a circa il 20% -30% della sua dimensione originale.

La copia dei file su server remoti deve essere eseguita con scp (copia protetta) e l'interazione deve avvenire con ssh (in genere).

Buona fortuna.

+0

"dividi il file di testo di output in file più piccoli (quanti ne hai bisogno, molti strumenti per farlo)." - quali strumenti? Questa era la domanda: come faccio? – Billy

+0

Dai un'occhiata alla modifica. La "divisione" di Unix come esempio dovrebbe essere disponibile sulla maggior parte dei sistemi. –

2

Come esempio dell'approccio mysqldump per una singola tabella

mysqldump -u root -ppassword yourdb yourtable > table_name.sql 

importatrice è poi così semplice come

mysql -u username -ppassword yourotherdb < table_name.sql 
+0

L'ho trovato particolarmente veloce per grandi esportazioni/importazioni. Buon suggerimento per l'OP. – CodeTalk

+0

Sì, è bello, ma non ho accesso SSH al server. Non risponde alla domanda reale. – Billy

+0

@Billy È comunque possibile eseguire un'importazione di phpmyadmin sul file di dump, se si dispone dell'accesso a phpmyadmin. Hai la possibilità di eseguire un'importazione parziale, quindi continua specificando il numero di query da saltare come il numero che si è verificato correttamente. –

1

Usa mysqldump per scaricare la tabella in un file. Quindi utilizzare tar con l'opzione -z per comprimere il file. Trasferirlo sul server remoto (con ftp, sftp o altra utilità di trasferimento file). Quindi decomprimere il file sul server remoto Utilizzare mysql per importare il file.

Non vi è alcun motivo per dividere il file originale o esportarlo in più file.

+1

Come si lavora con le impostazioni di timeout delle query rigorose? – Vyktor

+0

@Vyktor Per favore, spiegami un po 'di più la tua domanda. Potrei mancare qualche informazione qui.La mia prima risposta rapida è che non mi aspetto alcun timeout di query. Il comando "mysql" elaborerà il file "xxx.sql" (il risultato dell'esportazione) sul computer locale in cui verrà eseguita l'importazione. Il file "xxx.sql" contiene i comandi "insert" per la tabella che viene importata (aspettatevi circa 8 milioni di tali comandi/istruzioni, vale a dire uguale al numero di righe della tabella in questione). Non vedo alcun motivo per cui questi comandi di "inserimento" falliscono a causa di un qualsiasi timeout. –

+0

Questo è un host condiviso - Non ho accesso a MySQL sulla riga di comando. – Billy

3

Ho trovato che le opzioni avanzate in phpMyAdmin mi consentono di selezionare il numero di righe da esportare, più il punto di partenza. Questo mi consente di creare tutti i file di dump necessari per ottenere la tabella sull'host remoto.

Ho dovuto regolare le mie impostazioni php.ini, più l'impostazione phpMyAdmin 'ExecTimeLimit' poiché la generazione dei file di dump richiede un po 'di tempo (500.000 righe in ciascuna).

Uso HeidiSQL per eseguire le importazioni.

+0

Grazie a questo ho risolto il mio problema. –

15

Ho appena importato/esportato una tabella (partizionata) con 50 milioni di record, erano necessari solo 2 minuti per esportarla da una macchina abbastanza veloce e 15 minuti per importarla sul mio desktop più lento. Non è stato necessario dividere il file.

mysqldump è tuo amico, e sapendo che hai un sacco di dati è meglio per comprimerlo

@host1:~ $ mysqldump -u <username> -p <database> <table> | gzip > output.sql.gz 
@host1:~ $ scp output.sql.gz host2:~/ 
@host1:~ $ rm output.sql.gz 
@host1:~ $ ssh host2 
@host2:~ $ gunzip < output.sql.gz | mysql -u <username> -p <database> 
@host2:~ $ rm output.sql.gz 
+1

Esempio di utilizzo estensivo che ha funzionato. Grazie. –

0

Se non si ha familiarità con l'utilizzo dello strumento della riga mysqldump di comando, qui ci sono due strumenti grafici che possono ti aiuta con quel problema, anche se devi essere in grado di caricarli sul server tramite FTP!

Adminer è uno strumento sottile e molto efficiente manager DB che è almeno altrettanto potente come phpMyAdmin e ha solo un singolo file che deve essere caricato sul server che lo rende estremamente facile da installare. Funziona meglio con tabelle/DB di grandi dimensioni rispetto a PMA.

MySQLDumper è uno strumento sviluppato appositamente per esportare/importare tabelle/DB di grandi dimensioni in modo che non abbia alcun problema con la situazione descritta. L'unico problema è che è un po 'più noioso da installare perché ci sono più file e cartelle (~ 350 file in ~ 1.5MB), ma non dovrebbe essere un problema caricarlo via FTP, e otterrà sicuramente il lavoro svolto :)

Quindi il mio consiglio sarebbe di provare prima l'amministratore e se anche questo fallisce, segui il percorso di MySQLDumper.

1

How do I split a large MySQL backup file into multiple files?

È possibile utilizzare mysql_export_explode https://github.com/barinascode/mysql-export-explode

<?php 
#Including the class 

include 'mysql_export_explode.php'; 
$export = new mysql_export_explode; 

$export->db = 'dataBaseName'; # -- Set your database name 
$export->connect('host','user','password'); # -- Connecting to database 
$export->rows = array('Id','firstName','Telephone','Address'); # -- Set which fields you want to export 
$export->exportTable('myTableName',15); # -- Table name and in few fractions you want to split the table 
?> 

At the end of the SQL files are created in the directory where the script is executed in the following format 
--------------------------------------- 
myTableName_0.sql 
myTableName_1.sql 
myTableName_2.sql 
... 
Problemi correlati