Автор Тема: PHP / Mysql проблеми - mysql server has gone away  (Прочетена 7965 пъти)

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
То не е точно web development, става въпрос за един демон, който пиша, който стои една зад уеб-фронтенда. За демонът е характерно, че е нещо като dispatcher за job-ове. Когато изчислителните ресурси се освободят, демонът засилва следващият job в опашката, който е наред да бъде изпълнен.

Job-а се изпълнява малко странно, форква се нов дъщерен процес, който засилва през ssh задачата на отдалечена машина и събира резултата от изпълнението. Parent процеса създава mysql връзка малко преди да се форкне дъщерния. Дърщерния съответно преизползва connection-a. Съответно гърми с:

Цитат
mysql server has gone away

Сега това е логично, понеже понякога job-овете отнемат часове докато се изпълнят и за това време връзката до mysql сървъра отдавна е таймаутнала. По-интересното е че когато се опитам да отворя последваща връзка и да засиля заявка към базата, тя умира точно по същият начин. Отварянето на връзката е ОК, но заявката гърми със същата грешка.

Проблемът е workaround-нат по идиотски начин: mysql сървъра слухти на на един ethernet интерфейс, както и на loopback-а. Ако умре връзката към 127.0.0.1, създавам нова като я отварям към IP адреса на етернетския интерфейс и тогава всичко минава без проблеми. Проблемът е че това е просто тъпо.

Не мога да си обясня този проблем. Според мен тъпото PHP просто се опитва да преизползва връзката без да вземе предвид че е таймаутнала, един вид някакъв connection reuse механизъм. Но това е безумно малоумно и води дотам че и без това отвратителния код става още по-отвратителен.

Някой забелязвал ли е този проблем и дали е открил по-добро решение ако го е забелязал?
« Последна редакция: Apr 23, 2012, 21:22 от gat3way »
Активен

"Knowledge is power" - France is Bacon

wfw

  • Напреднали
  • *****
  • Публикации: 249
  • Distribution: Debian
  • Window Manager: none
    • Профил
Re: PHP / Mysql проблеми - mysql server has gone away
« Отговор #1 -: Apr 23, 2012, 21:30 »
wait_timeout и interactive_timeout на mysql защо не ги вдигнеш?
Активен

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: PHP / Mysql проблеми - mysql server has gone away
« Отговор #2 -: Apr 23, 2012, 21:33 »
Мога да ги вдигна, но не е там проблема. Проблемът не е в mysql, проблемът е в PHP. Рових в bugtracking системата им, засега не съм открил точно същият казус. Това ме навежда на мисълта, че съм нацелил някакъв feature, а не бъг. За жалост не съм толкова чак толкова навътре в PHP за да знам със сигурност, в интерес на истината не съм пипал PHP сигурно от година. Обаче досега не съм го виждал това поведение в интерес на истината.
Активен

"Knowledge is power" - France is Bacon

wfw

  • Напреднали
  • *****
  • Публикации: 249
  • Distribution: Debian
  • Window Manager: none
    • Профил
Re: PHP / Mysql проблеми - mysql server has gone away
« Отговор #3 -: Apr 23, 2012, 21:46 »
На няколко мои машини има подобен проблем - започва да работи скрипт, който в началото на работа си отваря връзка към базата данни. Извършва някакви сложни сметки, сортира и т.н. и след 5 минути започва да се обръща към базата, но времето, за което връзката не е била използвана е по-голямо от въпросните 2 променливи, които споменах. Тогава връща същата грешка, че mysql-a е затворил връзката.
Нашите interactive и wait timeouts са малки (5-10сек), защото има безумно написани приложения, които са прекалено тъпи да си затварят връзките и така ги форсираме да ги затварят, иначе при голямо натоварване понякога mysql-a остава без връзки, а реално нищо не го натоварва.

Пробвай да затвориш връзката към mysql и да я отвориш в края нa job-a, така би трябвало да се унищожи конструктура, в случай, че ползваш mysql_connect. ако ползваш mysql_pconnect, пробвай да ползва mysql_connect.

Можеш да пробваш и връзка през сокета...
Активен

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: PHP / Mysql проблеми - mysql server has gone away
« Отговор #4 -: Apr 23, 2012, 21:55 »
Там е проблемът. Викам mysql_close(), отварям нова връзка (няма проблеми), правя заявката, гръмва ми с тази грешка. Алтернативно обаче ако отворя новата връзка към другия IP адрес на който слухти сървъра, тогава няма проблеми. Няма много логика, единственото което ми хрумва е че PHP може би прави някакви хитрости с connection management-а си. Както и да е, така или иначе имам workaround, ще си карам с него.
Активен

"Knowledge is power" - France is Bacon

go_fire

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 8929
  • Distribution: Дебиан Сид
  • Window Manager: ROX-Desktop / е17
  • кашик с гранатомет в танково поделение
    • Профил
    • WWW
