Este é um erro raro que ocorre no Solaris 10, vi isso no Perl, onde esta linha
DBI->connect(...) or die "Whoops! $DBI::errstr"
saídasWhoops! Can't connect to local MySQL server through socket '/tmp/mysql.sock' (146) at something.pl line ...
Eu determinei que no meu sistema, 146=ECONNREFUSED
É muito raro que esse erro ocorra, mas acontece continuamente.
É sempre um problema temporário nesta configuração - durando apenas um ou dois segundos.
A variável global max_connections
foi descartada como um problema.
Isso não ocorre em conexões baseadas em TCP/IP.
Estou usando a [mysqld_safe]
log-error
opção em my.cnf
. O log mostra o seguinte na inicialização:
mysqld started
InnoDB: Started; log sequence number...
[Note] .../libexec/mysqld: ready for connections.
Version: '5.0.27-log' socket: '/tmp/mysql.sock' port: 3306 Source distribution
Não há outras entradas de log, então não há nada aqui para indicar o problema.
Por favor, deixe-me saber se você pode sugerir uma configuração para registro mais detalhado.
Você pode enumerar as causas possíveis ou prováveis desse erro acontecendo apenas ocasionalmente e apenas por um ou dois segundos ?
A vida tem muitos grandes mistérios. Para o MySQL DBA, um dos maiores mistérios da vida é a sua pergunta . Tem sido assim há 12 anos. Na verdade, encontrei um relatório de bug que foi resolvido quando o desaparecimento de
mysql.sock
foi causado pela tentativa de iniciar o mysqld com o mysqld já em execução (também conhecido como Shooting mysqld in the Foot) .Eu tratei pessoalmente de soluções alternativas para esta situação muitas vezes no StackExchange:
Jul 02, 2013
: travamento do MySQL. Causa desconhecida. Sinal 11 (ServerFault)Apr 22, 2013
: /usr/libexec/mysqld: Desligamento normal, mas minha equipe não faz isso?Mar 06, 2013
: Como matar corretamente o MySQL?Feb 28, 2013
: a reinicialização do mysql não mata os processos filhos no CentOSDec 14, 2012
: Percona-server time out em /etc/init.d/mysql start (ServerFault)May 08, 2012
: Como parar corretamente o servidor MySQL no Mac OS X?O mistério tem a ver com
mysql.sock
(o arquivo MySQL Socket) desaparecendo. Quando isso acontecer, você não poderá se conectar ao mysqld usandoroot@localhost
. Na verdade, nenhum usuário definido comhost='localhost'
namysql.user
tabela pode se conectar. Conexões TCP/IP ainda podem ser usadas. A solução alternativa é conectar-se ao mysqld usando TCP/IP.Tente criar o usuário
root@'127.0.0.1'
. No cliente mysql, você faz o seguinte:A única maneira de trazer de volta
mysql.sock
é reiniciar o mysqld QUANDO o mysqld NÃO ESTÁ EM EXECUÇÃO.Você deve certificar-se de definir explicitamente o
mysql.sock
arquivo em/etc/my.cnf
Claro, vá criar a pasta
De uma chance !!!
ATUALIZAÇÃO 2013-12-06 10:17 EST
Com base nos seus comentários...
Você está usando o MySQL 5.0.27, o que significa que você está usando um mysqld muito antigo (com um monte de bugs) e um antigo InnoDB Storage Engine. Pode não haver detalhes adicionais disponíveis. Também observei que você está usando uma distribuição de origem em vez de binários instalados por RPM.
Se o problema persistir por apenas um segundo ou dois, posso ver o que está acontecendo. Quando você executa o serviço mysql start, na verdade você está executando mysqld_safe. Na parte inferior do mysqld_safe, existe um loop infinito. No loop infinito, ele chama mysqld e espera por um valor de retorno. Certos valores de retorno do mysqld farão com que o mysqld_safe termine (desligamento normal, condição em que o mysqld não pode iniciar novamente). Outros valores de retorno farão com que mysqld_safe faça um loop e tente mysqld novamente.
SUGESTÃO
Você deve atualizar para o MySQL 5.6 para obter a versão mais recente
mysqld
e o InnoDB Storage Engine. Se o problema persistir, pelo menos haverá menos bagagem devido a binários MySQL de melhor qualidade. Dessa forma, você pode descartar o mysqld e procurar outros fatores externos. Além disso, você deve baixar os binários do RPM em vez de compilar o código-fonte porque a versão do RPM geralmente possui mais otimizações.ATUALIZAÇÃO 2013-12-06 10:39 EST
Se você olhar os dois links no topo da minha resposta
você aprenderá que o primeiro link faz referência ao MySQL 4.0.20 e o segundo link foi de um tópico de relatório de bug que dizia que a versão em questão era MySQL 3.22.32 (a versão final do MySQL 3 era 3.23.58)
Problemas com
mysql.sock
já duram cerca de 13 anos devido a um tiro no próprio pé (iniciando o mysqld mesmo estando em execução), fatores internos (versão muito antiga ou versão desajeitada do MySQL) ou alguma condição externa (falta de RAM ou outros recursos do sistema operacional) .Então, parece que você encontrou um fator interno. Para verificar se o mysqld está se corrigindo, execute
SHOW GLOBAL VARIABLES LIKE 'uptime';
. Se o número continuar aumentando e nunca reiniciar, então você pode culpar o binário desajeitado do MySQL por não ser mais elaborado. A MySQL AB provavelmente estava resolvendo algum problema interno e pode ter deixado algumas instruções de depuração ou pontos de rastreamento no binárioATUALIZAÇÃO 2013-12-06 11:24 EST
Então, parece que você encontrou um problema interno. O mysqld MySQL 5.0.27 compilado em fonte pode estar apenas imprimindo mensagens de depuração após uma recuperação interna. Para verificar
mysqld
se está tudo bem em termos de funcionamento, basta executarSHOW GLOBAL VARIABLES LIKE 'uptime';
. Se o número não reiniciar e apenas continuar aumentando, então o mysqld está se corrigindo por dentro. Dada a compilação antiga que você está usando e a forma como foi compilado, eu não esperaria que o mysqld fosse mais acessível por conta própria.Você deve ver se o mysqld foi iniciado com a depuração habilitada. Caso contrário, tente definir o debug
my.cnf
e veja se ele pode ser mais detalhado sobre seus componentes internos . Espero que isso revele qual pode ser o problema.