Eroare de erori - "serverul MySQL a dispărut"

[I hope this isn't too obscure… I'll ask the newsgroup if nobody knows here]

I'm using Pylons (a python framework) to serve a simple web application, but it seems to die from time to time, with this in the error log: (2006, 'MySQL server has gone away')

Am verificat puțin și am văzut că acest lucru se datorează faptului că conexiunile la MySQL nu au fost reînnoite. Acest lucru nu ar trebui să fie o problemă, totuși, deoarece sqlalchemy.pool_recycle din fișierul de configurare ar trebui să-l păstreze în mod automat în viață. Valoarea implicită a fost 3600 , dar am format din nou 1800 din cauza acestei probleme. A ajutat un pic, dar 3600 ar trebui să fie bine în conformitate cu documentele. Erorile se întâmplă în continuare semi-regulat. Nu vreau să o micșorez prea mult deși și DOS propria mea bază de date :).

Poate ceva din configurația mea MySQL este prost? Nu sunteți sigur unde să arătați exact.

Alte detalii relevante:

  Python 2.5
  Pylons: 0.9.6.2 (w/ sql_alchemy)
  MySQL: 5.0.51
0
fr hi bn
Am primit această eroare după ce un script pe care l-am scris a mers AWOL și a introdus simultan 10000 de rânduri într-o masă. Se pare că mi-a fost o greșeală - nu sunt sigur dacă asta se referă la problema ta ...
adăugat autor Andrew G. Johnson, sursa

2 răspunsuri

Cred că am rezolvat-o. Se pare că am o eroare simplă config. Fișierul meu inițial a citit:

sqlalchemy.default.url = [connection string here]
sqlalchemy.pool_recycle = 1800

Problema este că fișierul meu environment.py a declarat că motorul va hărți numai cheile cu prefixul: sqlalchemy.default astfel încât pool_recycle a fost ignorat.

Soluția este de a schimba pur și simplu a doua linie din ini pentru a:

sqlalchemy.default.pool_recycle = 1800
0
adăugat
Recent, am văzut ceva trafic pe acest post. Trebuie remarcat faptul că această problemă se referea la Pilonii 0.9.6. Acest lucru ar trebui avut în vedere în Piloni 0.9.7, iar proprietatea "sqlalchemy.default" dispare în favoarea unei "șabloane"
adăugat autor swilliams, sursa

S-ar putea să doriți să verificați variabilele timeout ale MySQL:

show variables like '%timeout%';

Probabil că ești interesat în wait_timeout (mai puțin probabil, dar este posibil: interactive_timeout ). Pe Debian și Ubuntu, valorile implicite sunt 28800 (MySQL ucide conexiunile după 8 ore), dar poate că implicit pentru platforma dvs. este diferită sau cine administrează serverul a configurat lucrurile în mod diferit.

AFAICT, pool_recycle nu păstrează de fapt conexiunile în viață, le expiră pe cont propriu înainte ca MySQL să le ucidă. Nu sunt familiarizat cu stâlpii, dar dacă provocarea conexiunilor la intermitent face o SELECT 1; este o opțiune, care le va menține în viață cu prețul practic de încărcare a serverului și trafic minim de rețea. Un gând final: reușiți cumva să folosiți o conexiune pe care pilonii o consideră a expirat?

0
adăugat
Nu pot spune cu certitudine; Nu știu încă internii Pilonilor destul de bine. N-am avut nici o șansă de a încerca documentația încă (ocupată ocupată). Nu cred că SELECT 1; lucru este o opțiune, deși, pare un fel de kludgey prea :).
adăugat autor swilliams, sursa
Python România
Python România
100 participanți

Comunitatea pasionaților de Python din România.

MySQL - comunitatea Română
MySQL - comunitatea Română
19 participanți

Comunitatea română a programatorilor MySQL.