login  Naam:   Wachtwoord: 
Registreer je!
 Forum

[PHP/MySQL] MySQL server has gone away

Offline Pakito - 26/02/2010 22:23
Avatar van PakitoNieuw lid Hallo,

ik heb 2 vragen.

Punt 1:
Als ik mijn IRC bot connect is er niets aan de hand, maar na een paar min zegt hij MySQL server has gone away, ik heb iemand anders precies de zelfde bot opzijn pc laten zetten en daar werkt hij gewoon. enig idee wat het probleem kan zijn? als evt de scripts nodig zijn hoor ik het wel.

Punt 2:
om die bot aan te roepen, wil ik graag PuTTY gebruiken, maar als ik PuTTY sluit, quit de bot ook, enig idee als oplossing hier voor?

Mvg,
Pakito

3 antwoorden

Gesponsorde links
Offline Filip - 26/02/2010 22:35
Avatar van Filip IRC guru Punt 1:
Waarschijnlijk komt dit door dat je 'sessie' bij mysql een timeout krijgt. Kijk eens na hoe de database gebruikt word in het wel werkende script.

Punt 2:
Hier kan je meerdere dingen tegen doen, onderandere het zogenaamde 'deamonizen'. Ook via een crontab opstarten kan helpen. Misschien (weet ik niet zeker) is er zelfs een parameter die je kan meegeven om het in de background te steken.
Offline Pakito - 26/02/2010 22:50
Avatar van Pakito Nieuw lid Hmm,

Punt 1:
hoe krijg ik die time out weg?

Punt 2:
wat is een crontab, of is dat hetzelfde als een cronjob?
Offline Koen - 26/02/2010 23:07
Avatar van Koen PHP expert Zoals ik al eens een keertje gezegd heb ligt het probleem bij de verbinding met de MySQL server die weg valt na x aantal seconden (al dan niet wegens inactiviteit). Een oplossing voor dit probleem ligt misschien iets moeilijker, misschien kan je proberen eens in de MySQL config uit te kijken naar een mogelijkheid om die lifetime van zo'n verbinding op te schroeven (WAIT_TIMEOUT denk ik dat het was). Om timeouts te voorkomen kan je ook PHP.net: mysql_ping uitvoeren als er een tijdje geen queries zijn uitgevoerd om aan de server te laten weten dat je script nog steeds leeft en dus een verbinding nodig heeft. Desnoods maak je een nieuwe verbinding aan elke keer dat je die error krijgt. Errors kan je opvangen door een @ voor de functie te plaatsen, bijvoorbeeld:

  1. $query = @mysql_query("Query");
  2. if($query === false)
  3. {
  4. if(mysql_errno() == 2006)
  5. {
  6. mysql_connect('host', 'naam', 'pass');
  7. }
  8. }

Zoals je ziet gebruik ik hier de functie PHP.net: mysql_errno waarmee je de nummer van de laatste foutmelding kan opvragen, 2006 is de errorcode van "MySQL Server has gone away".

Voor punt twee kan je "screen" gebruiken. Het komt er op neer dat screen een applicatie binnen linux is waarmee je taken op de achtergrond kan uitvoeren, perfect voor onze opstelling dus. Type gewoon screen in de commandline, druk op spatie of enter bij de voorwaarden en type het commando om je robot te starten. Druk vervolgens op CTRL+A (sta toe dat keyboard events naar screen worden verstuurd en niet naar de terminal) en CTRL+D (detach screen), en je bent klaar. 

Succes!
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.17s