web-dev-qa-db-fra.com

Impossible d'augmenter max_open_files pour les connexions max Mysql dans Ubuntu 15

J'utilise cette version de Mysql

Ver 14.14 Distrib 5.6.24, for debian-linux-gnu (x86_64)

Sur cette version d'Ubuntu

Distributor ID: Ubuntu
Description:    Ubuntu 15.04
Release:    15.04
Codename:   vivid

Voici la configuration que j'ai définie pour Mysql:

key_buffer_size     = 16M
max_allowed_packet  = 16M
thread_stack        = 192K
thread_cache_size       = 8
innodb_buffer_pool_size=20G
innodb_log_buffer_size=16M
tmp_table_size = 32M
max_heap_table_size = 32M
open-files-limit=4510
max_connections=500
myisam-recover         = BACKUP
query_cache_type=1
query_cache_limit   = 32M
query_cache_size        = 32M

Voici les avertissements que je reçois au démarrage de MYSQL:

2015-06-17 17:28:53 26720 [Warning] Buffered warning: Could not increase number 
of max_open_files to more than 1024 (request: 4510)

2015-06-17 17:28:53 26720 [Warning] Buffered warning: Changed limits: max_connections: 
214 (requested 500)

2015-06-17 17:28:53 26720 [Warning] Buffered warning: Changed limits: table_open_cache: 
400 (requested 2000)

J'ai déjà essayé ces étapes:

1) Ajouter ceci à /etc/security/limits.conf

mysql           soft    nofile          65535
mysql           hard    no file          65535

2) Ajouter ceci à /etc/pam.d/common-auth et /etc/pam.d/commom-session

session required pam_limits.so

3) Ajoutez ceci à /etc/mysql/mysql.conf.d/mysqld.cnf

open-files-limit=4510 or open_files_limit=4510

Aucun de ceux-ci n'a fonctionné et je ne parviens toujours pas à augmenter les connexions mysql max à 500.

J'apprécierais vraiment de l'aide à ce stade.

Merci beaucoup d'avance.

27
hernangarcia

Ubuntu est passé d'Upstart à Systemd dans la version 15.04 et ne respecte plus les limites dans /etc/security/limits.conf pour les services système. Ces limites s'appliquent désormais uniquement aux sessions utilisateur.

Les limites du service MySQL sont définies dans le fichier de configuration Systemd, que vous devez copier de son emplacement par défaut dans/etc/systemd, puis modifier la copie.

Sudo cp /lib/systemd/system/mysql.service /etc/systemd/system/
Sudo vim /etc/systemd/system/mysql.service # or your editor of choice

Ajoutez les lignes suivantes au bas du fichier:

LimitNOFILE=infinity
LimitMEMLOCK=infinity

Vous pouvez également définir une limite numérique, par exemple LimitNOFILE=4510.

Rechargez maintenant la configuration Systemd avec:

Sudo systemctl daemon-reload

Redémarrez MySQL et il devrait maintenant obéir à la directive max_connections.

J'ai également eu des problèmes pour arrêter MySQL proprement après la mise à niveau vers 15.04. Si cela vous affecte (vous le saurez, car il faudra 300 secondes pour expirer lorsque vous le ferez service mysql stop ou service mysql restart) puis l'ajout de la ligne suivante au même fichier /etc/systemd/system/mysql.service l'a corrigé pour moi:

ExecStop=/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf shutdown

Ce dernier problème semble avoir été résolu par 16.04 et cette ligne n'est plus requise, donc avant de faire une mise à niveau de la distribution, vous voudrez arrêter MySQL et supprimer la ligne ExecStop du fichier de configuration.

80
Matt Raines

Depuis MySQL 5.7.7, c'est ce que la documentation recommande pour Red Hat Enterprise Linux 7, Oracle Linux 7, CentOS 7, SUSE Linux Enterprise Server 12, Fedora 24 et 25:

https://dev.mysql.com/doc/refman/5.7/en/using-systemd.html

Sur Ubuntu 16.04, le service s'appelle mysql, pas mysqld, alors voici ce que j'ai fait:

Sudo mkdir /etc/systemd/system/mysql.service.d
Sudo vi /etc/systemd/system/mysql.service.d/override.conf

Ajouté ceci dans le nouveau fichier override.conf:

[Service]
LimitNOFILE=5000

Puis redémarré le service:

Sudo systemctl daemon-reload
Sudo systemctl restart mysql
13
Fredrik

Je vous suggère de ne pas copier le fichier mysql.service existant comme suggéré, créez simplement un fichier avec uniquement les modifications qui vous intéressent. Alors faites:

mkdir /lib/systemd/system/mysql.service.d
vim /etc/systemd/system/mysql.service.d/limits.conf

Et le contenu de limits.conf est simplement:

[Service]
LimitNOFILE=10000
LimitMEMLOCK=10000

ou quelles que soient les limites que vous préférez.

7
Berend de Boer