Quando tentei conectar-me a um servidor MySQL local durante minha suíte de testes, ele falhou com o erro:
OperationalError: (2002, "Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)")
No entanto, eu posso conectar o MySQL o tempo todo executando o mysql
programa de linha de comando
. A ps aux | grep mysql
mostra que o servidor está em execução e
stat /tmp/mysql.sock
confirme se o soquete existe. Além disso, se eu abrir um depurador na except
cláusula dessa exceção, posso conectar-me de maneira confiável com exatamente os mesmos parâmetros.
Esse problema é reproduzido com bastante confiabilidade, no entanto, não parece ser 100%, porque de vez em quando na lua azul, meu conjunto de testes é executado sem o erro. Quando tentei correr com sudo dtruss
ele não se reproduziu.
Todo o código do cliente está em Python, embora eu não consiga entender como isso seria relevante.
Mudar para usar host 127.0.0.1
produz o erro:
DatabaseError: Can't connect to MySQL server on '127.0.0.1' (61)
max_connections
no seu arquivo conf MySQL?mysql -h 127.0.0.1
o trabalho a partir da linha de comando? Não tenho tanta certeza de que seu servidor mysql esteja realmente escutando uma porta TCP.mysql -h localhost
funciona de maneira confiável?Respostas:
Isso funcionou para mim. No entanto, se isso não funcionar, verifique se o mysqld está em execução e tente conectar-se.
fonte
A seção relevante do manual do MySQL está aqui . Eu começaria seguindo as etapas de depuração listadas lá.
Além disso, lembre-se de que localhost e 127.0.0.1 não são a mesma coisa neste contexto:
localhost
, um soquete ou tubo será usado.127.0.0.1
, o cliente será forçado a usar o TCP / IP.Portanto, por exemplo, você pode verificar se o seu banco de dados está escutando conexões TCP vi
netstat -nlp
. Parece provável que ele esteja ouvindo conexões TCP porque você diz quemysql -h 127.0.0.1
funciona muito bem. Para verificar se você pode se conectar ao seu banco de dados por soquetes, usemysql -h localhost
.Se nada disso ajudar, você provavelmente precisará postar mais detalhes sobre sua configuração do MySQL, exatamente como você está instanciando a conexão, etc.
fonte
localhost
como host). Mudando para127.0.0.1
corrigi-lo.Para mim, o problema era que eu não estava executando o servidor mysql. Execute o servidor primeiro e depois execute
mysql
.fonte
Eu já vi isso acontecer na minha loja, quando meus desenvolvedores têm um gerenciador de pilha como o MAMP instalado que vem pré-configurado com o MySQL instalado em um local não padrão.
no seu terminal
que lhe dará seu caminho para o arquivo de meias. siga esse caminho e use-o no seu paramater DATABASES HOST.
O que você precisa fazer é apontar sua
NOTA
Também execute
which mysql_config
se você de alguma forma tiver várias instâncias do servidor mysql instaladas na máquina, você pode estar se conectando à incorreta.fonte
Acabei de alterar o
HOST
delocalhost
para127.0.0.1
e funciona bem:fonte
settings.py
do projeto.Quando, se você perder o daemon mysql no mac OSx, mas estiver presente em outro caminho, por exemplo, em private / var, execute o seguinte comando
1)
2) reinicie sua conexão com o mysql com:
funciona também para mariadb
fonte
Execute o cmd abaixo no terminal
Em seguida, reinicie a máquina para entrar em vigor. Funciona!!
fonte
Verifique o número de arquivos abertos para o processo mysql usando o comando lsof.
Aumente o limite de arquivos abertos e execute novamente.
fonte
ulimit
aumentar o número de arquivos abertos que seu cliente e servidor podem abrir. se você estiver em uma versão recente do ubuntu, isso pode exigir a edição do script inicial do mysql em / etc / init, mas espero que você possa fazê-lo no arquivo .cnf.Depois de tentar algumas dessas soluções e não ter sucesso, é isso que funcionou para mim:
fonte
Este pode ser um dos seguintes problemas.
e depois coloque-o no seu código de conexão db:
/tmp/mysql.sock é retornado do grep
2. Solução de porta mysql incorreta: Você precisa descobrir a porta mysql correta:
e depois no seu código:
3306 é a porta retornada do grep
Acho que a primeira opção resolverá o seu problema.
fonte
Para quem atualizou de 5,7 para 8,0 via homebrew, esse erro provavelmente é causado pela atualização não concluída. No meu caso,
mysql.server start
recebi o seguinte erro:Em seguida, verifiquei o arquivo de log via
cat /usr/local/var/mysql/YOURS.err | tail -n 50
e descobri o seguinte:Se você estiver no mesmo barco, primeiro instale
[email protected]
via homebrew, pare o servidor e, em seguida, inicie o sistema 8.0 novamente.Então,
Isso faria seu MySQL (8.0) funcionar novamente.
fonte
ERROR! The server quit without updating PID file
novamente.Acho que vi esse mesmo comportamento há algum tempo, mas não consigo me lembrar dos detalhes.
No nosso caso, o problema foi o momento em que o testrunner inicializa as conexões do banco de dados em relação à primeira interação do banco de dados, necessária, por exemplo, pela importação de um módulo em settings.py ou em algum __init__.py. Vou tentar descobrir mais algumas informações, mas isso já pode soar um sinal para o seu caso.
fonte
Verifique se o seu / etc / hosts está
127.0.0.1 localhost
nele e deve funcionar bemfonte
Eu tenho duas conjecturas sorrateiras neste
CONJETURA Nº 1
Examine a possibilidade de não conseguir acessar o
/tmp/mysql.sock
arquivo. Quando configuro os bancos de dados MySQL, normalmente deixo o arquivo de soquete entrar/var/lib/mysql
. Se você fizer login no mysql comoroot@localhost
, sua sessão do SO precisará acessar a/tmp
pasta. Verifique se/tmp
possui os direitos de acesso corretos no sistema operacional. Além disso, verifique se o usuário sudo sempre pode ler o arquivo/tmp
.CONJETURA # 2
Acessando o mysql via
127.0.0.1
pode causar alguma confusão se você não estiver prestando atenção. Quão?Na linha de comando, se você se conectar ao MySQL
127.0.0.1
, poderá ser necessário especificar o protocolo TCP / IP.ou tente o nome DNS
Isso ignorará o login como
root@localhost
, mas verifique se você temroot@'127.0.0.1'
definiu.Da próxima vez que você se conectar ao MySQL, execute o seguinte:
O que isso te dá?
Se essas funções retornarem com os mesmos valores, você estará se conectando e autenticando conforme o esperado. Se os valores forem diferentes, pode ser necessário criar o usuário correspondente
[email protected]
.fonte
Teve esse mesmo problema. Acabou
mysqld
que parou de funcionar (estou no Mac OSX). Eu o reiniciei e o erro desapareceu.Eu descobri que
mysqld
não estava sendo executado em grande parte por causa desse link: http://dev.mysql.com/doc/refman/5.6/en/can-not-connect-to-server.htmlObserve a primeira dica!
fonte
se você receber um erro como abaixo:
Então, encontre o local do arquivo mysqld.sock e adicione-o ao "HOST".
Como eu estou usando o xampp no linux, então meu
mysqld.sock
arquivo está em outro local. então não está funcionando para '/var/run/mysqld/mysqld.sock
'fonte
Verifique se o seu mysql não atingiu o número máximo de conexões, ou não está em algum tipo de loop de inicialização, como acontece com bastante frequência se as configurações estiverem incorretas no my.cnf.
Use ps aux | grep mysql para verificar se o PID está mudando.
fonte
Procurou on-line por muito tempo para não contribuir. Depois de tentar digitar o prompt do mysql na linha de comando, continuei recebendo esta mensagem:
ERRO 2002 (HY000): Não é possível conectar ao servidor MySQL local através do soquete '/tmp/mysql.sock' (2)
Isso ocorreu porque meu servidor mysql local não estava mais em execução. Para reiniciar o servidor, naveguei para
onde meu mysql.server estava localizado. A partir daqui, basta digitar:
Isso irá reiniciar o servidor mysql local.
A partir daí, você pode redefinir a senha root, se necessário.
fonte
Eu tive que eliminar todas as instâncias do mysql encontrando primeiro todos os IDs do processo:
E então matando-os:
Então:
Trabalhou para mim.
fonte
O soquete está localizado em / tmp. No sistema Unix, devido a modos e propriedades em / tmp, isso pode causar algum problema. Mas, desde que você nos diga que PODE usar sua conexão mysql normalmente, acho que não é um problema no seu sistema. Uma verificação primária deve ser realocar o mysql.sock em um diretório mais neutro.
O fato de o problema ocorrer "aleatoriamente" (ou não toda vez) permite-me pensar que poderia ser um problema no servidor.
O seu / tmp está localizado em um disco padrão ou em uma montagem exótica (como na RAM)?
Seu / tmp está vazio?
Será que
iotop
mostrar algo errado quando você encontrar o problema?fonte
Configure sua conexão com o banco de dados na caixa de diálogo 'Gerenciar conexões com o banco de dados. Selecione 'Padrão (TCP / IP)' como método de conexão.
Consulte esta página para obter mais detalhes http://dev.mysql.com/doc/workbench/en/wb-manage-db-connections.html
De acordo com esta outra página, um arquivo de soquete é usado mesmo se você especificar localhost.
Também mostra como verificar seu servidor executando estes comandos:
fonte
no ubuntu14.04, você pode fazer isso para resolver esse problema.
fonte
Para mim, tenho certeza que o mysqld foi iniciado e a linha de comando mysql pode funcionar corretamente. Mas o servidor httpd mostra o problema (não é possível conectar ao mysql pelo soquete).
Comecei o serviço com mysqld_safe &.
finalmente, descobri que quando inicio o serviço mysqld com o serviço mysqld start, há problemas (problema de permissão do selinux) e, quando corrigo o problema do selinux e inicio o mysqld com "service mysqld start", o problema da conexão httpd desaparece. Mas quando inicio o mysqld com mysqld_safe &, o mysqld pode ser trabalhado. (o cliente mysql pode funcionar corretamente). Mas ainda há problemas ao conectar com o httpd.
fonte
Se estiver relacionado ao soquete, leia este arquivo
e veja qual é o local padrão do soquete. É uma linha como:
Agora crie um alias para seu shell como:
Dessa forma, você não precisa de privilégios de root.
fonte
Simplesmente tente executar
mysqld
.Era isso que não estava funcionando para mim no mac. Se não funcionar, tente
/usr/local/var/mysql/<your_name>.err
ver os logs de erro detalhados.fonte
Pode ser útil.
fonte
Usando o MacOS Mojave 10.14.6 para MySQL 8.0.19 instalado via Homebrew
sudo find / -name my.cnf
/usr/local/etc/my.cnf
Trabalhou por um tempo e, eventualmente, o erro retornou. Desinstalou a versão Homebrew do MySQL e instalou o arquivo .dmg diretamente daqui
Felizmente conectando desde então.
fonte
No meu caso, o que ajudou foi editar o arquivo
/etc/mysql/mysql.conf.d/mysqld.cnf
e substituir a linha:com
Então eu reiniciei o servidor e funcionou bem. O engraçado é que se eu recolocasse a linha como estava antes e reiniciei, ainda funcionaria ..
fonte
Eu tinha enfrentado problemas semelhantes recentemente. Passou por muitas respostas. Comecei a trabalhar seguindo as etapas.
fonte
Para mim, o servidor mysql não estava em execução. Então, eu iniciei o servidor mysql através
então
mysql_secure_installation
para proteger o servidor e agora posso visitar o servidor MySQL através
sudo mysql -uroot -p
fonte