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

255

Estou recebendo o seguinte erro ao tentar conectar-me ao mysql:

Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

Existe uma solução para este erro? Qual pode ser a razão por trás disso?

Atul
fonte
Eu respondi a isso aqui, por favor, verifique o link abaixo: stackoverflow.com/a/35577309/4773290
Pratik Patil

Respostas:

222

Você está se conectando ao "localhost" ou ao "127.0.0.1"? Notei que quando você se conecta ao "localhost", o conector do soquete é usado, mas quando você se conecta ao "127.0.0.1", o conector TCP / IP é usado. Você pode tentar usar "127.0.0.1" se o conector do soquete não estiver ativado / funcionando.

Jan Thomä
fonte
27
Nesse caso, você provavelmente deve verificar se o servidor MYSQL está realmente em execução.
Jan Thomä
3
Você também pode forçar usando um soquete com o parâmetro socket (-S com / usr / bin / mysql) e forçar TCP / IP, fornecendo uma porta (-P com / usr / bin / mysql.)
Kaoru
Usar um nome de rede totalmente qualificado que não seja localhost funcionou para mim. Apenas verifique se ele está declarado no arquivo 'hosts' do cliente.
Fabien Haddadi
2
Nota aos usuários do cygwin: se o cliente mysql do cygwin tentar conectar-se a um servidor mysql WAMP local, por exemplo, use -h <hostname diferente de localhost>. Não tente criar um arquivo mysql.sock e declare-o em qualquer arquivo my.cnf, ele não funcionará.
Fabien Haddadi
Um nome de host errado me deu exatamente o mesmo erro. Observar o /etc/hostsarquivo no meu contêiner de janela de encaixe me mostrou o nome do host do MySql mysql. O uso desse mesmo nome de host na minha configuração de conexão resolveu o problema.
Stephane
188

Certifique-se de que seu serviço mysql esteja em execução

service mysqld start

Em seguida, tente o seguinte:

(se você não definiu a senha para o mysql)

mysql -u root

se você já definiu a senha

mysql -u root -p
Haja Peer Mohamed H
fonte
5
em versões mais recentes do Debian: service mariadb startporque mariadb.org/debian-9-released-mariadb-mysql-variant
Zahra
2
Dê a esse cara uma medalha.
precisa
Essa foi a resposta para mim. Desde que estou usando o mariadb, a solução foi executar o seguinte: "sudo systemctl start mariadb". Tudo foi bem depois disso.
mohsen
Dê uma medalha à @Zahra
Ahmed C
28

Se o seu arquivo my.cnf (geralmente na pasta etc) estiver corretamente configurado com

socket=/var/lib/mysql/mysql.sock

você pode verificar se o mysql está sendo executado com o seguinte comando:

mysqladmin -u root -p status

tente mudar sua permissão para a pasta mysql. Se você estiver trabalhando localmente, poderá tentar:

sudo chmod -R 777 /var/lib/mysql/

que resolveu para mim

marimaf
fonte
Ele funciona para mim também, mas é depois que eu atualizei para a versão mais recente e, em seguida, apareça esse problema, posso saber por que isso aconteceu?
Ben
sudo chmod -R 777 / var / lib / mysql / trabalhou para mim com um problema que tive no início de um mysql recipiente janela de encaixe
user3152459
23

O servidor MySQL não está em execução ou esse não é o local do seu arquivo de soquete (verifique my.cnf).

Dan Grossman
fonte
Eu tive o problema descrito acima e este foi o problema. Obrigado.
oshirowanen
3
Onde seria a instalação do Homebrew?
pal4life
19

Provavelmente mysql.socknão existe em /var/lib/mysql/.

Se você encontrar o mesmo arquivo em outro local, vincule-o novamente:

Por exemplo: eu tenho isso em /data/mysql_datadir/mysql.sock

Alterne o usuário para o mysql e execute como mencionado abaixo:

su mysql

ln -s /data/mysql_datadir/mysql.sock /var/lib/mysql/mysql.sock

Isso resolveu meu problema

