Arquivo Não Encontrado
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 MariaDB. 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
. Leia "SHOW VARIABLES
". O modo mais fácil de fazer isto é adicioar a opção ao seu arquivo de opção. Leia "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
!