Lost connection to MySQL server during query

grey109

Новичок
Lost connection to MySQL server during query

Есть скрипт, который в начале читает конфиг с переменными и коннектиться к mysql, потом работает(крутит цикл) минут 30...40 и на операции вставки в БД вываливается с ошибкой "Lost connection to MySQL server during query". Если цикл закомментировать - все ок. В самом скрипте mysql нигде не используется, кроме одной строки на которой он и вываливается.

Что ему не нравится?

РНР 4.4.1
Mysql 3.23.52-nt
Win 2000
 

440hz

php.ru
grey109
как часто скрипт с базой общается?
таймауты проверь?
 

440hz

php.ru
grey109
ну и коннекться в самом конце. 8) хрен ли 30 минут коннект держать?
 

grey109

Новичок
440hz
Неохото ломать систему. Сейчас сделано так: куча скриптов инклюдят конфиг, в котором читают переменные и в котором же происходит коннект к БД. Все эти скрипты работают несколько секунд - и там такой проблемы нет.

Если сделать как ты говоришь, то придется конфиг разделять на две части: переменные, коннект, т.е. во всех файлах два раза инклюдить в начале, а в этом один раз в начале(читать переменные), второй раз в конце(коннект с БД).

Я правильно понимаю тебя?
 

voituk

прозревший
Скорее всего вылетает по таймауту.
Как вариант пиши SQL в файл а потом его импортируй.
Или же bulk-insert попробуй.
 

440hz

php.ru
grey109
ну именно в этом срипте сделай после включения инклудов принудительно закрытие коннекта, а в том месте где insert опять подключись.

или выставь таймауты нужные на сервере
 

voituk

прозревший
grey109
Ну что ту можно сказать...
"Refactoring" Мартина Фаулера в руки и вперед!
 

grey109

Новичок
voituk
А где можно посмотреть значение таймаута? В конфиге у меня ничего такого нет, значит по идее используется значение по умолчанию. Какое оно?
 

voituk

прозревший
Кстати здравую идею 440hz подкинул.

-~{}~ 18.01.06 13:32:

grey109
[sql] show variables like '%out%';[/sql]
 

grey109

Новичок
voituk
Variable_name Value
connect_timeout 5
delayed_insert_timeout 300
interactive_timeout 28800
net_read_timeout 30
net_write_timeout 60
slave_net_timeout 3600
wait_timeout 28800
 

GrayMaster

Новичок
Аналогичная проблема, в скрипте цикл, в цикле запросы к БД.
После несколькоих минут работы - возникает ошибка: Lost connection to MySQL server during query.
Откуда возникает таймаут, если в цикле работа с БД ?
 

grey109

Новичок
voituk
28800 секунд - это 8 часов. Мой скрипт работает намного быстрее :)

Мне подсказали что дело в "connect_timeout 5". Прописал в my.ini:
[mysql]
set-variable = connect_timeout=10

После перезагрузки mysql по SHOW VARIABLES LIKE '%out%'; ничего не изменилось.
 

alpine

Новичок
grey109
Описание значений переменных:
http://dev.mysql.com/doc/refman/4.0/ru/show-variables.html

-~{}~ 18.01.06 14:53:

connect_timeout к твоей проблеме не относится imho
Я не знаю зачем тебе этот цикл и уверен, что в большинстве случаев без него вполне можно обойтись, но если тебе совсем уж не в моготу, посылай раз в минуту что-то типа "SELECT 1" чтобы соединение не отваливалось.
 

GrayMaster

Новичок
У меня другая проблема. Мой топик закрыли, ссылаясь что такой топик уже есть, но на самом деле проблема другая немного....
У меня в цикле постоянная работа с MySQL, т.е. запросы выполняются несколько раз в секунду, и через некоторое время возникает эта ошибка ! В чем может быть дело ? В нагрузке чтоли ? и как этого избежать ?
 

grey109

Новичок
alpine
Я не знаю зачем тебе этот цикл и уверен, что в большинстве случаев без него вполне можно обойтись, но если тебе совсем уж не в моготу, посылай раз в минуту что-то типа "SELECT 1" чтобы соединение не отваливалось.
Дык цикл - это самое главное, в нем идет обработка данных, без него никак :)

Насчет, SELECTа раз в минутут - надо будет попробовать.
 

GrayMaster

Новичок
Люди, помогите мне тоже пожалуйста :) Мой топик (http://phpclub.ru/talk/showthread.php?s=&threadid=79165) закрыли - сказали что тут та-же самая проблема, оказалось что нет :)

В скрипте цикл, в цикле работа с БД.
После несколькоих минут работы - возникает ошибка: Lost connection to MySQL server during query.
В цикле запросы выполняются несколько раз в секунду, и через некоторое время возникает эта ошибка ! В чем может быть дело ? и как этого избежать ?
 

alpine

Новичок
grey109
У тебя скрипт 30-40 минут непрерывно обменивается данными с сервером?
>> Один раз в самом конце - простой insert.
Объясни. Зачем крутить цикл 30-40 мин чтобы в нем делать один раз инсерт в конце скрипта и при этом постоянно держать соединение открытым?

-~{}~ 18.01.06 15:37:

Почему нельзя сделать коннект к базе данных перед самым выполнением инсерта после цикла?
 
Сверху