De foutmelding “MySQL server has gone away” klinkt vaak iets serieuzer dan hij in de praktijk is. Geen reden voor paniek dus. Op deze pagina leggen we kort uit wat de melding inhoudt, waar deze vandaan komt, hoe je de melding op kunt lossen, en hoe je ‘m in de toekomst tegen kunt gaan.

Wat betekent de melding “MySQL server has gone away”?

Deze melding wordt gegeven wanneer de website of het cron script denkt dat hij een connectie heeft met de MySQL server, maar op het moment dat het script een query probeert te doen, hij erachter komt dat de MySQL server er vandoor is gegaan. Dit resulteert in de foutmelding “MySQL server has gone away”: de server blijkt opeens niet meer naar ons te luisteren.

Waarom is de verbinding met de MySQL server verbroken?

Deze foutmelding geeft dus aan dat de verbinding met de MySQL server is verbroken. Dit kan op verschillende manieren gebeuren:

  • Er zijn veel verbindingen (>=400) open met de MySQL server. Alle openstaande connecties waar geen queries op gebeuren worden gesloten, zodat de server niet vast loopt. Als er dan nog steeds veel verbindingen open zijn worden ook lopende queries afgebroken.
  • De connectie blijft te lang open. Als er langer dan een uur geen query is gedaan op een connectie, houdt MySQL het voor gezien. Dit kan bijvoorbeeld gebeuren bij cron scripts die langer dan een uur draaien: aan het begin openen ze de connectie, doen ze enkele queries en na een uur proberen ze nog wat queries te doen op dezelfde connectie. Dat werkt niet, want die connectie is inmiddels gesloten door MySQL.
  • Er gaat te veel data over de lijn. Is een query of resultaat groter dan 32MB, dan verslikt MySQL zich er in en sluit de verbinding.
  • De webserver wordt opnieuw gestart om een nieuwe configuratie in te lezen. De Apache processen op onze webservers moeten af en toe nieuwe configuratie inlezen. Dit zorgt er soms voor dat de verbinding met MySQL weg valt.

Wat moet ik doen om de melding nu te verhelpen?

In veel gevallen kan je deze fout op een eenvoudige manier afvangen, door simpelweg opnieuw verbinding te maken en de query nog eens te proberen. De huidige connectie is verbroken, maar een nieuwe connectie opzetten gaat vaak zonder problemen. Als je deze foutmelding krijgt is het dus het makkelijkste om opnieuw verbinding te maken en dezelfde query nog eens te proberen.

Wat moet ik doen om de melding in de toekomst tegen te gaan?

De volgende zaken kunnen helpen om deze melding in de toekomst tegen te gaan:

  • Duurt je query erg lang? Kijk eens of je een index kan toevoegen of je query anders kan schrijven. Meer info hierover vind je in het artikel Database Optimaliseren. Duurt je script langer dan een uur? Versnel je script, of maak opnieuw verbinding voordat je queries gaat uitvoeren.
  • Houd je veel verbindingen open met de database, of doe je onredelijk veel queries? Pas je implementatie aan om wat zuiniger met de database om te gaan.
  • Ben je technisch genoeg om zelf de code aan te passen? Programmeer dan dat je script opnieuw verbinding maakt als je deze foutmelding krijgt.
  • Heb je nog steeds deze foutmelding? Neem dan contact op met Byte (support@byte.nl), dan helpen wij je verder om dit probleem te analyseren en op te lossen.

Meer info over deze foutmelding vind je ook op https://dev.mysql.com/doc/refman/5.0/en/gone-away.html

26