MySQL: ERROR '...' not found (errno: 23), Can't open file: ... (errno: 24)



2011-04-22

MySQL: Arquivo Não Encontrado

mysql logo
Se você obter ERROR '...' not found (errno: 23), Can't open file: ... (errno: 24), ou qualquer outro erro com errno 23 ou errno 24 no MySQL, significa que você não alocou descritores de arquivo suficiente para o MySQL. Você pode usar o utilitário perror para obter uma descrição sobre o que o número de erro significa:

shell> perror 23 File table overflow 
shell> perror 24 Too many open files 
shell> perror 11 Resource temporarily unavailable 
O problema aqui é que mysqld está tentando manter aberto muitos arquivos simultanemanete. Você pode também dizer para o mysqld não abrir muitos arquivos de uma vez ou aumentar o número de descritores de arquivos disponíveis para o mysqld. 
Para dizer para o mysqld manter aberto poucos arquivos por vez, você pode tornar a cache de tabela menor usando a opção -O table_cache=32 para mysqld_safe (o valor padrão é 64). Reduzindo o valor de max_connections também reduzirá o número de arquivos abertos (o valor padrão é 90).

Para alterar o número de descritores de arquivos disponíveis para mysqld, você pode usar a opção --open-files-limit=# para mysqld_safe ou -O open-files-limit=# para mysqld.

 Veja mais informações sobre isto na Seção 4.6.8.4, "SHOW VARIABLES".

 O modo mais fácil de fazer isto é adicioar a opção ao seu arquivo de opção. Veja mais informações sobre isto na Seção 4.1.2, "Arquivo de Opções my.cnf". Se você tiver um versão antiga do mysqld que não suporte isto, você pode editar o script mysqld_safe. Existe uma linha ulimit -n 256 comentada no script. Você pode remover o caracter '#' para ``descomentar'' esta linha, e altere o número 256 para afetar o número de descritores de arquivos disponíveis para mysqld.
ulimit (e open-files-limit) podem aumentar o número de descritorese de arquivo, mas apenas até o limite imposto pelo sistema operacional. Também há um limite 'maior' que só pode ser sobrescrito se você iniciar o mysqld_safe ou mysqld como root (apenas se lembre que você também precisa usar a opção --user=... neste caso). Se você precisa aumentar o limite do SO no número dos descritores de arquivo disponíveis para cada processo, cosulte a documentacão para ser sistema operacional.

Note que se você rodar o shell tcsh, ulimit não funcioará! tcsh também relatará o valor incorreto quando você pergunta pelo limite atual! Neste caso você deve iniciar mysqld_safe com sh!
Enhanced by Zemanta
Postar um comentário