Как избавиться от ошибки «максимальное количество пользовательских подключений»?

16

Я использую MySQLi для своего веб-приложения, но всякий раз, когда я хочу посетить какую-то конкретную страницу, я получаю mysqli_connect() [function.mysqli-connect]: (42000/1203): User ***_user already has more than 'max_user_connections' active connections.

Я уже пытался закрыть все соединения, но это не улучшает ситуацию.

Есть ли способ точно узнать, какие соединения открыты в любой конкретный момент или какие-либо другие полезные данные, которые могут помочь мне решить эту проблему?

Кстати, я использую PHP 5.2.17 и MySQL 5.1.

Ahmed
источник

Ответы:

24

Опция max_user_connections - это ограничение, накладываемое не на общее количество одновременных соединений в экземпляре сервера, а на отдельную учетную запись пользователя.

Допустим, пользователь называется db_user@localhost. Вы можете узнать, каково ограничение соединения этого пользователя, выполнив этот запрос:

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

Если это ненулевое значение, измените его обратно на:

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

или

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

Это mysqldпозволит пользователю db_user@localhostиспользовать глобальный параметр max_user_connections в качестве своего предела.

Как только вы дойдете до этой точки, теперь проверьте глобальные настройки, используя

SHOW VARIABLES LIKE 'max_user_connections';

Если это ненулевое значение, вам нужно сделать две вещи

ВЕЩЬ # 1 : Ищите настройки в/etc/my.cnf

[mysqld]
max_user_connections = <some number>

закомментируйте эту строку

ВЕЩЬ № 2 : Установите значение динамически

SET GLOBAL max_user_connections = 0;

Перезапуск MySQL не требуется.

ПРЕДОСТЕРЕЖЕНИЕ

Я обсуждал этот параметр в прошлом

Попробуйте!

RolandoMySQLDBA
источник