2014-12-30 62 views
3

我製作了一個PHP控制檯腳本,用於下載大型CSV文件(> 2.5米行)並將其插入數據庫。我在這裏使用LOAD DATA INFILE查詢,它完美的工作,需要約20秒才能完成。加載數據INFILE +進度跟蹤

我想跟蹤此查詢的進度。我已閱讀了幾種方法,但我不知道如何運行LOAD DATA INFILE查詢,然後運行進度跟蹤循環。該腳本一直等到LOAD DATA INFILE完成。

我的數據庫是MySQL,引擎是InnoDB。我正在使用Laravel框架。

+0

檢查這篇文章http://stackoverflow.com/questions/5748565/how-to-see-progress-of-csv-upload-in-mysql和HTTP ://dotmanila.com/blog/2013/04/check-rough-progress-of-your-csv-import-to-mysql/以及這一個http://derwiki.tumblr.com/post/24490758395/loading -half-billion-rows-into-mysql – tzafar

+0

@tzafar在問這個問題之前,我檢查了所有這些問題。 –

+1

@RoboRobok然後解釋它爲什麼不解決你的問題會有幫助。 – RandomSeed

回答

0

您可以用pt-fifo-split「拆分」轉儲文件並在每個塊後打印進度消息。

例如,在外殼:

f=dump.sql 
nlines=`cat $f | wc -l` 
let chunk=$nlines/100 

pt-fifo-split --lines $chunk $f 
i=0 
while [ -e /tmp/pt-fifo-split ] 
do 
    echo "$i% is done" 
    mysql -e "LOAD DATA INFILE '/tmp/pt-fifo-split' INTO ..." 
    let i=$i+1 
done