Introducció a l'error de MySQL: Too Many Connections
Quan es té una aplicació web (lloc, bloc, fòrum, etc) que té alta demanda, és a dir, que gran nombre d'usuaris visita això es tradueix en increment de consum al servidor. Si aquesta app web utilitza una base de dades MySQL i les consultes són realment moltes ( per mala programació de la web o per molts usuaris usant la web ), hi ha la possibilitat que MySQL mostri aquest error:
mysqli_connect(): (HY000/1040): Too many connections
¿Què significa l'error de MySQL: Too Many Connections?
Vol dir que a l'MySQL estan arribant massa peticions, més de les que pot acceptar, més de les que pot posar en cua o en espera.
Com solucionar-ho?
Simple, hem d'augmentar el límit màxim de peticions (connexions) que MySQL admet.
Els donaré dues opcions per solucionar aquest problema:
1. Editem el fitxer /etc/mysql/my.cfg :
nano /etc/mysql/my.cfg
En ell posem el següent sota on diu [mysql]:
max_connections = 500 max_user_connections = 500
Això augmentarà el nombre màxim de connexions de 100 (que és el per defecte) a 500.
Guardem i vam sortir, llavors reiniciem el servei MySQL i llest. Aquest canvi és permanent.
2. Una altra manera de resoldre aquest problema és canviant el límit màxim igual, però mitjançant una consulta MySQL.
Primer anem a mostrar el límit actual:
mysql --user="root" --password="PASSWORD" --execute='SHOW VARIABLES LIKE "max_connections";'
Això ens mostrarà alguna cosa com això:
+ ----------------- + ------- + | Variable_name | Value | + ----------------- + ------- + | max_connections | 151 | + ----------------- + ------- +
O sigui, que el límit actual són 151 connexions, bé, anem a pujar-lo a 500 per mitjà d'una consulta:
mysql --user="root" --password="PASSWORD" --execute='SET GLOBAL max_connections = 500;'
A punt!
El problema d'aquesta manera, és que quan es torna a arrencar el servei, es perd aquesta configuració.
Per suplir aquest detall es pot fer un script bash que cada X temps verifiqui, o fins i tot afegir la línia al bloc de start o restart del daemon
Però aleshores per què vull conèixer aquesta 2a opció? … bé, això mateix deia jo. Però fa un mes un Ubuntu Server feia cas omís al mètode No.1, per la qual cosa… en casos extrems de OS majaderos, tenim aquesta 2a opció que funciona igual de bé