Erori MySQL: [1203] dbconn: mysql_connect: User krsalmus_123 already has more than 'max_user_connect

Saturday, 21 September 2013 | Views: 319

Eroarea apare in momentul in care utilizatorul cu pricina are mult prea multe conexiuni deschise la MySQL - stopand incarcarea informatiilor sau chiar a paginii.

MySQL fiind o baza de date din care se extrag informatii, in mod normal la finalul fiecarui script ar trebuii sa existe valoarea:

mysql_close();

Conform documentatiei PHP: http://www.php.net/manual/en/function.mysql-close.php

Ei bine, la anumite scripturi aceasta valoare este indepartata, sau uneori este inlocuita din motive pe care mi-e foarte greu sa le inteleg cu:

mysql_query("sleep");

Precum am spus mai sus, MySQL este o baza de date - ca o carte - ne conectam, luam informatiile, servim pagina celui din browser, ne deconectam de la mysql si inchidem procesarea scriptului.

Rezolvarea pentru aceasta problema este una foarte simpla, si anume:

mysql_close(); // la sfarsitul scriptului

  • Majoritatea scripturilor au un fisier, functions (de regula in /include) ce stabileste conexiunea la mysql, interogheaza, proceseaza si returneaza rezultatul scripturilor ce l-au solicitat - Aici trebuie sa lucram !

  • Este necesar sa urmarim in script unde se conecteaza la mysql, unde interogheaza, unde proceseaza si unde inchide -- dar mai ales, este foarte important daca scriptul care solicita functions.php apeleaza si la functia de inchidere a conexiunii.

Exemplu:

function conectareSQL() {

$conn = mysql_connect("x", "z", "d");

/*

Etc etc...

*/

}

function parsareINFORMATII() {

$sql = mysql_query("[...]");

while($row = mysql_fetch_assoc($sql)) {

/*

etc

*/

mysql_close();

}

Exemplul de mai sus este unul foarte rapid scris, acesta nu vrea sa arate decat ca dupa ce facem interogarea, inchidem conexiunea mysql -- sau la sfarsitul cuplului de interogari, inchidem conexiunea MySQL.

Astfel, vom evita conexiuniile persistente la baza de date, spre exemplu intr-o seara m-am mirat cate conexiuni poate sa faca un script prost programat: peste 500.000 mii - unele cu sleep peste 5000 - aceste conexiuni raman deschise in MySQL - si nu fac altceva decat sa incarce sistemul aiurea, si sa-l faca sa nu mai poata raspunda in timp real altor cereri.

Valoarea setata max_user_connections este suficient de mare pentru a satisface nevoile de trafic a fiecarui utilizator (25) - testat chiar si pe site-urile gazduite cu peste 100.000 vizitatori unici pe zii - nu observam nici un fel de problema.

Back to list