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

385

Estou tendo um grande problema ao tentar conectar ao mysql. Quando eu corro:

/usr/local/mysql/bin/mysql start

Eu tenho o seguinte erro:

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

Eu tenho mysql.socksob o /var/mysqldiretório

Em /etc/my.cnfeu tenho:

[client]
port=3306
socket=/var/mysql/mysql.sock

[mysqld]
port=3306
socket=/var/mysql/mysql.sock
key_buffer_size=16M
max_allowed_packet=8M

e em /etc/php.inieu tenho:

; Default socket name for local MySQL connects.  If empty, uses the built-in
; MySQL defaults.
mysql.default_socket = /var/mysql/mysql.sock

Eu reiniciei o apache usando sudo /opt/local/apache2/bin/apachectl restart

Mas ainda tenho o erro.

Caso contrário, eu não sei se isso é relevante, mas quando mysql_config --socketseu recebo

--socket         [/tmp/mysql.sock]
Lambivist
fonte
53
O MySQL está rodando?
David
2
Isso certamente explica o erro ao tentar se conectar a ele. Como, como o @Romain mencionou, há algo nos logs do MySQL (tente /var/log/mysqlou em algum lugar por aí) que indique por que não está sendo executado? Você recebe um erro ao tentar iniciá-lo?
David
5
Eu estava recebendo o mesmo erro, mas no meu caso, descobri que o mysql não seria iniciado porque o disco estava 100% cheio. /var/log/mysqld.log foi útil.
Yellavon
4
a razão pela qual eles estão perguntando se está em execução, presumo, é porque o soquete é feito quando o serviço é iniciado. Eu instalei o mysql, mas nunca iniciei o serviço, portanto o arquivo .sock não existe. digite service mysqld startse você acabou de instalar. hth
changokun
2
Abaixo a resposta de shimanyi sudo service mysql startme salvou
Kiren Siva

Respostas:

218

Se o seu arquivo my.cnf (normalmente na pasta / etc / mysql / ) estiver configurado corretamente 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 755 /var/lib/mysql/

que resolveu para mim

marimaf
fonte
11
Isso me ajudou depois que eu segui as etapas acima e reiniciei o mysqldserviço.
whirlwin
11
Seria melhor se você definir as permissões para 755, para que somente o proprietário do diretório possa gravar nele.
Codebaggle
2
Meu problema era, na verdade, que meu volume de armazenamento para meu aplicativo Web ficou sem espaço! Clássico!
James T Snell
3
No meu openSUSE 12.3, o my.cnf está em / etc /.
devemos também alterar permissão para /var/log/mysqld.log, Graças
Allahbakash.G
94

você tem certeza que instalou o mysql e o servidor mysql?

Por exemplo, para instalar o servidor mySql, usarei o yum ou apt para instalar a ferramenta de linha de comando mysql e o servidor:

yum -y install mysql mysql-server (or apt-get install mysql mysql-server)

Habilite o serviço MySQL:

/sbin/chkconfig mysqld on

Inicie o servidor MySQL:

/sbin/service mysqld start

depois defina a senha root do MySQL:

mysqladmin -u root password 'new-password' (with the quotes)

Espero que ajude.

Waqas
fonte
Eu usei homebrew e funcionou como um encanto: brew install mysql
JaKXz 14/01
2
Eu já tinha instalado o cliente, o comando que eu precisava era sudo apt-get install mysql-serverentão a vida era boa
ErichBSchulz
11
Não é a saída Can't connect to local MySQL server through socket '/var/mysql/mysql.sock' (38) do cliente? É o cliente tentando e falhando na conexão, certo? (Acho que a pergunta original precisa ser editada para esclarecer isso).
msouth
76

Uma solução rápida que funcionou para mim: tente usar o endereço IP local (127.0.0.1) em vez de 'localhost' em mysql_connect (). Isso "força" o php a se conectar através do TCP / IP em vez de um soquete unix.

Maurizio
fonte
Funcionou ... mas por quê? O MySQL não resolve localhoste fica 127.0.0.1assim mesmo antes de tentar se conectar?
Jaime Hablutzel
3
não ... ao usar o host local, você não está usando um soquete da Internet. Você está usando um soquete IPC. en.wikipedia.org/wiki/Unix_domain_socket . 127.0.0.1 é loopback local que significa que o pedido não sairá sua máquina, mas ele vai usar TCP / IP sendo assim mais lento ...
Mestre Yogurt
Funciona para mim também. Estou no ubuntu 14.04, hhvm e nginx.
Maykonn
11
obrigado. Isso funciona para mim, mas não está claro para mim desde a resposta que a correção é
Nathan Buesgens
Isso também é necessário quando você se conectar ao servidor remoto através de um túnel ssh
Tamm
51