Re: PHP / Mysql проблеми - mysql server has gone away
« Отговор #5 -: Apr 23, 2012, 22:53 »
Така си е устроен. Отвориш ли една връзка да си я ползваш до края. Златно правило си е да не се затварят връзки и отварят нови. Това е може би първото, на което учат начинаещия при работа със СУБД в php. Дали е тъпо или не не съм компетентен да кажа, но ми звучи логично да е така.
Активен

В $por4e2 e истината  ;)

***

Aко даваха стипендия за най-глупави, щях да съм човека с най-много Mини Kупъри

***

Reborn since 1998 || 15.09.2007 totally М$ free && conscience clear

neter

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 3408
  • Distribution: Debian, SailfishOS, CentOS
  • Window Manager: LXDE, Lipstick
    • Профил
    • WWW
Re: PHP / Mysql проблеми - mysql server has gone away
« Отговор #6 -: Apr 24, 2012, 02:02 »
Не съм попадал на това, но изглежда целта на функцията mysql_ping() е да спомага точно в такива случаи - проверява дали връзката е timeout-нала, и ако е, съобщава за това и пробва да се свърже отново, преизползвайки същия отворен канал. Странно, въпреки написаното в описанието към функцията, в коментар на потребител отдолу пише, че mysql_ping() само проверява дали връзката е още активна, но не се свързва автоматично, ако е timeout-нала, но дори да е така, с повторно изпълнение на mysql_connect() след това може да се задейства.
И въпреки това, нещо не е читава тази работа да не можеш да се вържеш към същото IP с друга връзка, но към другото да можеш. Ако намеря време тия дни ще си поиграя да видя какъв feature или бъг са спретнали в PHP :)
Активен

"Да си добре приспособен към болно общество не е признак за добро здраве" - Джиду Кришнамурти

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: PHP / Mysql проблеми - mysql server has gone away
« Отговор #7 -: Apr 24, 2012, 09:11 »
Цитат
Така си е устроен. Отвориш ли една връзка да си я ползваш до края. Златно правило си е да не се затварят връзки и отварят нови. Това е може би първото, на което учат начинаещия при работа със СУБД в php. Дали е тъпо или не не съм компетентен да кажа, но ми звучи логично да е така.

Може и да върши работа за apache скрипт, от който не се очаква да отнеме повече от няколко секунди за изпълнение, но не виждам как ще се случи с демон, който работи в background-a. Това примерно би означавало като рестартирам mysql-а да ходя и да рестартирам и демона (и ако има schedule-нат job става красиво - базата остава в неконсистентно състояние, а job-а съответно увисва завинаги в състояние "изпълнява се".

Това също би налагало mysql връзките никога да не таймаутват.
« Последна редакция: Apr 24, 2012, 09:16 от gat3way »
Активен

"Knowledge is power" - France is Bacon

borovaka

  • Напреднали
  • *****
  • Публикации: 1331
  • Distribution: Каквото дойде
  • Window Manager: Gnome / KDE
    • Профил
Re: PHP / Mysql проблеми - mysql server has gone away
« Отговор #8 -: Apr 24, 2012, 09:39 »
@gat3way Разгледай атрибута Persistent connections при PDO:
http://bg2.php.net/manual/en/pdo.connections.php
Абе изобщо пробвай PDO как ще се държи в подобна ситуация.
А ако продължи да прави номера, може да пробваш ODBC.
Активен

Та извода е прост: "Колкото по-големи ла*ната - толкова по-малка щетата! ... моралната де, не материалната"

Neo2SHYAlien

  • Напреднали
  • *****
  • Публикации: 93
  • Distribution: Debian Sid
  • Window Manager: Gnome3, E17
    • Профил
    • WWW
Re: PHP / Mysql проблеми - mysql server has gone away
« Отговор #9 -: May 29, 2012, 18:50 »
Аз имам същия проблем с демонче пак на php  ;D аз лично ползвам mysqli и така и не открих логично обяснение защо аджеба се случва така
Активен

- Би ли ми казал кой път да хвана оттук? - попита Алиса.
- Зависи накъде отиваш - отвърна Котаракът.
- Все едно накъде...- каза малкото момиче.
- Тогава е все едно кой път ще вземеш - рече Котаракът.

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
проблем с mysql-server
Настройка на програми
IceHell 3 4420 Последна публикация Apr 07, 2007, 23:53
от neter
Mysql проблем със стартирането(mysql.sock missing)
Настройка на програми
coveka 6 9171 Последна публикация Mar 01, 2008, 22:02
от coveka
Mysql: can't connect to local mysql server
Настройка на програми
wonder 1 7552 Последна публикация Mar 16, 2008, 01:17
от neter
MySQL + DHCP Server
Системни настройки
ceco91 4 3891 Последна публикация Jan 01, 2010, 21:23
от ceco91
Свързване към remote mysql server чрез PDO
Настройка на програми
b2l 12 7275 Последна публикация Nov 15, 2011, 10:35
от mom