Úvod do chyby MySQL: Príliš veľa pripojení
Keď máte webovú aplikáciu (stránku, blog, fórum atď.), ktorá má vysoký dopyt, čo znamená, že ju navštevuje veľký počet používateľov, premieta sa to do zvýšenej spotreby serverových zdrojov. Ak táto webová aplikácia používa databázu MySQL a dotazy sú veľmi početné ( kvôli zlému programovaniu webovej stránky alebo veľkému počtu používateľov ), MySQL môže zobraziť túto chybu:
mysqli_connect(): (HY000/1040): Too many connections
Čo znamená chyba MySQL: Too Many Connections?
To znamená, že na MySQL prichádza príliš veľa požiadaviek, viac, ako dokáže prijať, viac, ako dokáže zaradiť do frontu alebo čakať.
Ako to riesit?
Je to jednoduché, musíme zvýšiť maximálny limit požiadaviek (pripojení), ktoré MySQL podporuje.
Dám vám dve možnosti, ako tento problém vyriešiť:
1. Upravíme súbor /etc/mysql/my.cfg:
nano /etc/mysql/my.cfg
V ňom vložíme nasledovné pod miesto, kde je napísané [mysql]:
max_connections = 500 max_user_connections = 500
Týmto sa zvýši maximálny počet pripojení zo 100 (čo je predvolené) na 500.
Uložíme a skončíme, potom reštartujeme službu MySQL a je to. Táto zmena je trvalá.
2. Ďalším spôsobom, ako tento problém vyriešiť, je zmena maximálneho limitu, ale pomocou dotazu MySQL.
Najprv si ukážeme aktuálny limit:
mysql --user="root" --password="PASSWORD" --execute='SHOW VARIABLES LIKE "max_connections";'
Ukážeme nám niečo také:
+ ----------------- + ------- + | Názov premennej | Hodnota | + ----------------- + ------- + | max_connections | 151 | + ----------------- + ------- +
Inými slovami, súčasný limit je 151 pripojení, zvyšme ho pomocou dotazu na 500:
mysql --user="root" --password="PASSWORD" --execute='SET GLOBAL max_connections = 500;'
Pripravte sa!
Problém týmto spôsobom je, že pri reštarte služby sa táto konfigurácia stratí.
Na kompenzáciu tohto detailu môžete vytvoriť bash skript, ktorý kontroluje každých X času, alebo dokonca pridať riadok do bloku spustenia alebo reštartu démona
Ale prečo potom chcem vedieť túto 2. možnosť? ... no, to som povedal. Ale pred mesiacom server Ubuntu ignoroval metódu č.1, takže... v extrémnych prípadoch hlúpeho OS máme túto druhú možnosť, ktorá funguje rovnako dobre