Wprowadzenie do błędu MySQL: zbyt wiele połączeń
W przypadku aplikacji internetowej (strony internetowej, bloga, forum itp.) o dużym obciążeniu, co oznacza dużą liczbę użytkowników, przekłada się to na zwiększone zużycie zasobów serwera. Jeśli ta aplikacja internetowa korzysta z bazy danych MySQL, a zapytania są bardzo liczne ( z powodu słabego programowania strony lub dużej liczby użytkowników ), MySQL może wyświetlić następujący błąd:
mysqli_connect(): (HY000/1040): Too many connections
Co oznacza błąd MySQL: Too Many Connections?
Oznacza to, że do MySQL przychodzi zbyt wiele żądań, więcej niż może przyjąć, więcej niż może ustawić w kolejce lub czekać.
Jak to rozwiązać?
Po prostu musimy zwiększyć maksymalny limit żądań (połączeń), które obsługuje MySQL.
Dam ci dwie opcje rozwiązania tego problemu:
1. Edytujemy plik /etc/mysql/my.cfg:
nano /etc/mysql/my.cfg
W nim umieściliśmy następujące pod tym, gdzie jest napisane [mysql]:
max_connections = 500 max_user_connections = 500
Zwiększy to maksymalną liczbę połączeń ze 100 (wartość domyślna) do 500.
Zapisujemy i wychodzimy, a następnie ponownie uruchamiamy usługę MySQL i to wszystko. Ta zmiana jest trwała.
2. Innym sposobem rozwiązania tego problemu jest zmiana maksymalnego limitu, ale przy użyciu zapytania MySQL.
Najpierw pokażmy aktualny limit:
mysql --user="root" --password="PASSWORD" --execute='SHOW VARIABLES LIKE "max_connections";'
To pokaże nam coś takiego:
+ ----------------- + ------- + | Variable_name | Wartość | + ----------------- + ------- + | max_connections | 151 | + ----------------- + ------- +
Innymi słowy, obecny limit to 151 połączeń, cóż, podnieśmy go do 500 za pomocą zapytania:
mysql --user="root" --password="PASSWORD" --execute='SET GLOBAL max_connections = 500;'
Gotowy!
Problem polega na tym, że po ponownym uruchomieniu usługi ta konfiguracja jest tracona.
Aby nadrobić ten szczegół, możesz utworzyć skrypt bash, który sprawdza co X czasu, lub nawet dodać linię do bloku start lub restart demona
Ale dlaczego chcę znać tę drugą opcję? … cóż, to właśnie powiedziałem. Ale miesiąc temu serwer Ubuntu zignorował metodę nr 2, więc... w skrajnych przypadkach głupiego systemu operacyjnego mamy drugą opcję, która działa równie dobrze