Eu recebi o seguinte erro

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (111)

Tentei de várias maneiras e finalmente resolvi da seguinte maneira

sudo gksu gedit /etc/mysql/my.cnf

modificado

#bind-address       = 127.0.0.1

para

bind-address        = localhost

e reiniciado

sudo /etc/init.d/mysql restart

funcionou

AnupRaj
fonte
Eu tive uma questão semelhante; mudou de ethernet (192.168.220.11) para wifi (192.168.220.12), mas tinha um endereço de ligação codificado para IP ethernet. Mudando para localhostcorrigi-lo.
Chris G
30

Verifique se você está executando o mysqld: /etc/init.d/mysql start

Zorayr
fonte
3
Ou sudo service mysql start|restartpara o Ubuntu.
Wtower 19/12/16
18

Para impedir que o problema ocorra, você deve executar um desligamento normal do servidor na linha de comando, em vez de desligar o servidor.

shutdown -h now

Isso interromperá os serviços em execução antes de desligar a máquina.

Baseado no Centos, um método adicional para recuperá-lo novamente quando você enfrentar esse problema é mover o mysql.sock:

mv /var/lib/mysql/mysql.sock /var/lib/mysql/mysql.sock.bak

service mysqld start

Reiniciar o serviço cria uma nova entrada chamada mqsql.sock

Ali Hashemi
fonte
14

Eu recebi esse erro ao definir o trabalho cron para o meu arquivo. Alterei as permissões do arquivo para 777, mas ainda não funcionou para mim. Finalmente consegui a solução. Pode ser que seja útil para outros.

Tente com este comando:

mysql -h 127.0.0.1 -P 3306 -u raiz -p

Lembre-se de que -h significa host , -P significa porta e -p significa senha.

Doulat Khan
fonte
Forçar uma conexão através de TCP / IP em vez de usar um soquete é ineficiente (e requer que você ative o suporte a TCP / IP de host local no servidor, conforme esta resposta anterior ). A resposta aceita a partir de 2011 é melhor: configure o servidor para poder usar um soquete corretamente.
Quentin
10
-pnão significa porta , isso significa que a senha , você confundido com-P
Quentin
Este parece ser, mais ou menos, uma cópia dessa resposta anterior
Quentin
Para mim, foi apenas uma questão de definir o host correto: mysql -h 127.0.0.1 -u root -p
kghbln
12

Como pode ser visto pelas muitas respostas aqui, existem muitos problemas que podem resultar nessa mensagem de erro quando você inicia o serviço MySQL. O problema é que o MySQL geralmente diz exatamente o que há de errado, se você apenas procurar no arquivo de log apropriado.

Por exemplo, no Ubuntu, você deve verificar /var/log/syslog. Como muitas outras coisas também podem estar registrando nesse arquivo, você provavelmente desejará usar as grepmensagens do mysql e as tailapenas as mais recentes. Todos juntos, isso pode se parecer com:

grep mysql /var/log/syslog | tail -50

Não faça cegamente alterações em sua configuração porque alguém disse 'Isso funcionou para o meu sistema'. Descubra o que realmente está errado com seu sistema e você obterá um resultado melhor muito mais rapidamente.

matt2000
fonte
5
+1 Por dar um passo atrás e apontar algo que muitas das outras respostas nem sequer consideram - que, na verdade, ver o que o aplicativo pode ter relatado como um problema é uma abordagem muito melhor do que se apressar cegamente e fazer alterações que podem não acontecer. até ser aplicável ...!
SlySven
Ah, então está usando o errado .cnf. Isso explica tudo. Agora posso parar de tentar coisas aleatórias e resolver o problema real. Obrigado.
Synetech
11

Outra solução alternativa é editar o arquivo /etc/my.cnf e incluir o host na seção [client]

 [client]
 #password       = your_password
 host            = 127.0.0.1
 port            = 3306
 socket          = /var/run/mysql/mysql.sock

E, em seguida, reiniciando o serviço mysql.

Esta solução alternativa foi testada em: Versão do servidor: 5.5.25a-log Distribuição de origem

a sombra
fonte
Adicionando a seção [cliente] é recomendado se não estiver já em my.cnf
Cris
7

Eu tive o mesmo problema e foi causado por uma atualização de drivers mysql quando o servidor mysql estava em execução. Corrigi-o apenas reiniciando o mysql e o apache2:

serviço sudo mysql stop

serviço sudo mysql start

serviço sudo apache2 stop

serviço sudo apache2 start