sreddy
fonte
renomear mysql.sock para outra coisa, depois reiniciar o mysqld ("service mysqld restart") e renomear outra coisa de volta para mysql.sock funcionou para mim. Uma ligeira variação nesta resposta, então obrigado.
Análise difusa
Esta resposta pode ajudar a localizar o mysql.sockarquivo
Nobita 28/07
15

Se você está em um RHEL recente, pode ser necessário iniciar o mariadb (um código aberto do mysql db) em vez do mysql db:

yum remove mysql
yum -y install mariadb-server mariadb
service mariadb start

Você poderá acessar o mysql da maneira usual:

mysql -u root -p
duhaime
fonte
Para sua informação, isso também funciona para o CentOS 8.1. Após a instalação mariadb-servere mariadb, não se esqueça de executar mysql_secure_installationpara limpar algumas configurações inseguras padrão.
Dio Phung 20/04
13

No meu caso, mudei o arquivo de soquete para outro local dentro /etc/my.cnf de /var/lib/mysql/mysql.sockpara/tmp/mysql.sock

Mesmo depois de reiniciar o serviço mysqld, ainda vejo a mensagem de erro quando tento conectar. ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

O problema está na maneira como o cliente está configurado. O diagnóstico em execução mostrará o caminho correto do soquete. por exemplops aux | grep mysqld

Trabalho:

mysql -uroot -p -h127.0.0.1
mysql -uroot -p --socket=/tmp/mysql.sock

Não funciona:

mysql -uroot -p
mysql -uroot -p -hlocalhost

Você pode corrigir esse problema adicionando a mesma linha de soquete na [client]seção dentro da configuração do mysql.

Dejan
fonte
13

Basta editar /etc/my.cnf Adicione as seguintes linhas paramy.cnf

[mysqld]

socket=/var/lib/mysql/mysql.sock 

[client]

socket=/var/lib/mysql/mysql.sock

Reinicie o mysql e conecte-se novamente

mysql -u usuário -p banco de dados de senhas -h host;

minhas23
fonte
A única resposta correta. Eu me pergunto por que não tem votos suficientes.
CentAu
11

Verifique se o serviço mysqld está em execução ou não, se não estiver, inicie o serviço.

Se o seu problema não for resolvido, procure /etc/my.cnfe modifique da seguinte maneira, onde você vê uma linha começando com socket. Faça um backup desse arquivo antes de fazer esta atualização.

socket=/var/lib/mysql/mysql.sock  

Mudar para

socket=/opt/lampp/var/mysql/mysql.sock -u root
vkGunasekaran
fonte
1
Oi Sekar, eu digitei "find / -name my.cnf", e eu tenho dois locais. 1) /opt/lampp/etc/my.cnf 2) /etc/mysql/my.cnf. Então, qual usar .. Eu fiz a pergunta aqui .. stackoverflow.com/questions/32437796/…
Nana Partykar 7/15
7

MariaDB, um fork do MySQL desenvolvido pela comunidade, tornou-se a implementação padrão do MySQL em muitas distribuições.

Então, primeiro você deve começar,

$ sudo systemctl start mariadb

Se isso falhar, tente,

$ sudo systemctl start mysqld

Então, para iniciar o mysql,

$ mysql -u root -p

Hoje em dia, no Fedora, o pacote é chamado mariadb E no Ubuntu, é chamadomariadb-server .

Portanto, talvez você precise instalá-lo se ainda não estiver instalado no seu sistema.

Gayan Weerakutti
fonte
7

Verifique se você tem espaço suficiente /var. Se o demon mysql não conseguir escrever informações adicionais na unidade, o servidor mysql não iniciará e isso levará ao erroCan't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

Considere usar

expire_logs_days = 10
max_binlog_size = 100M

Isso ajudará você a manter baixo o uso do disco.

