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
. See
Secçã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. See
Secçã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
!
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.