2014-12-30 63 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