Регистрация
Вход через соцсети
Восстановление пароля

mysql server has gone away при использовании больших скриптов

Новый топик
11.03.2013, 21:45
Ответить | Цитировать
Чижиков Роман
Чижиков Роман Николаевич

Зарегистрирован:
2012-05-08
Сообщений: 71

Через curl делаю запрос на другой сервер, ответ жду долго. NetCat(На этом сервере) выдает ошибку на mysql запрос netcat'a что mysql ушел далекоо.
1. При чем тут mysql вообще?
2. Как быть?

12.03.2013, 18:31
Ответить | Цитировать
DiGGy
DiGGy
DiGGy

Зарегистрирован:
2005-04-04
Сообщений: 1546

А что значит "ушел далекоо"? Код ошибки какой?
Отделите мух от котлет - curl - это ф-я по работе с внешним ресурсом, а mysql - это уже запросы "на этом сервере". У вас curl ф-ия в итоге отрабатывает, данные возвращаются? Выложите sql-запрос, на котором все слетает. Включите таймер - посмотрите

Включение инфы для дебага делается тут: в файле /netcat/require/e404.php - раскомментируйте.
Цитата:
/*
///////////////////////
require("Benchmark/Timer.php");
$nccttimer = new Benchmark_Timer();
$nccttimer->start();
///////////////////////
$db->debug_all = true;
$db->benchmark = true;
///////////////////////////////////
*/


Temet nosce...
12.03.2013, 19:08
Ответить | Цитировать
Чижиков Роман
Чижиков Роман Николаевич

Зарегистрирован:
2012-05-08
Сообщений: 71

Вот этот злосчастный запрос
Код:
  Query: <br/> SELECT `Field_ID` as `id`, `Field_Name` as `name`,
`TypeOfData_ID` as `type`, `Format` as `format`,
`Description` AS `description`, `NotNull` AS `not_null`,
`DefaultState` as `default`, `TypeOfEdit_ID` AS `edit_type`,
`DoSearch` AS `search`
FROM `Field`
WHERE `Checked` = 1 AND
`Class_ID` = '203'
ORDER BY `Priority`<br/>Error: <br/>MySQL server has gone away


Как я понял мускуль не закрывает соединения а продолжает что то обрабатывать во время запроса curl, таким образом мускуль вылетает по таймауту. Но как поправить это все дело?

12.03.2013, 20:27
Ответить | Цитировать
DiGGy
DiGGy
DiGGy

Зарегистрирован:
2005-04-04
Сообщений: 1546

1. У вас curl ф-ия в итоге отрабатывает, данные возвращаются?
2. Это запрос из движка неткета или ваш собственный?
3. На какой (мили)секунде вываливается ошибка?
4. Если его отдельно выполнить через sql-консоль - он выполняется?
5. Сколько всего записей в таблице? select count(1) from Field

Temet nosce...
12.03.2013, 20:52
Ответить | Цитировать
Чижиков Роман
Чижиков Роман Николаевич

Зарегистрирован:
2012-05-08
Сообщений: 71

1.curl обрабатывается, но данные не возвращаются
2. Это запрос кота
3. Не выходит отмерить.
4.выполняется, но имеет пустой результат
5. около 500

12.03.2013, 20:58
Ответить | Цитировать
DiGGy
DiGGy
DiGGy

Зарегистрирован:
2005-04-04
Сообщений: 1546

Цитата:
1.curl обрабатывается, но данные не возвращаются

Эту проблему надо рассматривать отдельно.
Цитата:
3. Не выходит отмерить.

Как это? Через benchmark не мериет? Поставьте свой измеритель.
Цитата:
4.выполняется, но имеет пустой результат

а если curl ф-ию убрать - что происходит?
где именно прописан вызов curl ф-ии?
Цитата:
5. около 500

Это ничтожно мало. Но проверьте на всякий случай наличие индекса по полям Checked и Class_ID

6. Посмотрите через phpinfo() чему равно значение max_execution_time?

Temet nosce...
12.03.2013, 21:23
Ответить | Цитировать
Чижиков Роман
Чижиков Роман Николаевич

Зарегистрирован:
2012-05-08
Сообщений: 71

max_execution_time = 60

Цитата:
а если curl ф-ию убрать - что происходит?
где именно прописан вызов curl ф-ии?

curl ф-ия обращается к удаленному серверу, отдает ему пост запрос и долго ждет ответ(там архив формируется), так вот, если архив маленький, то все работает нормально. Но если архив большой, то вылетает эта ошибка.

12.03.2013, 22:09
Ответить | Цитировать
DiGGy
DiGGy
DiGGy

Зарегистрирован:
2005-04-04
Сообщений: 1546

Скорее всего упираетесь в лимит max_execution_time, который не позволяетскрипту отработать до конца. Попробуйте вызвать скрипт через SSH - где ограничения на время могут отсутствовать.

Как вариант решения - используйте планировщики на обоих сайтах.
Исходный сайт (клиент) должен решать след. задачи:
1. Постановка задачи на выполнение ф-ии.
2. Проверка выполнения ф-ии (вешать на планировщик).
3. Получение результата выполнения ф-ии (вешать на планировщик).
4. Подтверждение получения результата (что файл с архивом скачан корректно - контрольной суммы файла).

Внешний сайт (сервер):
1. Постановка факта получения задачи.
2. Выполнение задания (вешать на планировщик).
3. Отметка о факте выполнения.
4. Фиксация подтверждения получения результата (и как вариант удаление файла архива).

Ну и до кучи надо сделать систему логирования клиента и сервера с возможностью мониторинга текущих задач.

зы. Архивы лучше по ftp качать - размер файла меньше. Также можно через почту решать (не sendmail, а SMTP с авторизацией).

Выше описанное - это общий случай. Можно просто тупо сделать иначе. Сайт-сервер по планировщику заранее готовит архив - в 1 час ночи. Сайт-клиент забирает этот архив в 3 часа ночи. На след ночь сайт-сервер создает новый архив перезаписывая вчерашний.

Temet nosce...
13.03.2013, 03:21
Ответить | Цитировать
Asiat
Аниматика
Asiat

Зарегистрирован:
2005-12-12
Сообщений: 567

Еще одна идея - проверьте значение настройки wait_timeout у MySQL
Возможно, соединение действительно закрывается.
Если что - переназначьте его поболе в my.cnf

Разработка сайтов на Netcat с 2006... хм-м ... или 2005 хммм года. В общем, обращайтесь.
26.03.2013, 16:45
Ответить | Цитировать
Чижиков Роман
Чижиков Роман Николаевич

Зарегистрирован:
2012-05-08
Сообщений: 71

Дело оказалось в отложенных запросах. Пока работает курл, отложенные запросы ждут, ждут, и в итоге вылетают естественно. Всем спасибо за помощь

198 196 2013-03-26 16:45:54 12950
Описание проекта