erro: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)' -- Falta /var/run/mysqld/mysqld.sock

Meu problema começou com o fato de eu não poder mais entrar como root na minha instalação do mysql. Eu estava tentando rodar o mysql sem senhas ativadas... mas sempre que eu executava o comando

# mysqld_safe --skip-grant-tables &

Eu nunca recuperaria a urgência. Eu estava tentando seguir estas instruções para recuperar a senha.

O ecrã tem este aspecto:

root@jj-SFF-PC:/usr/bin# mysqld_safe --skip-grant-tables
120816 11:40:53 mysqld_safe Logging to syslog.
120816 11:40:53 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql

e eu não't recebo uma solicitação para começar a digitar os comandos SQL para redefinir a senha.

Quando o mato pressionando CTRL + C recebo a seguinte mensagem:

error: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)'

Check that mysqld is running and that the socket: '/var/run/mysqld/mysqld.sock' exists!

Se eu repetir o comando e o deixar por tempo suficiente, recebo a seguinte série de mensagens:

root@jj-SFF-PC:/run/mysqld# 120816 13:15:02 mysqld_safe Logging to syslog.
120816 13:15:02 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
120816 13:16:42 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

[1]+  Done                    mysqld_safe --skip-grant-tables
root@jj-SFF-PC:/run/mysqld#

Mas então se eu tentar entrar como raiz, fazendo:

# mysql -u root

Eu recebo a seguinte mensagem de erro:

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

Eu verifiquei e o arquivo /var/run/mysqld/mysqld.sock não't não existe. A pasta existe, mas não o arquivo.

Também não sei se isso ajuda ou não, mas eu corri find / -name mysqld e isso veio à tona:

/var/run/mysqld - folder
/usr/sbin/mysqld - file
/run/mysqld - folder

I'sou novo no Linux e no MySQL, por isso não sei se isto é normal ou não. Mas I'm incluindo esta informação para o caso de ajudar.

Decidi finalmente desinstalar e reinstalar o mysql.

apt-get remove mysql-server
apt-get remove mysql-client
apt-get remove mysql-common
apt-get remove phpmyadmin

Depois de reinstalar todos os pacotes novamente na mesma ordem como acima, durante a instalação do phpmyadmin, eu recebi o mesmo erro:

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

Por isso, tentei desinstalar/reinstalar novamente. Desta vez, depois de desinstalar os pacotes, também renomeei manualmente todos os arquivos e diretórios do mysql para mysql.bad em suas respectivas localizações.

/var/lib/mysql 
/var/lib/mysql/mysql
/var/log/mysql
/usr/lib/perl5/DBD/mysql
/usr/lib/perl5/auto/DBD/mysql
/usr/lib/mysql
/usr/bin/mysql
/usr/share/mysql
/usr/share/dbconfig-common/internal/mysql
/etc/init.d/mysql
/etc/apparmor.d/abstractions/mysql
/etc/mysql

Depois tentei reinstalar o mysql-server e o mysql-client novamente. Mas eu'notei que ele não'não me pede uma senha. É'ele não deveria pedir uma senha de administrador?

Solução

Para encontrar todos os ficheiros de socket no seu sistema, execute:

sudo find / -type s

O meu sistema servidor Mysql tinha o socket aberto em `/var/lib/mysql/mysql.sock'.

Uma vez que você encontre onde o socket está sendo aberto, adicione ou edite a linha no seu arquivo /etc/my.cnf com o caminho para o arquivo do socket:

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

Algumas vezes o script de inicialização do sistema que lançou o executável de linha de comando especifica uma bandeira --socket=caminho. Esta flag pode sobrescrever a localização my.cnf, e isso resultaria em um socket não ser encontrado onde o arquivo my.cnf indica que ele deve estar. Então quando você tentar executar o cliente de linha de comando mysql, ele irá ler my.cnf para encontrar o socket, mas não irá encontrá-lo, pois ele se desvia de onde o servidor o criou. Então, a menos que você se importe onde o socket reside, apenas mudar o my.cnf para corresponder deve funcionar.

Então, pare o processo mysqld. Como você faz isso vai variar de acordo com o sistema.

Se você'é super usuário no sistema linux, tente um dos seguintes se você não'não conhece o método específico que sua configuração Mysql usa:

*service mysqld stop''.

  • `/etc/init.d/mysqld stop''.
  • 'mysqladmin -u root -p shutdown'
  • Alguns sistemas estão't configurados para ter uma maneira elegante de parar o mysql (ou por alguma razão mysql não responde't) e você pode forçar o término do mysql com qualquer um dos dois:
    • Um passo: pkill -9 mysqld
    • Dois passos (menos de preferência):
      • Encontrar a identificação do processo do mysql com pgrep mysql' oups aux | grep mysql | grep -v grep'.
      • Assumindo que o id do processo é 4969 termina com kill -9 4969.

Depois de fazer isso você pode querer procurar por um arquivo pid em /var/run/mysqld/ e excluí-lo

Certifique-se de que as permissões no seu socket são tais que qualquer usuário mysqld está rodando como pode ler/escrever para ele. Um teste fácil é abrir até a leitura/escrita completa e ver se ainda funciona:

chmod 777 /var/run/mysqld/mysqld.sock

Se isso resolver o problema, você pode adaptar as permissões e a propriedade do soquete conforme necessário, com base nas suas configurações de segurança.

Além disso, o diretório onde o socket reside tem que ser acessível pelo usuário executando o processo mysqld.

Comentários (13)

A solução é muito mais fácil.

  1. Primeiro, você tem que localizar(no Terminal com "sudo find / -type s") onde o seu arquivo mysql.sock está localizado. No meu caso estava em `/opt/lampp/var/mysql/mysql.sock'.
  2. Incendiar o Terminal e emitir sudo Nautilus
    Isto inicia o seu gestor de ficheiros com super privilégios de utilizador
  3. Do Nautilus navegue até onde seu arquivo mysql.sock está localizado.
  4. Clique com o botão direito do mouse no arquivo e selecione Make Link.
  5. Renomeie o Link File para mysqld.sock e clique com o botão direito do mouse no arquivo e Cortar o arquivo
  6. Vá para /var/run' e crie uma pasta chamadamysqld' e digite-a
  7. Agora clique com o botão direito do mouse e Colar o arquivo de ligação
  8. Voilá! Agora você terá um arquivo mysqld.sock em /var/run/mysqld/mysqld.sock :)
Comentários (7)

Eu enfrentei o mesmo erro e descobri que era devido a atualizações de pacotes, então depois de reiniciar o meu sistema eu resolvi o erro.

Acho que devido à atualização de bibliotecas/ pacotes sql esse erro ocorreu, então tente isso se você estiver fazendo alguma atualização :)

Comentários (1)