我制作了一个PHP控制台脚本,可下载大型CSV文件(> 2.5米行)并将其插入数据库。我在这里使用LOAD DATA INFILE
查询,它完美运行,需要大约20秒才能完成。
我想跟踪此查询的进度。我在这里已经阅读了几种方法,但我不知道如何运行LOAD DATA INFILE
查询然后运行进度跟踪循环。该脚本将等待LOAD DATA INFILE
完成。
我的数据库是MySQL,引擎是InnoDB。我正在使用Laravel框架。
答案 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