web-dev-qa-db-fra.com

Le max_connections dans MySQL 5.7

J'ai rencontré un problème, la valeur de max_connction dans MySQL est 214 après l'avoir définie à 1000 via la modification du fichier my.cnf, comme ci-dessous:

hadoop@node1:~$ mysql -V
mysql  Ver 14.14 Distrib 5.7.15, for Linux (x86_64) using  EditLine wrapper

Version de MySQL: 5.7

Version du système d'exploitation: Ubuntu 16.04LTS

mysql> show variables like 'max_connections';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 151   |
+-----------------+-------+
1 row in set (0.00 sec)

Comme nous pouvons le constater, la valeur de la variable max_connections est 151. Ensuite, je modifie le fichier de configuration de MySQL.

yang2@node1:~$ Sudo vi /etc/mysql/my.cnf
[mysqld]

character-set-server=utf8
collation-server=utf8_general_ci
max_connections=1000

Redémarrez le service MySQL après avoir enregistré la configuration.

yang2@node1:~$ service mysql restart
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to restart 'mysql.service'.
Multiple identities can be used for authentication:
 1.  yangqiang,,, (yang2)
 2.  ,,, (hadoop)
Choose identity to authenticate as (1-2): 1
Password: 
==== AUTHENTICATION COMPLETE ===
yang2@node1:~$ 

Maintenant, on suppose que max_connection vaut 1000, vraiment?

mysql> show variables like 'max_connections';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 214   |
+-----------------+-------+
1 row in set (0.00 sec)

Il est 214. Je ne comprends pas vraiment ce résultat, qui peut m'aider? THX!

13
StrongYoung

Comme le dit la documentation MySQL sur max_connections setting:

L'augmentation de cette valeur augmente le nombre de descripteurs de fichier que mysqld nécessite. Si le nombre requis de descripteurs n'est pas disponible, le serveur réduit la valeur de max_connections.

Cela signifie que votre serveur MySQL ne dispose probablement pas de suffisamment de ressources pour gérer le nombre requis de descripteurs.

La documentation de MySQL sur Comment MySQL ouvre et ferme les tables précise que:

Les variables système table_open_cache et max_connections affectent le fichier nombre maximum de fichiers que le serveur garde ouverts. Si vous augmentez un ou Ces deux valeurs peuvent vous heurter à une limite imposée par votre système d’exploitation sur le nombre de descripteurs de fichier ouverts par processus . De nombreux systèmes d'exploitation vous permettent d'augmenter la limite de fichiers ouverts, bien que la méthode varie grandement d'un système à l'autre. Consultez votre documentation du système d’exploitation pour déterminer s’il est possible de augmenter la limite et comment le faire.

10
Shadow

Vous pouvez définir la valeur manuellement, par exemple.

set global max_connections=500;

cependant, après un redémarrage de MySQL, la valeur est réinitialisée à 214.

La solution dépend du système d'exploitation et de la version de MySQL. Avec Ubuntu 16.04 et MySQL> = 5.7.7, les travaux suivants:

systemctl edit mysql

Entrer

[Service]
LimitNOFILE=8000

enregistrer, cela va créer un nouveau fichier 

/etc/systemd/system/mysql.service.d/override.conf

et redémarrez le serveur:

systemctl daemon-reload
systemctl restart mysql

Pour d'autres environnements: Impossible d'augmenter max_open_files pour les connexions Mysql max dans Ubuntu 15

9
WernerE

Ajoutez session required pam_limits.so dans /etc/pam.d/common-session (généralement pas présent par défaut).

Le dans /etc/security/limits.conf vous pouvez ajouter quelques limites:

*   hard    nofile  8192
*   soft    nofile  4096

Vérifiez également avec ulimit -a la limite de fichiers ouverts . Ceci peut être augmenté avec ulimit -n 4096

Assurez-vous de redémarrer à la fin.

1
Dragos

Suivez les étapes suivantes:

cp /lib/systemd/system/mysql.service /etc/systemd/system/
echo -e "\r\nLimitNOFILE=infinity" >> /etc/systemd/system/mysql.service
echo "LimitMEMLOCK=infinity" >> /etc/systemd/system/mysql.service
Sudo systemctl daemon-reload
Sudo service mysql restart

Et changez ou ajoutez la ligne suivante dans le fichier /etc/mysql/mysql.conf.d/mysqld.cnf :

[mysqld]
max_connections=110

Juste ceci! @ Mahdi_Mohammadi

0
Mohsen Abasi