fustaki
fonte
No meu caso, mysqlnão estava correndo. Corri sudo service mysql startdepois de executar sudo service mysql statuspara verificar se não estava funcionando.
Tass
6

No meu caso, eu estava usando o Centos 5.5. Eu descobri que o problema era porque o serviço mysql foi interrompido de alguma forma. Então iniciei o serviço mysql com o comando:

 /etc/init.d/mysqld start

Então ... erro bobo.

Shyamkkhadka
fonte
6

Se tudo funcionou bem e você começou a ver esse erro, antes de fazer qualquer outra coisa, verifique se não há espaço em disco:

df -h

Se o volume em que o mysql.sock está sendo criado estiver com 100% de uso, o MySql não poderá criá-lo e isso será a causa desse erro. Tudo o que você precisa fazer é excluir algo que não é necessário, como arquivos de log antigos.

Derek Gogol
fonte
6

tente com -h (host) e -P (porta):

mysql -h 127.0.0.1 -P 3306 -u root -p

Ramil Mammadov
fonte
5
sudo service mysql start

Isso deve lhe servir muito bem. Pode ser que você tenha alterado alguns comandos que afetaram as configurações do mysql.

shimanyi
fonte
ou systemctl start mariadb.serviceno Fedora 22 ou RedHat 7. Depois disso, é possível definir a senha do root.
Junior Mayhé
5

Existem muitas soluções para esse problema, mas para a minha situação, eu só precisava corrigir a DATA na máquina / servidor ( Ubuntu 16.04 Server ).

i) Verifique a data do seu servidor e corrija-a.

ii) Executar sudo /etc/init.d/mysql restart

Isso deve começar.

Huey Mataruse
fonte
4

Eu estava recebendo o erro porque estava executando o MAMP e meu arquivo .sock estava em um local diferente. Acabei de adicionar um link simbólico onde o aplicativo achava que deveria apontar para onde realmente estava e funcionou como um encanto.

Devin Henkel-Legare
fonte
como adicionar link simbólico onde o aplicativo achou que deveria apontar para onde realmente estava?
Gilberto Ibarra
4

Também descobri que este era um problema de permissões. Comparei os arquivos MySQL com uma instalação funcional (ambos no Debian 6 squeeze) e tive que fazer as seguintes alterações de propriedade (ondemydatabase estão os bancos de dados que você possui).

Propriedade mysql:mysql:

