MySQL do servidor 16.04 do Ubuntu open_file_limit não ultrapassará 65536

16

Estou executando o Ubuntu 16.04 Server no XenServer e estou enfrentando um problema com o limite de arquivos abertos do MySql.

Aqui está o que eu fiz até agora:

sudo nano /etc/security/limits.conf (referência)

* 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 (referência)

limit nofile 1024000 1024000
limit nproc 102400 102400

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf (referência)

[mysqld_safe]
open_files_limit = 1024000


[mysqld]
open_files_limit = 1024000

Quando o procedimento acima não funcionou, passei ao seguinte:

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

Quando entro na minha conta de usuário, tudo fica bem:

ulimit -Hn
1024000
ulimit -Sn
1024000

Se eu entrar como mysql, também ficará bom:

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

No entanto, quando eu olho para o proc:

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

Ou quando eu olho para ele no MySql:

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

Nos logs (/var/log/mysql/error.log):

2016-07-25T05: 44: 35.453668Z 0 [Aviso] Não foi possível aumentar o número de max_open_files para mais de 65536 (solicitação: 1024000)

Estou completamente sem idéias aqui. No começo, comecei com open_files_limit em 1024, e um dos itens acima deve ter mudado, mas preciso que ele suba mais. Já estou atingindo esse limite, pois tenho muitos bancos de dados e tabelas que às vezes têm muitas partições.

Eu até tentei números menos agressivos que 1024000, sem sorte.

Alguma idéia por aí?

J Pierret
fonte

Respostas:

24

Isso funcionou para mim no Ubuntu Xenial 16.04:

Crie o diretório /etc/systemd/system/mysql.service.d

Coloque em /etc/systemd/system/mysql.service.d/override.conf:

[Service]
LimitNOFILE=1024000

Agora execute

systemctl daemon-reload
systemctl restart mysql.service

Sim, de fato, LimitNOFILE=infinityparece configurá-lo para 65536.

Você pode validar o acima descrito após iniciar o MySQL, fazendo:

cat /proc/$(pgrep mysql)/limits | grep files
Jeroen Vermeulen - MageHost
fonte
11
Desde que cheguei aqui primeiro, mas senti um pouco infeliz com ajuste algum arquivo do sistema Eu encontrei outro segmento que explica como corrigir w / o arquivo de serviço arriscando substituído na próxima atualização: stackoverflow.com/questions/27849331/...
Thomas Urban
Obrigado @cepharum. Eu atualizei a resposta. Na verdade, já tivemos problemas em nossos servidores porque atualizamos o arquivo repo /lib/systemd/system/mysql.service. Então, já mudamos para o método que você se referiu. Esqueci de atualizar minha resposta aqui. Obrigado novamente pelo lembrete.
Jeroen Vermeulen - MageHost 6/06/2017
Este comando não funciona: cat / proc / $ (pgrep mysql) / limits | Arquivos grep
Basil A
11
@BasilA Este comando só funciona quando o MySQL está em execução. Apenas testei no Ubuntu 16.04.
Jeroen Vermeulen #