ЗАГРУЗКА ДАННЫХ INFILE + отслеживание прогресса

Я сделал консольный скрипт PHP, который загружает большой CSV-файл (более 2,5 м строк) и вставляет его в базу данных. я использую LOAD DATA INFILE запрос здесь, и он отлично работает, занимая ~ 20 секунд.

Я хотел бы отслеживать прогресс этого запроса. Я читал о нескольких подходах здесь, но я не знаю, как запустить LOAD DATA INFILE запрос, а затем запустить цикл отслеживания прогресса. Сценарий ждет до LOAD DATA INFILE готово.

Моя база данных — MySQL, а движок — InnoDB. Я использую Laravel Framework.

3

Решение

Вы можете «разделить» файл дампа с помощью пт-ФИФО-сплит и печатать сообщение о прогрессе после каждого чанка.

Например, в оболочке:

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
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]