chown mysql:mysql /var/lib/mysql
chown mysql:mysql /var/lib/mysql/ib*
chown mysql:mysql /var/lib/mysql/mydatabase
chown mysql:mysql /var/lib/mysql/mydatabase/*
chown mysql:mysql /var/lib/mysql/mysql/* 

Propriedade mysql:root:

chown mysql:root /var/lib/mysql/mysql
chown mysql:root /var/run/mysqld 

Propriedade mysql:adm:

chown mysql:adm /var/log/mysql
chown mysql:adm /var/log/mysql.err
chown mysql:adm /var/log/mysql.log* 
SharpC
fonte
4

Para mim - esse foi simplesmente um caso do MySQL demorando muito para carregar. Eu tenho mais de 100.000 tabelas em um dos meus bancos de dados e ele acabou sendo iniciado, mas obviamente precisa demorar muito tempo nesse caso.

Antony
fonte
3

Se você estiver usando a versão Micro da AWS (Amazon Web Services), é um problema de memória. Quando eu corri

mysql

do terminal diria

ERROR 2002 (HY000): Can't connect to local MySQL server through socket /var/run/mysqld/mysqld.sock' (111)

Então, tentei o seguinte e isso simplesmente falharia.

service mysqld restart

Após muita pesquisa, descobri que você precisa criar um arquivo de permuta para o MySQL para ter memória suficiente. As instruções estão listadas: http://www.prowebdev.us/2012/05/amazon-ec2-linux-micro-swap-space.html .

Então, eu fui capaz de reiniciar o mysqld.

jth_92
fonte
Eu tive o mesmo problema na instância "micro" do servidor da AWS e posso confirmar que a criação do arquivo de troca corrigiu o "ERRO 2002 (HY000): Não é possível conectar-se ao servidor MySQL local através do socket / var / run / mysqld / mysqld .sock '(111) "problema. Obrigado @ jth_92!
Konaras
3

você sempre pode iniciar o servidor mysql especificando o local do arquivo mysql.sock usando a --socketopção

mysql --socket=/var/mysql/mysql.sock 

Isso funcionará mesmo se o local do arquivo de soquete estiver especificado em um local diferente no arquivo my.cnf.

David Okwii
fonte
3

Para aqueles cuja solução não funcionou, tente:

cd /etc/mysql

verifique se my.cnf está presente

nano my.cnf

e verifique se você tem apenas um endereço de ligação da seguinte maneira:

endereço de ligação = 127.0.0.1

Caso contrário, esse pode ser o problema, basta sair do nano e salvar o arquivo.

e service mysql start

note que se você não possui o nano (é um editor de texto), basta instalá-lo apt-get install nanoe, uma vez em apenas pressionar Ctrl + X para sair, não se esqueça de dizer Y para salvar e usar o mesmo arquivo)

Jack M.
fonte
Infelizmente isso não funcionou. Isso basicamente diz apenas que a máquina local pode acessar o mysql. Sem conexões remotas.
31317 Stephen
3

Eu também tive esse problema ao tentar iniciar o servidor, muitas das respostas aqui que dizem apenas para iniciar o servidor não funcionaram. A primeira coisa que você pode fazer é executar o seguinte para verificar se há algum erro de configuração:

/usr/sbin/mysqld --verbose --help 1>/dev/null

Eu tive um erro que apareceu:

160816 19:24:33 [Note] /usr/sbin/mysqld (mysqld 5.5.50-0ubuntu0.14.04.1-log) starting as process 9461 ...
160816 19:24:33 [Warning] Using unique option prefix myisam-recover instead of myisam-recover-options is deprecated and will be removed in a future release. Please use the full name instead.
160816 19:24:33 [Note] Plugin 'FEDERATED' is disabled.
160816 19:24:33 [ERROR] /usr/sbin/mysqld: unknown variable 'innodb-online-alter-log-max-size=4294967296'
160816 19:24:33 [ERROR] Aborting

Um simples grep -HR "innodb-online-alter-log-max-size" /etc/mysql/ me mostrou exatamente qual arquivo continha a linha incorreta, então eu a removi do arquivo.

Então, verificando meu /var/log/mysql/error.logarquivo, eu tinha:

InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880 bytes
InnoDB: than specified in the .cnf file 0 671088640 bytes!
160816 22:46:46 [ERROR] Plugin 'InnoDB' init function returned error.
160816 22:46:46 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
160816 22:46:46 [ERROR] Unknown/unsupported storage engine: InnoDB
160816 22:46:46 [ERROR] Aborting

Com base nessa pergunta, a solução aceita não funcionaria porque eu não conseguia nem iniciar o servidor, então segui o que alguns comentários disseram e excluí meus arquivos /var/lib/mysql/ib_logfile0e /var/lib/mysql/ib_logfile1.

Isso permitiu que o servidor iniciasse e eu consegui conectar e executar consultas, no entanto, ao verificar meu arquivo de log de erros, ele foi rapidamente preenchido com várias dezenas de milhares de linhas como esta:

160816 22:52:15  InnoDB: Error: page 1415 log sequence number 82039318708
InnoDB: is in the future! Current system log sequence number 81640793100.
InnoDB: Your database may be corrupt or you may have copied the InnoDB
InnoDB: tablespace but not the InnoDB log files. See
InnoDB: http://dev.mysql.com/doc/refman/5.5/en/forcing-innodb-recovery.html
InnoDB: for more information.

Com base em uma sugestão daqui , para corrigir isso, fiz um mysqldump e restaurei todos os bancos de dados (veja o link para várias outras soluções).

$ mysqldump -u root -p --allow-keywords --add-drop-database --comments --hex-blob --opt --quote-names --databases db_1 db_2 db_3 db_etc > backup-all-databases.sql
$ mysql -u root -p < backup-all-databases.sql

Tudo parece estar funcionando como esperado agora.

Mike
fonte
A verificação /var/log/mysql/error.logajudou no meu caso. Não foi [ERROR] Can't init tc logque foi rapidamente corrigido usando seguinte resposta: dba.stackexchange.com/a/185006/163583
Juraj.Lorinc
2

Adicionando

--protocol=tcp 

para a lista de pramaters na sua conexão funcionou para mim.

barryred
fonte
2

Isso foi bom o suficiente para mim

sudo /etc/init.d/mysql restart
Vikram
fonte
2

Encontrei esta questão hoje. Nenhuma dessas respostas forneceu a correção. Eu precisava executar os seguintes comandos (encontrados aqui https://stackoverflow.com/a/20141146/633107 ) para o meu serviço mysql iniciar:

sudo /etc/init.d/mysql stop
cd /var/lib/mysql/
ls ib_logfile*
mv ib_logfile0 ib_logfile0.bak
mv ib_logfile1 ib_logfile1.bak
... etc ...
/etc/init.d/mysql restart

Isso foi parcialmente indicado pelos seguintes erros em /var/log/mysql/error.log:

140319 11:58:21 InnoDB: Completed initialization of buffer pool
InnoDB: Error: log file ./ib_logfile0 is of different size 0 50331648 bytes
InnoDB: than specified in the .cnf file 0 5242880 bytes!
140319 11:58:21 [ERROR] Plugin 'InnoDB' init function returned error.
140319 11:58:21 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
140319 11:58:21 [ERROR] Unknown/unsupported storage engine: InnoDB
140319 11:58:21 [ERROR] Aborting

Eu também vi o erro de disco cheio, mas apenas ao executar comandos sem o sudo. Se a verificação de permissões falhar, ele relata o disco cheio (mesmo quando sua partição nem sequer está perto).

Splaktar
fonte
2

CentOS 7, 64 bits. Instalação nova.
No meu caso, o erro ocorreu porque eu não tinha o servidor MySQL e o cliente MySQL certos instalados.
Usando yum, eu removi mariadbe mysql-community edition. Eu baixei as rpm para o cliente e servidor no site oficial do MySQL e instalei o servidor e o cliente.

Ao instalar o servidor, me foi mostrada uma mensagem de que a senha da conta raiz do MySQL estava armazenada em um arquivo que eu podia visualizar sudo cat /root/.mysql_secret.

Então, depois de instalar o cliente e o servidor, verifiquei se o MySQL estava funcionando (acho que reinicializei antes) com o comando sudo service mysql statuse obtive o resultado.

MySQL em execução (2601) [OK]

Eu entrei em MySQL usando a senha do arquivo .mysql_secret:
mysql -uroot -pdxM01Xfg3DXEPabpf. Observe quedxM01Xfg3DXEPabpf é a senha mencionada no arquivo .mysql_secret.

e, em seguida, digite o seguinte comando no prompt do mysql para alterar a senha do root:

mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('somePassword');

Tudo funcionou bem a partir de então.

Nav
fonte
11
mesmo caso no RHEL6U6 com versão do servidor: 5.6.23-enterprise-commercial-advanced.
O HCD
2
sudo service mysqld start

Trabalhou para mim, estou usando Centos

ikuchris
fonte
2

Isso não responde diretamente à sua pergunta, mas um subconjunto dela, usando o PythonAnywhere. Eu continuava tropeçando nessa pergunta ao procurar uma correção, então estou adicionando aqui na esperança de que ela ajude outras pessoas na minha situação.


O PythonAnywhere decidiu alterar os nomes de host de conexão com o banco de dados para melhorar a eficiência e a confiabilidade, conforme detalhado aqui :

O nome do host oficial que você deve usar para se conectar à instância do banco de dados MySQL da sua conta mudou de mysql.server para yourusername .mysql.pythonanywhere-services.com . Isso ignora uma parte de nossa infraestrutura que começou a mostrar problemas nas últimas semanas e deve ser muito mais eficiente e confiável do que a maneira antiga.

Portanto, você precisará atualizar seu nome de host para o valor destacado acima.

Vlad Schnakovszki
fonte
2

Acabei de ter esse problema. depois de um dia de verificação, finalmente eu tenho a resposta com que O arquivo mysql.sock é criado quando o MariaDB é iniciado e é removido quando o MariaDB é desligado. Não existirá se o MariaDB não estiver em execução. talvez você não tenha instalado o MariaDB. VOCÊ PODERIA SEGUIR AS INSTRUÇÕES ABAIXO: https://www.linode.com/docs/databases/mariadb/how-to-install-mariadb-on-centos-7 BEST

jsina
fonte
1

Eu tive esse erro de soquete e basicamente se resumiu ao fato de o MySQL não estar sendo executado. Se você executar uma instalação nova, certifique-se de instalar 1) o pacote do sistema e 2) o instalador do painel (mysql.prefPane). O instalador do painel permitirá que você vá para suas Preferências do Sistema e abra o MySQL e, em seguida, instale uma instância.

Observe que, em uma nova instalação, eu precisava reiniciar o computador para que as alterações entrassem em vigor corretamente. Após uma reinicialização, recebi uma nova instância em execução e consegui abrir uma conexão com o host local sem nenhum problema.

Além disso, eu aparentemente tinha versões anteriores do MySQL instaladas, mas removi o painel, o que facilita a execução de uma instância do MySQL para usuários de Mac.

Um bom link para esse processo de reinstalação: http://www.coolestguyplanettech.com/how-to-install-php-mysql-apache-on-os-x-10-6/

tandy
fonte