
Ubuntu:12.04 LTS (Linux mysql02 3.2.0-40-genérico #64-Ubuntu SMP Seg, 25 de março 21:22:10 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux)
MySQL:Distribuição Ubuntu 5.5.31
Equipamento:REMOVIDO!
O servidor está funcionando perfeitamente há mais de um ano. Então, nesta segunda-feira, o MySQL começou a falhar. Uma atualização causou o problema e não conseguimos descobrir o que é. Até tentamos reverter para o MySQL 5.5.30, mas sem sorte. Voltamos às 5h531.
Entradas de log de erros do MySQL:
130430 7:55:46 [ERROR] Error in accept: Too many open files
130430 7:55:46 [ERROR] /usr/sbin/mysqld: Can't open file: './eci_elite_test/fclvod.frm' (errno: 24)
130430 7:55:46 [ERROR] /usr/sbin/mysqld: Can't open file: './eci_elite_test/fcnote.frm' (errno: 24)
130430 7:55:47 [ERROR] /usr/sbin/mysqld: Can't open file: './eci_elite_test/ffcont.frm' (errno: 24)
130430 7:55:47 [ERROR] /usr/sbin/mysqld: Can't open file: './eci_elite_test/ffcontv.frm' (errno: 24)
130430 7:55:47 [ERROR] /usr/sbin/mysqld: Can't open file: './eci_elite_test/ffnote.frm' (errno: 24)
130430 7:55:47 [ERROR] /usr/sbin/mysqld: Can't open file: './eci_elite_test/frcfcl.frm' (errno: 24)
Parece que estamos enfrentando um problema de ulimit. Removemos completamente o APPARMOR. Nós aumentamos o/etc/security/limits.confe ainda sem sorte:
# Out of desperation....
* soft nofile 49152
* hard nofile 65536
# No effect!?!!?
#mysql soft nofile 49152
#mysql hard nofile 65536
E para mostrar olimites.confestá funcionando:
root@mysql02:/etc/security# ulimit -Sa | grep "open files"
open files (-n) 49152
root@mysql02:/etc/security# ulimit -Ha | grep "open files"
open files (-n) 65536
E aqui estão as entradas importantes emmeu.cnf
[mysqld_safe]
open_files_limit = 16384
[mysqld]
open_files_limit = 16384
No entanto:
root@mysql02:/etc/mysql# mysqladmin -u root -pThePassword variables| grep open_files_limit
open_files_limit | 1024
Estamos totalmente perplexos e abatidos. Qualquer ajuda seria muito apreciada.
Responder1
SO:Implantações Ubuntu (Debian)
Opção de servidor MySQL:limite de arquivos abertos
Parece que o Debiansubir na vidanão usa os parâmetros definidos em/etc/security/limits.conf, então quando você inicia o mysql através doserviçocomando (e assim, no upstart), ele substitui esses limites definidos e usa o padrão 1024.
A solução é modificar omysql.confarquivo que define o serviço inicial, ele está localizado em/etc/init/mysql.confe adicione as seguintes linhasantesopré-iníciobloquear:
# NB: Upstart scripts do not respect
# /etc/security/limits.conf, so the open-file limits
# settings need to be applied here.
limit nofile 32000 32000
limit nproc 32000 32000
Referências:
Responder2
Tive o mesmo problema no Ubuntu 15.10.
https://bugs.launchpad.net/ubuntu/+source/mysql-5.6/+bug/1434758- trouxe a solução:
- verifique se /lib/systemd/system/mysql.service ou /lib/systemd/system/mysqld.service existe
(no meu caso) se não, crie /lib/systemd/system/mysql.service e copie o conteúdo para este arquivohttps://bugs.launchpad.net/ubuntu/+source/mysql-5.6/+bug/1434758/comments/11e adicione as duas linhas em algum lugar do arquivo
LimitNOFILE=infinity LimitMEMLOCK=infinity
se um ou ambos os arquivos existirem, verifique se estas duas linhas estão incluídas:
LimitNOFILE=infinity LimitMEMLOCK=infinity
- executar
systemctl daemon-reload
... e tudo deve ficar bem.
Responder3
Como nenhuma das opções acima resolveu o problema para mim (apenas fez com que o sistema ficasse sem memória), aqui está a solução que encontrei:
Você /etc/mysql/my.conf
precisa aumentar o open_files_limit interno do MySQL. Então adicione isso temporariamente à configuração e reinicie o MySQL.
[mysqld]
open_files_limit = 100000
sudo /etc/init.d/mysql restart
Depois de executar a operação que lhe dá amuitos arquivos abertoserro, você pode alterar sua configuração de volta ao padrão e reiniciar o MySQL novamente.
Responder4
Obrigado pela solução alternativa. Mas para mim, a questão foi ofuscada pelos outros dois fatos.
- Meu diretório de dados é diferente da instalação padrão. Por múltiplas razões, tanto históricas como técnicas.
- Eu estava atualizando de uma instalação muito antiga, que passou por várias portas traseiras e futuras. Na primeira inicialização de um MySQL 5.5 recém-instalado, o mecanismo InnoDB não foi ativado (a implementação interna foi desabilitada no arquivo de configuração, mas o plugin que estava disponível nas versões anteriores não está presente no 5.5), e a marca de atualização foi criada sem realmente atualizar quaisquer tabelas.
Depois de corrigir o problema do InnoDB, ele ainda estava cuspindo
mysql> SHOW DATABASES;
ERROR 1018 (HY000): Can't read dir of '.' (errno: 24)
Eu tive que iniciar o mysqld no console root e reiniciar manualmente
/usr/bin/mysql_upgrade --defaults-extra-file=/etc/mysql/debian.cnf --force
Então o servidor começou a mostrar bancos de dados, mas não conseguiu acessar algumas tabelas. Sua solução alternativa com limites aumentados corrigiu o restante dos problemas, obrigado!