Não é possível conectar ao servidor MySQL local através de homebrew de socket


109

Recentemente, tentei instalar o MySQL com homebrew ( brew install mysql) e quando tento executá-lo recebo o seguinte erro:

ERROR 2002 (HY000): Não é possível conectar ao servidor MySQL local através do soquete '/tmp/mysql.sock' (2)

Não há /tmp/mysql.socknem a /var/lib/mysql.sock.

Eu procurei e não encontrei nenhum mysql.sockarquivo.

Como posso consertar isso?


Você pode ver esta resposta de GeekHades do link. stackoverflow.com/questions/4847069/…
GeekHades

Eu instalei o mysql e tive o mesmo problema depois que a bateria do meu laptop acabou e forcei um desligamento incompleto. Vale a pena mysqldverificar as coisas e garantir que o MySQL foi encerrado corretamente da última vez. Se ele teve um desligamento 'sujo' (por exemplo, se a bateria de um laptop força o desligamento do sistema), isso deve limpá-lo. Depois, você pode iniciar o servidor MySQL novamente: mysql.server start.
Dave Everitt

1
Esta resposta funcionou para mim: stackoverflow.com/a/6378429/2641861
ArnoHolo

Isso ocorreu para mim depois de restaurar um novo Mac Mini de um backup do Time Machine. Tive que desinstalar mysql@5.7 e reinstalá-lo para começar a funcionar. Mordeu um martelo, mas foi relativamente indolor, pois todas as minhas configurações foram mantidas.
Joshua Pinter

Respostas:


93

Quando você colocou o servidor em execução via

mysql.server start

você deve ver o soquete em /tmp/mysql.sock . No entanto, o sistema parece esperar por isso em /var/mysql/mysql.sock . Para corrigir isso, você deve criar um link simbólico em / var / mysql :

sudo mkdir /var/mysql

sudo ln -s /tmp/mysql.sock /var/mysql/mysql.sock

Isso resolveu para mim. Agora meu phpMyAdmin funciona bem com localhost e 127.0.0.1 .

O crédito vai para Henry


1
Isso também resolveu meu problema de falha do Wordpress em se conectar ao mySQL. Obrigado mais uma vez
Ayoub

20
Quando tento mysql.server starteu consigo ERROR! The server quit without updating PID file (/usr/local/var/mysql/lyahdav-C02R32HCG8WM.pid). Eu precisava de uma versão mais antiga do MySQL, instalada via brew install mysql@5.6.
Liron Yahdav

3
corrida. mysql.server startconsertou para mim
ivange94

@Liron, você corrigiu o problema que está enfrentando? Estou enfrentando o mesmo problema sem ajuda.
Buddy

@EB já faz um tempo que não tive esse problema, mas, olhando meu comentário, você tentou a solução alternativa para instalar uma versão anterior do MySQL? Fora isso, infelizmente, estou sem ideias.
Liron Yahdav

61

Parece que seu servidor mysql não foi iniciado. Normalmente, executo o comando de parada e inicio novamente:

mysqld stop
mysql.server start

Mesmo erro, e isso funciona para mim.


89
. ERRO! O servidor foi encerrado sem atualizar o arquivo PID (/usr/local/var/mysql/myHostName.pid). ?
Pesulap

Fiz uma mysqld &resposta a um comentário acima, mas acho que provavelmente faria a mesma coisa, pois mysqld stop tenho certeza de que no meu caso foi por causa de um desligamento impróprio.
Mitch VanDuyn

54

Eu tinha alguns diretórios restantes de outra instalação do mysql (8.0), que não foram removidos.

Resolvi isso fazendo o seguinte:

Primeiro desinstale o mysql

brew uninstall mysql@5.6

Exclua as pastas / arquivos que não foram removidos

rm -rf /usr/local/var/mysql
rm /usr/local/etc/my.cnf

Reinstale o mysql e vincule-o

brew install mysql@5.6
brew link --force mysql@5.6

Habilite e inicie o serviço

brew services start mysql@5.6

3
Muito obrigado :) Todas as instruções falharam, mas as suas
Vyacheslav Loginov

1
Obrigado - esta resposta terminou 24 horas de cabeça batendo contra a parede
vladiim

1
Isso também funcionou para mim depois de tentar tudo o mais que existe! Obrigado!!!! :)
Eric

1
Parece que o problema para mim era que eu ainda tinha / usr / local / var / mysql após uma instalação anterior. A remoção funcionou! Obrigado por sua sugestão.
themantimes8

