web-dev-qa-db-fra.com

Ubuntu 16.04 Server MySql open_file_limit ne dépassera pas 65536

J'utilise Ubuntu 16.04 Server sur XenServer et je rencontre un problème avec la limite de fichiers ouverts de MySql.

Voici ce que j'ai fait jusqu'à présent:

Sudo nano /etc/security/limits.conf (référence)

* soft nofile 1024000
* hard nofile 1024000
* soft nproc 102400
* hard nproc 102400
mysql soft nofile 1024000
mysql hard nofile 1024000

Sudo nano /etc/init/mysql.conf (référence)

limit nofile 1024000 1024000
limit nproc 102400 102400

Sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf (référence)

[mysqld_safe]
open_files_limit = 1024000


[mysqld]
open_files_limit = 1024000

Lorsque ce qui précède n'a pas fonctionné, je suis passé aux éléments suivants:

Sudo nano /etc/sysctl.conf

fs.file-max = 1024000

Sudo nano /etc/pam.d/common-session

session required pam_limits.so

Sudo nano /etc/pam.d/common-session-noninteractive

session required pam_limits.so

Sudo nano /lib/systemd/system/mysql.service

LimitNOFILE=infinity
LimitMEMLOCK=infinity

Lorsque je me connecte à mon compte utilisateur, tout semble correct:

ulimit -Hn
1024000
ulimit -Sn
1024000

Si je me connecte en tant que mysql, cela semble bien aussi:

mysql@server:~$ ulimit -Hn
1024000
mysql@server:~$ ulimit -Sn
1024000

Cependant, quand je regarde le proc:

ps -ef | grep mysql
cat /proc/1023/limits | grep open
Max open files  65536 65536 files   

Ou quand je le regarde dans MySql:

mysql> show global variables like 'open%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| open_files_limit | 65536 |
+------------------+-------+

À partir des journaux (/var/log/mysql/error.log):

2016-07-25T05: 44: 35.453668Z 0 [Avertissement] Impossible d'augmenter le nombre de max_open_files à plus de 65536 (demande: 1024000)

Je suis complètement à court d'idées ici. Au début, j'ai commencé avec open_files_limit à 1024, et l'un des éléments ci-dessus a dû le changer, mais j'en ai besoin pour aller plus haut. J'atteins déjà cette limite car j'ai beaucoup de bases de données et de tables qui ont parfois beaucoup de partitions.

J'ai même essayé des nombres moins agressifs que 1024000, sans succès.

Des idées?

16
J Pierret

Cela a fonctionné pour moi sur Ubuntu Xenial 16.04:

Créez le répertoire /etc/systemd/system/mysql.service.d

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

[Service]
LimitNOFILE=1024000

Maintenant, exécutez

systemctl daemon-reload
systemctl restart mysql.service

Oui en effet, LimitNOFILE=infinity semble en fait le mettre à 65536.

Vous pouvez valider ce qui précède après avoir démarré MySQL en faisant:

cat /proc/$(pgrep mysql)/limits | grep files