Jak pozbyć się błędu „maksymalnych połączeń użytkowników”?

16

Używam MySQLi do mojej aplikacji internetowej, ale za każdym razem, gdy chcę odwiedzić określoną stronę, dostaję mysqli_connect() [function.mysqli-connect]: (42000/1203): User ***_user already has more than 'max_user_connections' active connections.

Próbowałem już zamknąć wszystkie połączenia, ale to nie poprawia sytuacji.

Czy istnieje sposób, aby dokładnie wiedzieć, które połączenia są otwarte w danym momencie lub inne przydatne dane, które mogą pomóc mi rozwiązać ten problem?

BTW, używam PHP 5.2.17 i MySQL 5.1.

Ahmed
źródło

Odpowiedzi:

24

Opcja max_user_connections jest narzuconym limitem, nie na całkowitą liczbę jednoczesnych połączeń w instancji serwera, ale na indywidualne konto użytkownika.

Powiedzmy, że użytkownik jest nazywany db_user@localhost. Możesz dowiedzieć się, jaki jest limit połączeń tego użytkownika, uruchamiając to zapytanie:

SELECT max_user_connections FROM mysql.user
WHERE user='db_user' AND host='localhost';

Jeśli jest to wartość niezerowa, zmień ją z powrotem za pomocą:

GRANT USAGE ON *.* TO db_user@localhost WITH MAX_USER_CONNECTIONS 0;

lub

UPDATE mysql.user SET max_user_connections = 0
WHERE user='db_user' AND host='localhost';
FLUSH PRIVILEGES;

Spowoduje to, mysqldże użytkownik będzie db_user@localhostmógł użyć globalnego ustawienia max_user_connections jako swojego limitu.

Po przejściu do tego punktu sprawdź teraz ustawienie globalne za pomocą

SHOW VARIABLES LIKE 'max_user_connections';

Jeśli jest to wartość niezerowa, musisz zrobić dwie rzeczy

RZECZ 1 : Poszukaj ustawienia w/etc/my.cnf

[mysqld]
max_user_connections = <some number>

skomentuj tę linię

RZECZ 2 : Ustaw wartość dynamicznie

SET GLOBAL max_user_connections = 0;

Ponowne uruchomienie MySQL nie jest wymagane.

CAVEAT

Omawiałem to ustawienie w przeszłości

Spróbuj !!!

RolandoMySQLDBA
źródło