Karthik
fonte
Obrigado, estou executando o mysql no oracle virtualbox e quando fiz um despejo do meu bd, fiquei sem espaço e não consegui iniciar o servidor mysql, quando excluí o arquivo de despejo, consegui reiniciar o servidor mysql.
21413 JayCee
1
Isso resolveu para mim. Eu tinha innodb_buffer_pool_size definido com um valor muito alto para ambientes de produção e isso causou uma falha no mysql na minha máquina virtual.
22714 Benjamin Brizzi
1
Eu tive esse problema ao usar phabricator e a solução foi mudar innodb_buffer_pool_sizeem my.cnf. Defini-lo para um valor pequeno, como innodb_buffer_pool_size = 50Mé um bom teste para descartar esta hipótese;)
Yercalamarino
Esse era o problema, checava tudo, menos o espaço em disco. Liberou espaço de / var, voltou!
Nadjib Mami
5

Aqui está o que funcionou para mim:

ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
service mysqld restart
Do utilizador
fonte
4

Por favor, verifique se outro serviço mysql está em execução.

Kishore Relangi
fonte
4

Certifique-se de ter iniciado o servidor:

mysql.server start

Em seguida, conecte-se ao usuário root:

mysql -uroot
Deniz Ozger
fonte
3

Se o seu mysql estava funcionando anteriormente e parou subitamente, basta "reiniciar" o servidor.

Estava enfrentando esse problema no meu CentOS VPS .->

Estava constantemente recebendo

Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'(2)

Tentei todas as técnicas, finalmente reiniciar o servidor corrigiu os problemas ->

shutdown -r now

Espero que isto ajude !!

Shashank Agarwal
fonte
3

experimentar

echo 0 > /selinux/enforce
dvin
fonte
3

se você alterar arquivos em / var / lib / mysql [como copiar ou substituir isso], deverá configurar o proprietário dos arquivos como mysql, isso é tão importante se a reinicialização do mariadb.service falhar

chown -R mysql: mysql / var / lib / mysql / *

chmod -R 700 / var / lib / mysql / *

Mohsen Beiranvand
fonte
2

Primeiro digite "service mysqld start" e faça o login

hPrasad
fonte
O que você quer dizer? por favor leia o FAQ antes de pedir a pergunta aqui
Anormal
Esta pergunta foi respondida com sucesso há três anos. Essa resposta exata foi dada mais completamente no ano passado.
Cairnarvon
2

Por favor, verifique se você instalou o servidor MySQL corretamente, eu encontrei esse erro várias vezes e acho difícil depurar do soquete, quero dizer que pode ser mais fácil reinstalá-lo.

Se você estiver usando o CentOS 7, eis a maneira correta de instalá-lo:

Primeiro de tudo, adicione a fonte da comunidade mysql
yum install http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm

Então você pode instalá-lo yum install mysql-community-server

Inicie com systemctl: systemctl start mysqld

Zernel
fonte
1

Meu problema foi que instalei o mysql com sucesso e funcionou bem.

Mas um dia, o mesmo erro ocorreu.

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

E nenhum arquivo mysql.sock existia.

Esta solução resolveu meu problema e o mysql voltou a funcionar:

Faça login como root:

sudo su -

Corre:

systemctl stop mysqld.service
systemctl start mysqld.service
systemctl enable mysqld.service

Teste como root:

mysql -u root -p

O mysql agora deve estar instalado e funcionando.

Espero que isso possa ajudar outra pessoa também.

Bharald
fonte
1

Note que enquanto o mysql lê as informações da localização do arquivo de soquete no arquivo my.cnf, o programa mysql_secure_installation parece não fazer isso corretamente às vezes.

Portanto, se você é como eu e embaralha as coisas no momento da instalação, pode entrar na situação em que pode se conectar ao banco de dados com o mysql, mas a coisa não pode ser protegida (sem usar esse script).

Para corrigir isso, a sugestão do sreddy funciona bem: faça um link suave de onde o script esperaria o soquete para onde ele realmente está. Exemplo:

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

(Eu uso / tmp / como local padrão para soquetes)

Ellert van Koperen
fonte
1

Funcionou para mim com as seguintes alterações

Qualquer que seja o caminho para o socket mencionado no [mysqld] e o mesmo no [client] no my.cnf e reinicie o mysql

soquete [mysqld] = / var / lib / mysql / mysql.sock

soquete [cliente] = / var / lib / mysql / mysql.sock

minhas23
fonte
1

