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.