2014-12-30 3 views
3

큰 CSV 파일 (> 2.5m 행)을 다운로드하고 데이터베이스에 설치하는 PHP 콘솔 스크립트를 만들었습니다. 여기서 LOAD DATA INFILE 쿼리를 사용하고 있습니다. 완료하는 데 20 초 정도 걸리므로 완벽하게 작동합니다.LOAD DATA INFILE + progress tracking

이 쿼리의 진행 상황을 추적하고 싶습니다. 여기 몇 가지 접근법에 대해 읽었지만 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-a-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