LOAD DATA INFILE +进度跟踪

时间:2014-12-30 09:32:41

标签: php mysql laravel laravel-4 innodb

我制作了一个PHP控制台脚本,可下载大型CSV文件(> 2.5米行)并将其插入数据库。我在这里使用LOAD DATA INFILE查询,它完美运行,需要大约20秒才能完成。

我想跟踪此查询的进度。我在这里已经阅读了几种方法,但我不知道如何运行LOAD DATA INFILE查询然后运行进度跟踪循环。该脚本将等待LOAD DATA INFILE完成。

我的数据库是MySQL,引擎是InnoDB。我正在使用Laravel框架。

1 个答案:

答案 0 :(得分:0)

您可以使用pt-fifo-split“拆分”转储文件,并在每个块之后打印进度消息。

例如,在shell中:

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