Eu precisava executar a etapa "mysql_secure_installation" mencionada pelo homebrew antes que esse erro desaparecesse.
Searaig

27

Tente conectar usando "127.0.0.1" em vez de "localhost".


2
@Esteban MySQL tentará se conectar ao soquete unix se você disser para ele se conectar a "localhost". Se você disser para ele se conectar a 127.0.0.1, estará forçando-o a se conectar ao soquete da rede. Portanto, provavelmente você tem o MySQL configurado para ouvir apenas o soquete da rede e não o soquete do sistema de arquivos. (Fonte: serverfault.com/a/295300/59101 )
Ardee Aram

Isso me ajudou a forçar o cliente mysql a usar o soquete TCP, pois estou executando um túnel SSH no host local para meu banco de dados MySQL remoto.
Iow

22

1) Se você conseguir ver "mysql parado" ao executar o comando abaixo;

brew services list

2) e se você for capaz de iniciar o mysql com o comando abaixo;

mysql server start

isso significa; mysql pode ser iniciado manualmente, mas não é iniciado automaticamente quando o sistema operacional é iniciado. Adicionar mysql aos serviços corrigirá este problema. Para fazer isso, você pode executar o comando abaixo;

brew services start mysql

Depois disso, você pode reiniciar seu sistema operacional e tentar se conectar ao mysql para ver se ele foi iniciado automaticamente. Fiz o mesmo e parei de receber o erro abaixo;

ERROR 2002 (HY000): Não é possível conectar ao servidor MySQL local através do soquete '/tmp/mysql.sock' (2)

Eu espero que isso ajude.


@berk ajudou no meu caso a recuperar o erro, mas exibir outro erro 'ERROR 1045 (28000): Acesso negado para o usuário' usuário '@' localhost '(usando senha: NÃO)'
Pratik Khadka

Olá @PratikKhadka, o erro que você está recebendo agora significa que o mysql está rodando e você tem um problema de autenticação. De acordo com a mensagem de erro que você postou, você está usando o nome de usuário como 'usuário' e sem senha. Você deve usar um nome de usuário e senha válidos. Eu sugiro que você verifique o seguinte link; " forums.mysql.com/read.php?34,140320,140324 "
Berk

Não há necessidade de reiniciar o sistema operacional, apenas executar "brew services start mysql" funcionou para mim. Obrigado!
AKS de

Olá @AKS, você está certo. Não é necessário reiniciar para que funcione. Editei a resposta para explicar por que é necessário reiniciar. É necessário verificar se o mysql inicia automaticamente quando o sistema operacional é iniciado. Obrigado pelo feedback!
Berk

5

O arquivo /tmp/mysql.sock provavelmente é um Pipe Nomeado, pois está em uma pasta temporária. Um pipe nomeado é um arquivo especial que nunca é armazenado permanentemente.

Se fizermos dois programas, e quisermos que um programa envie uma mensagem para outro programa, poderíamos criar um arquivo de texto. Temos um programa que escreve algo no arquivo de texto e o outro programa lê o que nosso outro programa escreveu. Isso é o que um pipe é, exceto que ele não grava o arquivo no disco rígido do nosso computador, o IE não armazena o arquivo permanentemente (como fazemos quando criamos um arquivo e o salvamos).

Um Socket é exatamente o mesmo que um Pipe. A diferença é que os Sockets geralmente são usados ​​em uma rede - entre computadores. Um Socket envia informações para outro computador ou recebe informações de outro computador. Ambos Pipes e Sockets usam um arquivo temporário para compartilhar de forma que eles possam 'se comunicar'.

É difícil discernir qual o MySql está usando neste caso. Mas não importa.

O comando mysql.server startdeve fazer com que o 'servidor' (programa) execute seu loop infinito que criará aquele arquivo especial e aguardará por alterações ( listenpor gravações).

Depois disso, um problema comum pode ser que o programa MySql não tenha permissão para criar um arquivo em sua máquina, então você pode ter que dar a ele privilégios de root

sudo mysql.server start

Isso funcionou muito bem, obrigado. Eu corri mysql.server start, mysql.server stope em seguida, começou o serviço via homebrew novamente com brew services start mysql@5.7e as coisas correram bem.
taylorthurlow

4

Depois de instalar o macos mojave, tive que limpar a pasta mysql /usr/local/var/mysqle então reinstalar via, brew install mysqlcaso contrário, coisas relacionadas à permissão apareceriam em todo o lugar.


