Ubuntu: 12.04 LTS (Linux mysql02 3.2.0-40-generic # 64-Ubuntu SMP segunda-feira, 25 de março 21:22:10 UTC 2013 x86_64 x86_64 x86_64 GNU / Linux)
MySQL: Ubuntu distro 5.5.31
Apparmor: REMOVIDO!
O servidor está funcionando muito bem 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 podemos descobrir o que é. Até tentamos reverter para o MySQL 5.5.30, mas sem sorte. Voltamos às 5.5.31.
Entradas do 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 ulimit. Removemos completamente o APPARMOR. Aumentamos o /etc/security/limits.conf e ainda não temos sorte:
# Out of desperation....
* soft nofile 49152
* hard nofile 65536
# No effect!?!!?
#mysql soft nofile 49152
#mysql hard nofile 65536
E para mostrar o limits.conf está 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 no my.cnf
[mysqld_safe]
open_files_limit = 16384
[mysqld]
open_files_limit = 16384
Contudo:
root@mysql02:/etc/mysql# mysqladmin -u root -pThePassword variables| grep open_files_limit
open_files_limit | 1024
Estamos totalmente perplexos e deprimidos. Qualquer ajuda seria muito apreciada.
Respostas:
Implementações do SO: Ubuntu (Debian)
MySQL Server Option: limite de arquivos abertos
Parece que o upstart Debian não usa os parâmetros definidos em /etc/security/limits.conf , então, quando você inicia o mysql através do comando service (e, portanto, no upstart), ele substitui os limites definidos e usa o padrão 1024 .
A solução é modificar o arquivo mysql.conf que define o serviço inicial, localizado em /etc/init/mysql.conf e adicionar as seguintes linhas antes do bloco de pré-inicialização :
Referências:
fonte
Teve o mesmo problema no Ubuntu 15.10.
https://bugs.launchpad.net/ubuntu/+source/mysql-5.6/+bug/1434758 - trouxe a solução:
(no meu caso), se não, crie /lib/systemd/system/mysql.service e copie o conteúdo deste arquivo https://bugs.launchpad.net/ubuntu/+source/mysql-5.6/+bug/1434758/ comments / 11 e adicione as duas linhas em algum lugar do arquivo
se houver um ou ambos os arquivos, verifique se essas duas linhas estão incluídas:
systemctl daemon-reload
... e tudo deve ficar bem.
fonte
Como nenhuma das opções acima corrigiu o problema para mim (apenas levou o sistema a ficar sem memória), aqui está a solução que encontrei:
Em
/etc/mysql/my.conf
você precisa aumentar MySQLs open_files_limit interno. Então, adicione isso temporariamente à configuração e reinicie o MySQL.sudo /etc/init.d/mysql restart
Após executar a operação que apresenta o erro de muitos arquivos abertos , você pode alterar sua configuração para o padrão e reiniciar o MySQL novamente.
fonte
Obrigado pela solução alternativa. Mas para mim, a questão foi ofuscada pelos outros dois fatos.
Depois de corrigir o problema do InnoDB, ele ainda estava cuspindo
Eu tive que iniciar o mysqld no console raiz e reiniciar manualmente
Em seguida, o servidor começou a mostrar bancos de dados, mas não conseguiu acessar algumas das tabelas. Sua solução alternativa com limites aumentados corrigiu o restante dos problemas, obrigado!
fonte