Я сделал консольный скрипт PHP, который загружает большой CSV-файл (более 2,5 м строк) и вставляет его в базу данных. я использую LOAD DATA INFILE
запрос здесь, и он отлично работает, занимая ~ 20 секунд.
Я хотел бы отслеживать прогресс этого запроса. Я читал о нескольких подходах здесь, но я не знаю, как запустить LOAD DATA INFILE
запрос, а затем запустить цикл отслеживания прогресса. Сценарий ждет до LOAD DATA INFILE
готово.
Моя база данных — MySQL, а движок — InnoDB. Я использую Laravel Framework.
Вы можете «разделить» файл дампа с помощью пт-ФИФО-сплит и печатать сообщение о прогрессе после каждого чанка.
Например, в оболочке:
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
Других решений пока нет …