2012-05-25 6 views
10

Nella mia azienda occasionalmente importiamo database MySQL di grandi dimensioni (40 GB +) che possono essere caricati in un giorno sulle nostre macchine sviluppatore. Mentre accettiamo questo tempo di caricamento dal momento che è fatto in background, ci manca qualsiasi solida capacità di stimare quando le importazioni finiranno. Questo ci impedisce di programmare un momento appropriato per agire su di esso. È come aspettare che arrivi il ragazzo dei cavi.Quanto è lungo l'importazione del mio dump MySQL?

In questo momento la mia strategia migliore è un comando rapido show tables per vedere quale percentuale delle tabelle sono state caricate. Tuttavia, poiché le dimensioni delle tabelle variano notevolmente sia tra loro che con ciascun cliente, questo non è nemmeno vicino all'affidabilità.

Qualcuno ha una buona tecnica o uno strumento che può essere utilizzato per ottenere una percentuale affidabile di quanto è lungo l'importazione di MySQL?

risposta

15

È possibile farlo con il comando pv collegando il dump a mysql.

pv -i 1 -p -t -e /path/to/sql/dump | mysql -u USERNAME -p DATABASE_NAME 

Verrà visualizzata una barra di avanzamento durante l'avanzamento dell'importazione in base al throughput di IO. (Come visto here.)

+3

SI! Perfezionare! Questo e 'esattamente quello che stavo cercando! Word of cautela per gli utenti Windows che inciampa qui: Cygwin non ha un modulo per 'pv' nel programma di installazione della GUI, quindi ho usato le indicazioni trovate qui: http://stackoverflow.com/q/504204 – Technetium

1

HeidiSql ti dirà quanti GB hanno caricato fino a quel momento, il che è piuttosto utile quando si cerca di capire quanto deve ancora essere caricato.

1

È anche possibile fare un show processlist nel database di origine per vedere fino a che punto (con l'ID di incremento automatico) in una tabella specifica è l'esportazione. Eric fa un buon punto in quanto è possibile monitorare la dimensione della directory dei dati del database rispetto alle dimensioni della fonte.

Qualcosa che ho trovato utile nell'accelerare i dump/import, è farlo da tabelle e quindi eseguire più mysqldump contemporaneamente essenzialmente multi-threading del tuo processo. Di solito facevo circa 4 discariche/ripristini separati alla volta. L'importo ottimale dipenderà dalle capacità dell'hardware e del disco.

Un esempio molto semplicistico per darvi un'idea:

mysqldump dbname table1 table2 table3 | mysql -h host & 
mysqldump dbname table4 table5 table6 | mysql -h host & 
mysqldump dbname table7 table8 table9 | mysql -h host & 
+0

Questo multi approccio intricato è intrigante. Approssimativamente quanto sono grandi le riduzioni del tempo complessivo di importazione? Ho pensato che il drive fosse già collegato all'I/O (questi non stanno andando sugli SSD) quindi non l'ho mai considerato come un'opzione. – Technetium

+1

Dipende dal tuo disco. MySQL utilizzerà solo un singolo processo, quindi se hai più processori puoi usare più core in questo modo. Corri e vedi se il thread mysql ha la CPU al 100%. Quindi molto probabilmente sei legato alla CPU. Ci vorrà un po 'di sperimentazione per trovare il tuo punto debole, ma potrei immaginare che 2 processi richiederanno circa 1/2 tempo. – sreimer