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?
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