Resolvi meu problema com sua resposta, eu tinha instalado anteriormente o mysql e tentei fazer o downgrade para mysql@5.6
Rodrirokr

Valeu cara. também resolveu meu problema. remover / usr / local / var / mysql e reinstalar foi a solução para mim.
Oğuz Can Sertel

1
Cuidado: remover /usr/local/var/mysqlvocê também removerá todos os seus bancos de dados existentes!
Leonardo

3

Recebi o mesmo erro e isso é o que me ajudou:

$ln -sfv /usr/local/opt/mysql/*.plist ~/Library/LaunchAgents
$launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
$mysql -uroot
mysql>

3

Apenas para acrescentar a essas respostas, no meu caso, eu não tinha um servidor mySQL local, ele estava sendo executado dentro de um contêiner docker. Portanto, o arquivo socket não existe e não estará acessível para o cliente "mysql".

O arquivo sock é criado pelo mysqld e o mysql usa isso para se comunicar com ele. No entanto, se o servidor mySql não estiver executando localmente, ele não exigirá o arquivo sock.

Ao especificar um nome de host / ip, o arquivo sock não é necessário, por exemplo

mysql --host=127.0.0.1 --port=3306 --user=xyz --password=xyz

3

Como passei bastante tempo tentando resolver isso e sempre voltei a esta página ao procurar esse erro, deixarei minha solução aqui esperando que alguém economize o tempo que perdi. Embora no meu caso eu esteja usando o mariadb em vez do MySql, você ainda pode adaptar esta solução às suas necessidades.

Meu problema

é o mesmo, mas minha configuração é um pouco diferente (mariadb em vez de mysql):

Mariadb instalado com homebrew

$ brew install mariadb

Iniciou o daemon

$ brew services start mariadb

Tentei conectar e recebi o erro mencionado acima

$ mysql -uroot
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

Minha solução

descobrir quais my.cnfarquivos são usados ​​por mysql(como sugerido neste comentário ):

$ mysql --verbose --help | grep my.cnf
/usr/local/etc/my.cnf ~/.my.cnf
                        order of preference, my.cnf, $MYSQL_TCP_PORT,

verifique onde o arquivo de soquete Unix está sendo executado (quase como descrito aqui ):

$ netstat -ln | grep mariadb
.... /usr/local/mariadb/data/mariadb.sock

(você pode querer em grep mysqlvez de mariadb)

Adicione o arquivo de soquete que você encontrou ~/.my.cnf(crie o arquivo se necessário) (presumindo que ~/.my.cnffoi listado ao executar o mysql --verbose ...comando acima):

[client]
socket = /usr/local/mariadb/data/mariadb.sock

Reinicie o seu mariadb:

$ brew services restart mariadb

Depois disso, pude executar o mysql e obter:

$ mysql -uroot
ERROR 1698 (28000): Access denied for user 'root'@'localhost'

Então, eu executo o comando com privilégios de superusuário em vez disso e depois de inserir minha senha, obtive:

$ sudo mysql -uroot
MariaDB [(none)]>

Notas:

  1. Não tenho certeza sobre os grupos onde você deve adicionar o soquete, primeiro eu tinha [cliente-servidor], mas depois percebi que [cliente] deveria ser o suficiente. Então eu mudei e ainda funciona.

  2. Ao correr mariadb_config | grep socketeu obtenho: o --socket [/tmp/mysql.sock] que é um pouco confuso, pois parece que /usr/local/mariadb/data/mariadb.socké o lugar real (pelo menos na minha máquina)

  3. Gostaria de saber onde posso configurar o /usr/local/mariadb/data/mariadb.sockpara realmente estar /tmp/mysql.sockpara que possa usar as configurações padrão em vez de ter que editar o meu .my.cnf(mas estou muito cansado agora para descobrir isso ...)

  4. Em algum momento, também fiz coisas mencionadas em outras respostas antes de chegar a isso.


2

Você precisará executar mysql_install_db- a maneira mais fácil é se você estiver no diretório de instalação:

$ cd /usr/local/Cellar/mysql/<version>/ 
$ mysql_install_db

Como alternativa, você pode alimentar mysql_install_dbum basedirparâmetro como o seguinte:

$ mysql_install_db --basedir="$(brew --prefix mysql)"

2

Eu enfrentei o mesmo problema no meu mac e resolvi, seguindo os seguintes tutoriais

https://mariadb.com/resources/blog/installing-mariadb-10116-mac-os-x-homebrew

Mas não se esqueça de matar ou desinstalar a versão antiga antes de continuar.

Comandos:

brew uninstall mariadb

xcode-select --install

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" - See more at: https://mariadb.com/resources/blog/installing-mariadb-10116-mac-os-x-homebrew#sthash.XQoxRoJp.dpuf

brew doctor

brew update

brew info mariadb

brew install mariadb

mysql_install_db

mysql.server start

1
Explique com alguns exemplos breves como o link fornecido o ajudou. Os links podem desaparecer e, portanto, essa pode ser a razão pela qual sua resposta pode ser excluída.
Kurt Van den Branden

2

Depois de reiniciar não consegui me conectar com o mariadb local, uma pesquisa também me trouxe a esta página e eu queria compartilhar minha solução com você.

Percebi que falta o diretório my.cnf.d em / usr / local / etc /.

Este é um bug conhecido com homebrew que é descrito e resolvido lá. https://github.com/Homebrew/homebrew-core/issues/36801

maneira rápida de corrigir: mkdir /usr/local/etc/my.cnf.d


Isso funcionou para mim. Não foi possível conectar ao mariadb local após brew updatereiniciar. brew services listo resultado mostrava o status de mariadb startedem amarelo. Obrigado pela dica.
nterms

1

Ao executar mysql_secure_installation e inserir a nova senha, obtive:


Erro: Não é possível conectar ao servidor MySQL local através do soquete '/tmp/mysql.sock' (2)


Percebi ao tentar o seguinte com esta resposta :

netstat -ln | grep mysql

Ele não retornou nada, e achei que isso significava que não havia um arquivo .sock.

Portanto, adicionei o seguinte ao meu arquivo my.cnf (em /etc/my.cnf ou, no meu caso, /usr/local/etc/my.cnf ).

Debaixo:

[mysqld]
socket=/tmp/mysql.sock

Debaixo:

[client]
socket=/tmp/mysql.sock

Isso foi baseado nesta postagem .

Então pare / inicie o mysql novamente e tente novamente mysql_secure_installation que finalmente me permite inserir minha nova senha de root e continuar com outras preferências de configuração.

Espero que isso ajude alguém. Cara, eu odeio essas coisas ...


0

apenas para completar este tópico. portanto, MAMP (PRO) é usado com bastante frequência

o caminho aqui é

/Applications/MAMP/tmp/mysql/mysql.sock

0

Eu iniciei manualmente o mysql no painel de preferências do sistema inicializando o banco de dados e depois iniciando-o. Isso resolveu meu problema.


0

No meu caso, o culpado foi encontrado nos arquivos de log:

$ tail /usr/local/var/mysql/<hostname>.lan.err
2019-09-19  7:32:21 0 [ERROR] InnoDB: redo log file './ib_logfile0' exists. Creating system tablespace with existing redo log files is not recommended. Please delete all redo log files before creating new system tablespace.
2019-09-19  7:32:21 0 [ERROR] InnoDB: Database creation was aborted with error Generic error. You may need to delete the ibdata1 file before trying to start up again.

Então mudei o nome ib_logfile0para me livrar do erro (tive que fazer o mesmo ib_logfile1depois).

mv /usr/local/var/mysql/ib_logfile0 /usr/local/var/mysql/ib_logfile0_bak
mv /usr/local/var/mysql/ib_logfile1 /usr/local/var/mysql/ib_logfile1_bak
brew services restart mariadb

0

Eu tive o mesmo problema. Depois de tentar todos esses métodos sem sucesso, fiz o seguinte:

tail -f the-mysql-or-maria-db-error-file.err

em outro console:

brew services restart mariadb

Eu vi o seguinte erro:

"MAC HOMEBREW Crash recovery falhou. Corrija o problema (se for, por exemplo, erro de falta de memória) e reinicie, ou apague tc log e inicie mysqld com"

Então mudei a tc.logextensão para tc.log.txte reiniciei mariadb

brew services restart mariadb

E feito!



0

Para mim, instalei mariadbhá muito tempo, depois instalei mysql@5.7.

Ao executar mysql -uroot, recebo o erro: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

Lendo as respostas:

  • Eu desinstalei mariadb
  • Excluiu a pasta /usr/local/var/mysql
  • Executou o comando mysqld --initialize

Então eu fui capaz de mysql -uroot -p


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.