Vous devez d'abord exécuter cette requête:
SELECT user,host FROM mysql.user
WHERE super_priv='Y' AND
CONCAT(user,'@',host) <> 'root@localhost';
Ceci listera tous les utilisateurs qui ont le privilège SUPER . La plupart des utilisateurs qui effectuent un traitement de base de données lié à l'application n'ont pas besoin de ce privilège. Selon la documentation MySQL , ceux qui ont le privilège SUPER peuvent faire ce qui suit:
- Exécutez CHANGE MASTER TO pour contrôler les coordonnées de réplication
- KILL ou
mysqladmin kill
pour tuer les threads appartenant à d'autres comptes
- PURGER LES JOURNAUX BINAIRES pour supprimer systématiquement les journaux binaires
- Apportez des modifications de configuration à l'aide de SET GLOBAL pour modifier les variables système globales
- commande de débogage mysqladmin
- activation ou désactivation de la journalisation
- effectuer des mises à jour même si la variable système * read_only * est activée
- démarrage et arrêt de la réplication sur des serveurs esclaves
- spécification de tout compte dans l'attribut DEFINER des programmes et vues stockés
- VOICI LE PLUS IMPORTANT POUR VOTRE PROBLÈME:: vous permet de vous connecter (une fois) même si la limite de connexion contrôlée par la variable système max_connections est atteinte.
Vous devrez vous connecter en tant que root @ localhost et révoquer le privilège SUPER comme suit:
UPDATE mysql.user SET super_priv='N'
WHERE super_priv='Y' AND
CONCAT(user,'@',host) <> 'root@localhost';
FLUSH PRIVILEGES;
Une fois que vous faites cela, chaque fois que tous les utilisateurs inondent les connexions mysql, seuls root@localhost
peuvent se connecter. Après tout, si tout le monde et sa grand-mère avaient un privilège SUPER, cela empêcherait root@localhost
de se connecter avant tout le monde. Si max_connections est à 200 et que vous devez le porter à 300 sans avoir à redémarrer mysqld, vous pouvez augmenter dynamiquement max_connections avec cette commande:
mysql> SET GLOBAL max_connections = 300;
Cela permettra plus de connexions efficaces immédiatement, mais n'augmentez pas simplement arbitrairement le nombre sur un coup de tête. Vous devez vous assurer que mysql a suffisamment de RAM pour s'adapter à l'augmentation.
CAVEAT: Si vous changez dynamiquement max_connections à 300, veuillez le mettre dans /etc/my.cnf
[mysqld]
max_connections=300
Vous pouvez exécuter mysqltuner.pl sur votre serveur de base de données MySQL. Si vous ne l'avez pas, exécutez ce qui suit:
cd
wget mysqltuner.pl
perl mysqltuner.pl
La troisième ligne sous Performance Metrics a ceci
-------- Performance Metrics -------------------------------------------------
[--] Up for: 8d 20h 46m 22s (8M q [10.711 qps], 129K conn, TX: 90B, RX: 19B)
[--] Reads / Writes: 4% / 96%
[--] Total buffers: 2.1G global + 5.4M per thread (2000 max threads)
[OK] Maximum possible memory usage: 12.6G (80% of installed RAM)
Voir les 5,4 millions par thread? Cela est multiplié par max_connections. Dans cet exemple, ce serait un maximum d'environ 10,8 G de RAM. Par conséquent, chaque fois que vous augmentez max_connections, vous devez exécuter mysqltuner.pl et vérifier si vous appuyez sur le système d'exploitation pour trop de mémoire.
Dans tous les cas, limiter les privilèges SUPER donne à ces utilisateurs la possibilité d'atténuer l'inondation de mysqld avec DB Connections.
wget mysqltuner.pl
, téléchargé index.html, mais c'était un fichier perl, donc je l'ai renommé mysqltuner.pl et le cmd suivant aperl mysqltuner.pl
fonctionné.max_connections
détermine le nombre maximal de connexions simultanées à MySQL. Assurez-vous que vous avez une valeur élevée pour cette variable. Vous pouvez augmenter cette valeur à 300 ou 400 et essayer de redémarrer MySQL après ces paramètres.Flush status;
Exécutez également la commande sur le serveur MySQl pour réduire cette valeur.J'espère que ces suggestions vous aideront.
la source
Vérifiez si votre disque est plein, cela peut provoquer la même erreur:
vous montrera l'espace restant sur chaque partition, vous devrez probablement vérifier la partition racine
/
(ou / var / au cas où vous auriez une partition supplémentaire pour cela):la source