Uma maneira de reproduzir esse erro: Se você pretendia se conectar a um servidor externo, mas se conectar ao local inexistente:

eric@dev ~ $ mysql -u dev -p
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through 
socket '/var/lib/mysql/mysql.sock' (2)
eric@dev ~ $

Então você tem que especificar o host como este:

eric@dev ~ $ mysql --host=yourdb.yourserver.com -u dev -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 235
Server version: 5.6.19 MySQL Community Server (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+-------------------------+
| Database                |
+-------------------------+
| information_schema      |
| mysql                   |
| performance_schema      |
+-------------------------+
3 rows in set (0.00 sec)

mysql> exit
Bye
eric@dev ~ $
Eric Leschinski
fonte
1

Isso pode ser uma sugestão estúpida, mas certifique-se de que seu banco de dados ainda esteja hospedado no localhost. Por exemplo, se um administrador de rede escolher (ou mudar para) a hospedagem do Amazon DB, você precisará desse nome de host!

A primeira e única química
fonte
Estou usando o provedor de hospedagem 1and1 e recebi esse erro após o ssh para o host. A correção foi simplesmente fornecer o nome do host "mysql -u dbo70123521 -p --host db70313321.db.1and1.com db703133520"
rob
1

No meu caso, estava importando um novo banco de dados e não consegui me conectar novamente depois disso. Finalmente, percebi que era um problema de espaço.

Para que você possa excluir o último banco de dados e expandir seu disco rígido ou o que eu fiz, restaurei um instantâneo da minha máquina virtual.

Apenas no caso de alguém achar útil

Evan
fonte
0

correu esse problema ao tentar conectar o mysql no cliente SSH, e foi útil adicionar o caminho do soquete ao comando quando é necessário alternar entre soquetes.

> mysql -u user -p --socket=/path/to/mysql5143.sock
Jaak Kütt
fonte
0

Este é um problema se você estiver ficando sem espaço em disco. A solução é liberar espaço no disco rígido.

Leia mais para ter a explicação:

Se você estiver executando o MySQL no LINUX, verifique o espaço livre do HDD com o disco de comando livre:

 df 

se você estiver recebendo algo assim:

Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda2              5162828   4902260         0 100% /
udev                    156676        84    156592   1% /dev
/dev/sda3              3107124     70844   2878444   3% /home

Então este é o problema e agora você tem a solução!

Como o mysql.sock deseja ser criado na pasta mysql, que quase sempre está na pasta raiz, não foi possível devido à falta de espaço.

Se você fornecer periodicamente o comando ls no diretório mysql (no openSUSE 11.1 está em / var / lib / mysql), você terá algo como:

hostname:/var/lib/mysql #
.protected  IT     files        ibdata1             mysqld.log  systemtemp
.tmp        NEWS   greekDB      mysql               mysqld.pid  test
ARXEIO      TEMP1  ib_logfile0  mysql.sock          polis
DATING      deisi  ib_logfile1  mysql_upgrade_info  restore

O arquivo mysql.sock aparece e desaparece com frequência (você deve tentar colocar o ls para acessar uma instância com o arquivo mysql.sock na pasta).

Isso é causado pelo espaço em disco insuficiente.

Espero ajudar algumas pessoas !!!! Obrigado!

c.chasapis
fonte
0

Eu tive que desativar explicit_defaults_for_timestampdo my.cnf.

powtac
fonte
0

Experimente as primeiras 2, 3 soluções. O erro é ainda pop-up & Se você não consegue encontrar/var/lib/mysql/mysql.sock

find /var/ -name mysql.sock

Verifique o espaço disponível em / var /

df

Se o diretório estiver cheio, remova alguns arquivos / diretórios não úteis

rm /var/cache/*

Provavelmente, seu problema será resolvido agora.

Sadee
fonte
0

Se você estiver no shell do sf.net , tente:

mysql --host=mysql-{LETTER} --user={LETTER}{GROUP ID}admin -p

Altere {LETTER} e {GROUP ID} conforme mostrado no banco de dados MySQL do perfil de administrador do projeto.

Chetabahana
fonte