General error: 2006 MySQL server has gone away

12
D
На сайте с 28.06.2008
Offline
1108
476

Паршу один государственный сайт, нахожу нужные данные, сверяюсь со своей базой и если нужно записываю данные. Несколько раз записи прошли нормально, но теперь стабильно вываливается 

General error: 2006 MySQL server has gone away

Причем в ответ на простейший селект и у меня закончились догадки почему это может быть. Сервер не перегружен, база тоже (статистика мунин показывает минимум загрузки). Этот же селект которые вызвает ошибку в ПхпМайдамин с тем же айди тут же (если проверить вручную) отрабатывает за 0.001 сек.

Что может вызывать ошибку?



W1
На сайте с 22.01.2021
Offline
306
#1
Dram :
Этот же селект

У тебя ошибка выдаётся не на select, а на insert.

Мой форум - https://webinfo.guru –Там я всегда на связи
D
На сайте с 28.06.2008
Offline
1108
#2
У меня одна догадка - может первый же селект в цикле вызывает открытие соединения с базой, но я его не закрываю и затем оно и закрывается по таймауту? Нужно ли закрывать соединение в PDO ?
D
На сайте с 28.06.2008
Offline
1108
#3
webinfo #:

У тебя ошибка выдаётся не на select, а на insert.

Нет - именно на селект, я уже проверил это, был второй try-catch, я его просто убрал.

D
На сайте с 28.06.2008
Offline
1108
#4
Dram #:
У меня одна догадка - может первый же селект в цикле вызывает открытие соединения с базой, но я его не закрываю и затем оно и закрывается по таймауту? Нужно ли закрывать соединение в PDO ?

вроде нет, сделал 

$chek2 = null;
$result2 = null;

не помогло

L
На сайте с 10.02.2015
Offline
247
#5
Dram #:
У меня одна догадка - может первый же селект в цикле вызывает открытие соединения с базой, но я его не закрываю и затем оно и закрывается по таймауту? Нужно ли закрывать соединение в PDO ?

Сколько времени работает скрипт?

Если долго, то да, нужно закрывать соединение и открывать заново.

Это для долгого консольного выполнения скрипта в основном.

D
На сайте с 28.06.2008
Offline
1108
#6
livetv #:

Сколько времени работает скрипт?

Если долго, то да, нужно закрывать соединение и открывать заново.

Это для долгого консольного выполнения скрипта в основном.

до ошибки минуты 2-3

L
На сайте с 10.02.2015
Offline
247
#7
Dram #:

до ошибки минуты 2-3

Можно поколдовать со значением переменной wait_timeout в mysql, если оно слишком низкое

D
На сайте с 28.06.2008
Offline
1108
#8

Все таки нужно было закрывать соединение. Закрыл его перед циклом, и стал открывать уже в каждой итерации (и закрывать в конце) и ошибка пропала.

Странно, впервые такое приходится делать



E
На сайте с 01.10.2017
Offline
113
#9

Можно использовать постоянное соединение MySQL. В PDO за это отвечает ATTR_PERSISTENT. Передавайте этот атрибут прямо в конструктор 😉

И в следующий раз показывайте реальный код, чтобы участники форума не домысливали то, что могло быть представлено наглядно.

Домены на продажу: https://p20.ru/collection/domains-for-sale
Aisamiery
На сайте с 12.04.2015
Offline
313
#10
Dram #:

Все таки нужно было закрывать соединение. Закрыл его перед циклом, и стал открывать уже в каждой итерации (и закрывать в конце) и ошибка пропала.

Очень тупая реализация если честно,  лучше уж тогда вначале цикла сделать запрос "select 1" и в catch если упало с SQLException  сделать реконнект, чем каждый цикл подключаться и отключаться, там же оверхед нифиговый так то

Разработка проектов на Symfony, Laravel, 1C-Bitrix, UMI.CMS, OctoberCMS
12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий