Comment se débarrasser de l'erreur «nombre maximal de connexions utilisateur»?

16

J'utilise MySQLi pour ma webapp mais chaque fois que je veux visiter une page en particulier, j'obtiens mysqli_connect() [function.mysqli-connect]: (42000/1203): User ***_user already has more than 'max_user_connections' active connections.

J'ai déjà essayé de fermer toutes les connexions mais cela n'améliore pas la situation.

Existe-t-il un moyen de savoir exactement quelles connexions sont ouvertes à un moment donné ou toute autre donnée utile qui peut m'aider à résoudre ce problème?

BTW, j'utilise PHP 5.2.17 et MySQL 5.1.

ahmed
la source

Réponses:

24

L'option max_user_connections est une limite imposée, non pas sur le nombre total de connexions simultanées dans l'instance de serveur, mais sur le compte d'utilisateur individuel.

Disons que l'utilisateur est appelé db_user@localhost. Vous pouvez savoir quelle est la limite de connexion de cet utilisateur en exécutant cette requête:

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

S'il s'agit d'une valeur différente de zéro, modifiez-la à nouveau avec:

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

ou

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

Cela entraînera mysqldpour permettre à l'utilisateur db_user@localhostd'utiliser le paramètre global max_user_connections comme sa limite.

Une fois arrivé à ce point, vérifiez maintenant le paramètre global à l'aide de

SHOW VARIABLES LIKE 'max_user_connections';

S'il s'agit d'une valeur différente de zéro, vous devez faire deux choses

CHOSE # 1 : Recherchez le paramètre dans/etc/my.cnf

[mysqld]
max_user_connections = <some number>

commenter cette ligne

CHOSE # 2 : définir la valeur dynamiquement

SET GLOBAL max_user_connections = 0;

Le redémarrage de MySQL n'est pas requis.

CAVEAT

J'ai discuté de ce paramètre dans le passé

Essaie !!!

RolandoMySQLDBA
la source