@47911

Импорт большого файла с ошибкой recv() failed (104: Connection reset by peer) — что делать?

Добрый день/вечер/ночь/утро.
У меня непонятная ситуация.
Есть скрипт импорта в базу. Импортировал, радовался(сам написал).
Появилось желание импортировать файл с ~90 000 статей(1 статья - 10-20 записей в разные таблицы).
А оно выпадает через РАЗНЫЕ промежутки времени и с разным результатом. Т.е. при 1-м запуске - записал 40000, а при повтором(востановил базу, и заново импорт) - 10000. В логах:
[error] recv() failed (104: Connection reset by peer) while reading response header from upstream

Версия: php7.4-fpm, 10.5.8-MariaDB(импорт через mysqli)

Собственно вопрос: какие параметры надо выкручивать, чтобы оно перестало выпадать?

Вариант с "разбиением файла на маленькие" - не очень практично: там могут встречатся проблемы "дубликаты" и не только. Хотелось бы избежать мороки с "разбиением".
  • Вопрос задан
  • 87 просмотров
Решения вопроса 1
@47911 Автор вопроса
Daria Motorina
https://serverfault.com/a/782128/441975

После указания:
opcache.memory_consumption = 128
(раскоментировал)
Импорт прошёл, видимо глючил кешер.

Обновлено: 18.03.2021
Я поторопился. Проблема никуда не ушла.
Но: 1-й запуск за сутки - позволяет импортировать. А вот последующий импорт - не доходит до конца.

Если важно: php-fpm 5.6, php-fpm 7.0, php-fpm 7.3, php-fpm 7.4(на выбор)
Скрипт запускается на php-fpm 7.4
mariadb Ver 15.1 Distrib 10.5.9-MariaDB
100 гигов оперативки
2 проца по 16 ядер 2.40GHz
И загрузка не превышает 50% проца и 70% памяти.
использую в скрипте:
mysqli_autocommit и mysqli_commit

Есть идеи? Импортирую по факту 100 000 статей, в 5 таблиц(количество таблиц к которым обращаюсь), и в одну из них - 15-20 записей(свойства). Итого 20-25 запросов максимум. И оно выпадает с:

[error] recv() failed (104: Connection reset by peer) while reading response header from upstream

Я уже не знаю что ещё пробовать. В теории будет ещё импорт с большим количеством записей, неужели делить по 10 000 ? Ещё идеи есть?

Обновлено
проблема была решена. Надо запускать под админом, в консоле. Тут нету прерывания.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Возможно, лимит времени работы скрипта. set_time_limit()
А вообще, для экспорта/импорта базы не нужны дополнительные скрипты. Достаточно консольных утилит mysqldump (экспорт) и mysql (импорт).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы