джедаев.
Есть FCGI скрипт, в который пользователь отправляет файл CSV, файл сохраняется на сервер, дальше я достаю из него данные (использую Text::CSV::Encoded), делаю с ними небольшие манипуляции, и записываю измененные данные в новый файл, который потом загружаю в MySQL (8 версия) с помощью LOAD DATA LOCAL INFILE.
Небольшие файлы размером 10-20К строк обрабатывались без вопросов, а вот при попытке загрузить 250К строк я в какой-то страшный ад попал на неделю. MySQL начал дублировать некоторые строки при импорте, хотя в исходном загружаемом файле (уже после обработки) количество строк было всегда правильным! И вот я открываю этот файл vim'ом, смотрю - в нем все отлично, 250К строк, смотрю в MySQL после загрузки - а там 290К стало, некоторые тупо продублировались. Но эту фигню я смог победить - начал загрузку в MySQL вызывать не из Perl скрипта, а стал вызывать mysql команду как системную, и из неё вызывал LOAD DATA INFILE (уже без LOCAL). И после этого всё стало работать правильно!
Но, обнаружился новый баг, который я никак не могу побороть. Скрипт начинает читать один файл, редактировать данные, записывает их в новый файл, но как только доходит до конца, эта операция начинает работать сначала. То есть, каждый файл, который у меня создается для загрузки в MySQL, создаётся два раза! Я прямо сижу в консоли, делаю ls -l, и вижу как он по новой начинает создаваться, а в скрипте ничего такого нет, никакого цикла, или чего-то, что бы явно могло мне делать эту фигню.
Может, есть какие-то догадки? Могу прислать код в студию.
А ты имя файла перед открытием каждый раз новое делай и потом логи почитай
А в какой лог смотреть?
Обсуждают сегодня