ti-enxame.com

Não é possível conectar-se ao servidor MySQL local por meio de homebrew de soquete

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

ERRO 2002 (HY000): Não é possível conectar-se ao servidor MySQL local por meio do soquete '/tmp/mysql.sock' (2)

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

Eu procurei e não encontrei nenhum arquivo mysql.sock.

Como posso consertar isso?

72
socketman

Quando você tem o servidor rodando via

mysql.server start

você deve ver o socket em /tmp/mysql.sock. No entanto, o sistema parece esperar em /var/mysql/mysql.sock. Para corrigir isso, você precisa 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 trabalha feliz com localhoste _ ​​127.0.0.1.

O crédito vai para Henry

75
AAGD

Parece que o seu servidor mysql não foi iniciado. Eu costumo executar o comando stop e reiniciá-lo novamente:

mysqld stop
mysql.server start

O mesmo erro, e isso funciona para mim.

47
jesuis

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

21
Iswanto San

1) Se você é capaz de ver "mysql parado" quando você executa o comando abaixo;

brew services list

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

mysql server start

então, adicionar o mysql aos serviços irá resolver o seu problema. Com este método, o mysql iniciará como serviço quando o sistema operacional for iniciado. 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. Eu fiz o mesmo e parei de receber abaixo do erro;

ERRO 2002 (HY000): Não é possível conectar-se ao servidor MySQL local por meio do soquete '/Tmp/mysql.sock' (2)

Eu espero que isso ajude.

11
Berk

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

Eu resolvi isso fazendo o seguinte:

Primeiro desinstale o mysql

brew uninstall [email protected]

Excluir as pastas/arquivos que não foram removidos

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

Reinstale o mysql e associe-o

brew install [email protected]
brew link --force [email protected]

Ativar e iniciar o serviço

brew services start [email protected]
7
Royal.O

Eu tenho 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
gouravtiwari21

Como passei um bom tempo tentando resolver isso e sempre voltei a esta página quando procurava esse erro, deixo 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 essa 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

Começou 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 arquivos my.cnf 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 do Unix está rodando (quase como descrito aqui ):

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

(você pode querer grep mysql em vez de mariadb)

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

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

Reinicie seu mariadb:

$ brew services restart mariadb

Depois disso eu pude rodar o mysql e recebi:

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

Então eu corro o comando com privilégios de superusuário e depois de digitar minha senha eu recebi:

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

Notas:

  1. Eu não tenho certeza sobre os grupos onde você tem que adicionar o socket, primeiro eu tive [client-server] mas depois eu percebi que [client] deveria ser o suficiente. Então eu mudei e ainda funciona.

  2. Ao executar mariadb_config | grep socket eu recebo: --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 eu posso configurar o /usr/local/mariadb/data/mariadb.sock para realmente ser /tmp/mysql.sockso eu posso 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 eu também fiz coisas mencionadas em outras respostas antes de chegar a isso.

2
dingalapadum

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
2
Hany Sakr

O arquivo /tmp/mysql.sock é provavelmente um Named-Pipe, já que 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, poderemos 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 computador, IE não armazena permanentemente o arquivo (como fazemos quando criamos um arquivo e o salvamos.)

Um soquete é exatamente o mesmo que um tubo. A diferença é que os soquetes são geralmente usados ​​em uma rede - entre computadores. Um Soquete envia informações para outro computador ou recebe informações de outro computador. Tanto o Pipes quanto o Sockets usam um arquivo temporário para compartilhar, de modo que possam "se comunicar".

É difícil discernir qual deles o MySql está usando neste caso. Não importa, no entanto.

O comando mysql.server start deve obter o 'servidor' (programa) executando seu loop infinito que criará aquele arquivo especial e aguardará mudanças (listen para 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 privilégios de root. 

Sudo mysql.server start
1
Tyler Curtis Jowers

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_db um parâmetro basedir como o seguinte:

$ mysql_install_db --basedir="$(brew --prefix mysql)"
1
Kelley Robinson

Apenas para adicionar a estas respostas, no meu caso eu não tinha nenhum servidor mySQL local, ele estava rodando dentro de um container docker. Portanto, o arquivo de soquete não existe e não será 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 seu servidor mySql não estiver sendo executado localmente, ele não requer o arquivo sock.

Ao especificar um nome de host/ip, o arquivo de meia não é necessário, e. 

mysql --Host=127.0.0.1 --port=3306 --user=xyz --password=xyz
1
Wayne

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

o caminho aqui é

/Applications/MAMP/tmp/mysql/mysql.sock
0
alexdd55

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

0
krish

rm -rf/usr/local/var/mysql/ib_logfile *

0
Pasichnik Roman

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

0
GnrlBzik