ERRO 2002 (HY000): Não é possível conectar ao servidor MySQL local através do soquete '/var/run/mysqld/mysqld.sock' (2)

441

Instalei o LAMP no Ubuntu 12.04 LTS (Precise Pangolin) e, em seguida, defina a senha de root no phpMyAdmin . Esqueci a senha e agora não consigo fazer o login. Quando tento alterar a senha pelo terminal, recebo:

ERRO 2002 (HY000): Não é possível conectar ao servidor MySQL local através do soquete '/var/run/mysqld/mysqld.sock' (2)

Como posso consertar isso? Não consigo abrir o LAMP, desinstalá-lo ou reinstalá-lo.

sushmit sarmah
fonte
Provavelmente reinstalar é mais fácil: stackoverflow.com/a/31984482/763744
Zernel 13/08/2015
Redefinir a senha por parar MySQL e iniciá-lo em modo de segurança ignorando as mesas --grant
davejal
digite isto no seu terminal "sudo apt-get install mysql-server"
Humphrey
Inicie ou reinicie o serviço mysql e verifique. sudo /etc/init.d/mysql start ou sudo /etc/init.d/mysql restart
Jitendra Patel
systemctl start mariadb.service
Thewebus

Respostas:

253

Certa vez, tive esse problema e o resolvi instalando mysql-server, portanto, certifique-se de ter instalado o mysql-server, não o mysql-clientou qualquer outra coisa.

Esse erro significa que o arquivo /var/run/mysqld/mysqld.socknão existe; se você não instalou mysql-server, o arquivo não existiria. Portanto, nesse caso, instale-o com

sudo apt-get install mysql-server

Mas se o mysql-serverjá estiver instalado e em execução, você precisará verificar os arquivos de configuração.

Os arquivos de configuração são:

/etc/my.cnf
/etc/mysql/my.cnf
/var/lib/mysql/my.cnf

Em /etc/my.cnf, a configuração do arquivo de soquete pode ser /tmp/mysql.socke na /etc/mysql/my.cnfconfiguração do arquivo de soquete pode ser /var/run/mysqld/mysqld.sock. Então, remova ou renomeie /etc/mysql/my.cnf, deixe o mysql usar /etc/my.cnf, e o problema poderá ser resolvido.

rebocar
fonte
Você pode ter o daemon mysql em execução e o mysql-server-core instalado, mas você precisa instalar o mysql-server, que é os binários E a configuração do banco de dados do sistema!
quer
99
sudo apt-get install mysql-serverinstalar o mysql no ubuntu
towry
9
Se eu tivesse que explicar tecnicamente, eu diria 1) Se você estiver executando "mysql -u <nome_do_usuário> -h <Endereço_Servidor_Servidor_SQL> -p", na verdade você está executando o cliente mysql para acessar o servidor mysql. Se você não possui o servidor mysql instalado no endereço / endereço IP mencionado com '-h', o erro acima será exibido. Isso ocorre porque não é possível conectar-se ao servidor MySQL através do soquete mysql.sock 2) Se o servidor MySQL já estiver instalado, ele deverá estar em execução. Caso contrário, você observará o mesmo erro. Portanto, execute-o no servidor que você especificou.
Mayur Nagekar
1
Isso também pode ocorrer se você tentar alterar o diretório em que o banco de dados está armazenado, mas imputar o diretório errado no arquivo de configuração (como um erro de digitação). Em vez de informar que o diretório de erros de digitação não existe, ele informará que você não tem permissão para acessá-lo.
Michael
4
Como primeiro passo, eu recomendaria uma tentativa de reiniciar o processo do servidor (consulte as distinções de servidor versus cliente). Tente sudo /etc/init.d/mysql restart. Normalmente, a reinstalação não é necessária. Eu recomendo que você verifique primeiro os arquivos de log. Não apenas o arquivo de log do mysql, mas também o / var / log / syslog, pois você pode ter sofrido uma falha no servidor, causando o mysql quebrar como um efeito colateral.
Rein
212

Tente o seguinte:

mysql -h 127.0.0.1 -P 3306 -u root -p <database>

Também (para ver se está em execução):

telnet 127.0.0.1 3306 

Provavelmente é apenas uma configuração incorreta no my.cnfarquivo, em /etc/somewhere(dependendo da distribuição do Linux ).

Yannick
fonte
1
Estou recebendo o mesmo erro. E eu verifiquei e a ligação padrão no main e no my.cnf já está definida para 127.0.0.1. No entanto, o uso do seu comando acima me permitiu conectar. Terá que continuar caçando para ver por que apenas fazer "mysql" está dando o erro.
27413
1
Recebo telnet: Não foi possível conectar ao host remoto: conexão recusada como resultado do comando telnet. No entanto, o apache ainda funciona porque eu sou capaz de abrir o host local
Rishi Dua
@chiera Você sabe, eu não tive esse erro antes. Mas quando eu queria me conectar ao meu db através de um aplicativo iOS usando o túnel ssh, recebi esse erro de 2013. Para resolvê-lo, tive que editar /etc/my.cnfe comentar a #bind-address = 127.0.0.1 Referência 1 Referência 2 . Então eu poderia me conectar. Depois disso, percebi que estava recebendo agora esse erro de 2002, que me levou a esta resposta e agora está funcionando novamente. Definitivamente, concordo com você, obtendo uma explicação sobre o motivo de apenas digitar mysqlsem -hgerar um erro.
Pathros
Nota: mysql -h localhostnão funciona. Certifique-se de usar mysql -h 127.0.0.1como especificado na resposta.
precisa saber é o seguinte
Como posso resolver isso se conseguir fazer login com o comando nesta resposta?
Carlos A. Jimenez Holmquist
128

Estou vendo todas essas respostas, mas nenhuma oferece a opção de redefinir a senha e nenhuma resposta aceita . A questão real é que ele esqueceu sua senha, então ele precisa redefinir, para não ver se está em execução ou não (instalado ou não), como a maioria dessas respostas implica.


Para redefinir a senha

Siga estas etapas (pode ser útil se você realmente esquecer sua senha e puder testá-la a qualquer momento, mesmo se não estiver na situação no momento):

  1. Pare mysql

    sudo /etc/init.d/mysql stop

    Ou para outras versões de distribuição:

    sudo /etc/init.d/mysqld stop
  2. Inicie o MySQL no modo de segurança

    sudo mysqld_safe --skip-grant-tables &
  3. Entre no MySQL usando root

    mysql -uroot
  4. Selecione o banco de dados MySQL para usar

    use mysql;
  5. Redefinir a senha

    -- MySQL version < 5.7
    update user set password=PASSWORD("mynewpassword") where User='root';
    
    -- MySQL 5.7, mysql.user table "password" field -> "authentication_string"
    
    update user set authentication_string=password('mynewpassword') where user='root';
    
  6. Liberar os privilégios

    flush privileges;
  7. Reinicie o servidor

    quit
  8. Pare e inicie o servidor novamente

    Ubuntu e Debian:

    sudo /etc/init.d/mysql stop
    ...
    sudo /etc/init.d/mysql start
    

    No CentOS, Fedora e RHEL:

    sudo /etc/init.d/mysqld stop
    ...
    sudo /etc/init.d/mysqld start
    
  9. Entre com uma nova senha

    mysql -u root -p
  10. Digite a nova senha e aproveite seu servidor novamente como se nada tivesse acontecido

Isso foi retirado de Redefinir uma senha root do MySQL .

davejal
fonte
Atualizar a senha dos usuários não funcionou para mim, no entanto, uma vez logado no monitor MySQL e tendo usado o banco de dados mysql, repair table user use_frmtrabalhou para mim resolver este problema. - stackoverflow.com/questions/4297592/...
Craig van Tonder
20
No MySQL 5.7, o campo de senha no campo tabela mysql.user foi removido, agora o nome do campo é 'authentication_string', então (5) deve serupdate user set authentication_string=password('mynewpassword') where user='root';
Daniel
Você saberia uma maneira de fazer disso um script bash? Parece que preciso sempre que reinicio a caixa.
vphilipnyc
Algo me diz que você deseja uma solução alternativa, mas na verdade você deve tentar descobrir por que precisa fazer isso todas as vezes e corrigir isso. Quanto ao roteiro fazer uma nova pergunta e postar o que você já tentou, talvez alguns outros poderiam ajudar
davejal
2
Isso funcionou muito bem para mim, mas eu tive de implementar esta solução: stackoverflow.com/questions/42153059/...
Andrew Fox
68

Eu tentei os seguintes passos:

  1. Faça login como super userou usesudo
  2. Abrir /etc/mysql/my.cnfusando o gedit
  3. Localize bind-addresse altere seu valor para o endereço IP da máquina host do servidor de banco de dados. Para mim, foi localhostou127.0.0.1
  4. Salve e feche o arquivo.
  5. Volte ao terminal e execute sudo service mysql start

E funcionou para mim.

rshahriar
fonte
4
A partir disso, executei o serviço sudo mysql restart e funcionou.
Orane
No meu caso, o erro foi o IP alterado, por isso defino o endereço de vinculação = localhost
Nicolás Arias
@rshahriar não há nada chamado como bind-address em minha /etc/my.cnf é uma boa idéia para adicionar o campo
RCBian
@ SilvioDelgado Não, se você quiser se conectar através do tunelamento ssh. Explicação aqui
Pathros
reiniciando o serviço mysql trabalhou para mim também, mas ainda não tem certeza onde encontrar o log de erro, a fim de descobrir a causa e tentar impedir que isso aconteça de novo ...
Maleka
41

Corrigi esse problema executando o seguinte comando:

mysql.server start

E se você estiver em um mac e usou o brew para instalar o mysql, basta usar:

brew services start mysql
sbodanis
fonte
35

Eu tive um problema parecido. o mysql não inicia:

sudo service mysql start
start: Job failed to start

Se eu desabilitei o apparmor:

sudo aa-complain /etc/apparmor.d/*

o problema foi embora. O problema foi que o mysqld estava tentando acessar /run/mysqld/mysqld.sock, mas o perfil apparmor apenas deu permissão para /var/run/mysqld/mysqld.sock (/ var / run está simbolicamente ligado a / run, portanto, eles são realmente o mesmo). Não sei por que o mysqld não está usando o caminho var, pois é o que está definido em todos os arquivos de configuração, mas você pode corrigir o problema adicionando o seguinte ao /etc/apparmor.d/usr.sbin.mysqld

/run/mysqld/mysqld.pid rw,
/run/mysqld/mysqld.sock rw,
dkoes
fonte
Eu não sabia que tinha que chamar "sudo service mysql start". A última vez que instalei o MySQL no Ubuntu, acho que ele foi iniciado automaticamente na instalação. O MariaDB no Manjaro requer que o serviço seja iniciado explicitamente após a instalação.
precisa saber é o seguinte
31

No meu caso, foi que o disco estava cheio e o mysqld não pôde mais ser iniciado.

Tente reiniciar o serviço mysql.

> service mysql restart

ou

> service mysql stop

> service mysql start

Se ele não reconhecer o stopcomando, é definitivamente o espaço em disco. Você deve deixar algum espaço na partição mysqlalocada ou aumentar o disco.

Verifique o espaço em disco com

> df -h
Martin Schultz
fonte
2
A mesma coisa aconteceu comigo - disco completo. Limpou algum espaço, reiniciou e o problema desapareceu.
Darren
2
Se esse é o seu problema execução: "/etc/init.d/mysqld começar" irá dizer-lhe a sua partição de disco está cheio
Tickon
O mesmo para mim, disco 100%. Espaço limpo e iniciar serviço ok
Hugo
28

Eu resolvi isso matando o mysqlprocesso:

ps -ef | grep mysql
kill [the id]

E então eu iniciei o servidor novamente com:

sudo /etc/init.d/mysql restart

Mas startfunciona também:

sudo /etc/init.d/mysql start

Então entrei como admine estava pronto.

Wartari
fonte
bem, na verdade eu estava abortando o mysql antes que ele falhasse. Então eu recebo "* Por favor, dê uma olhada no syslog." e "ERRO 2002 (HY000): Não é possível conectar ao servidor MySQL local através do soquete '/var/run/mysqld/mysqld.sock' (111)". Finalmente, percebo que ele está tentando se recuperar, então eu o mato e o reinicio.
cwhsu
Existem situações (raras) em que "mysql start" falhará, portanto você precisa usar o argumento "restart". Se você precisar matar um processo daemon, é melhor usar o argumento "stop" em vez do comando kill. No entanto, o comando killall é mais conveniente que o comando kill (killall mysqld).
Rein
Matar processo MySQL e reiniciando MySQL trabalhou para mim, agradável
Vishal Shetty
21

De alguma forma, o processo do servidor MySQL não criou o soquete ou o cliente está procurando o soquete no lugar errado.

Minha primeira sugestão seria verificar se o servidor MySQL está sendo executado. A segunda sugestão pode ser: o servidor MySQL está sendo executado em outro host? Nesse caso, adicione a -h <hostname>flag ao seu cliente MySQL no terminal.

Se o MySQL está realmente rodando, e rodando localmente, verifique seu my.cnfarquivo. Deve haver uma linha como

socket = /var/run/mysqld/mysqld.sock

Veja se isso corresponde ao local do soquete que você mencionou na sua postagem.

Por experiência, eu diria que o cenário mais provável é o seu servidor MySQL ou não está sendo executado ou não está no mesmo host em que você executa o seu cliente MySQL a partir do terminal.

Wouter
fonte
19

Acabei de experimentar o mesmo problema depois que tive que reiniciar meu servidor de produção. Estou executando o Debian 8.1 (Jessie) em um droplet DigitalOcean.

Isto é o que eu fiz para resolver meu problema:

  1. Verifique se o arquivo /var/run/mysqld/mysqld.sockexiste. Caso contrário, crie-o manualmente digitando touch /var/run/mysqld/mysqld.sock(que é o que eu precisava fazer).

  2. Portanto, o processo MySQL pode usar esse arquivo. Altere a propriedade do arquivo digitando chown mysql /var/run/mysqld/mysqld.sock.

  3. Depois que o '2' estiver pronto, reinicie o serviço MySQL digitando service mysql restartou /etc/init.d/mysql restart.

Depois de seguir as etapas acima, meu problema foi resolvido. Raramente tenho esse problema e provavelmente existe uma maneira melhor; portanto, forneça feedback construtivo, se necessário :).

Roubar
fonte
1
Notei que o arquivo não estava lá e apenas reiniciei o servidor mysql. Ele criou automaticamente o arquivo e iniciou-se bem. Obrigado pela liderança.
Sojurn
15

Seu servidor mysql pode não estar em execução. Verifique se ele funciona digitando mysql.server startno terminal.

Moses Wasswa
fonte
15

Verifique o "bind-adress"parâmetro em my.cnf.

Caso contrário, tente com o comando:

mysql -h 127.0.0.1 -P 3306 -u root -p
  • -h para host 127.0.0.1, ou seja, localhost

  • -P (observe -P como maiúscula) para a porta 3306, ou seja, a porta padrão para o MySQL

Amit Girme
fonte
11

Aqui está o que funcionou para mim:

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

Isso cria um link.

Do utilizador
fonte
Não funcionou para mim :( Este creats um link simbólico entre as duas pastas askubuntu.com/a/56340/242873
Michael
11

Se você estiver usando o Amazon EC2 e tiver esse problema na instância, precisará fazer o seguinte:

sudo yum install mysql-server
sudo service mysqld restart

O Amazon EC2 não possui um servidor instalado (apenas o cliente está instalado); portanto, é necessário instalá-lo na sua instância e, em seguida, tente

 mysql -u root -p

para verificar se funcionou.

Murtaza Kanchwala
fonte
Falha ao reiniciar o mysqld.service: Unidade mysqld.service não encontrada. No Ubuntu 16.04
Ketav Chotaliya
9

Eu acho que sempre que você receber o erro

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

Eu recomendarei primeiro verificar se o seu mysqldaemon está em execução ... Na maioria das vezes, ele não será executado por padrão. Você pode conferir por /etc/init.d/mysqld status.

Se não estiver em execução, inicie-o primeiro:

.../etc/init.d/mysqld start.

Aposto que 110% funcionará.

vikash kumar singh
fonte
9

Em vez de usar localhost:

mysql -u myuser -pmypassword -h localhost mydatabase

Use 127.0.0.1

mysql -u myuser -pmypassword -h 127.0.0.1 mydatabase

(observe também, não há espaço entre -p e minha senha)

Desfrutar :)

mpinvidio
fonte
Você também não pode incluir sua senha na linha de comando para segurança usando esta linha: mysql -u myuser -p -h 127.0.0.1 mydatabase O MySQL solicitará sua senha e não a ecoará.
DDay
1
Isso resolveu para mim. No entanto, ainda me pergunto por que 127.0.0.1funciona enquanto localhostnão funciona ?!
not2savvy
9

Verifique se você possui backups de bancos de dados importantes e tente desinstalar coisas relacionadas ao MySQL :

apt-get remove --purge mysql\*

Em seguida, instale-o novamente :

apt-get install mysql-server mysql-client

Isso funcionou para mim e os dados foram mantidos.

Se o PHP MySQL mostrar erros, talvez seja necessário reinstalar o PHP MySQL :

apt-get install php5-fpm php5-mysql
user3162468
fonte
Eu acho que é a arma fatal. Eu tentei de tudo, mas apenas sua proposta foi o que me ajudou. Obrigado !
Messou 26/10/19
9

Eu também estou enfrentando o mesmo problema que ocorrerá se o seu mysql servernão estiver sendo executado por padrão; ele será interrompido novamente após alguns segundos, para que você execute novamente o $ sudo service mysql start comando ( ), que poderá ser alterado, se souber.

para esse comando use

$ sudo service mysql start   

(insira a senha do usuário, se necessário, porque usamos sudo) e execute

$ sudo mysql -u root -p          (put user password if required )

agora você tem seu banco de dados

Roko
fonte
7

Se sua instalação foi recente, você deve confirmar se a instalação é o SERVIDOR de instalação ... como mysql-server-5.5 .. Talvez você tenha instalado apenas "mysql" .. este é apenas o cliente em vez do servidor.

Leandro Souza
fonte
7

Se você possui o XAMPP instalado em sua máquina Linux, tente copiar seu my.cnfarquivo de /opt/lampp/etc/my.cnfpara /etc/my.cnf.

Em seguida, execute o mysql -u rootnovamente ... Agora você deve ter o soquete correto e poder executar o cliente MySQL.

Toni Widiarto
fonte
7

Eu também tenho esse problema, mas acabei de:

sudo service mysql restart 

Funcionou para mim.

Kenny Ong
fonte
7

ENCONTREI A SOLUÇÃO

Antes de disparar o comando:mysql_secure_installation

  • Passo 1: sudo systemctl stop mariadb
  • Passo 2: sudo systemctl start mariadb
  • Etapa 3: mysql_secure_installation

Em seguida, ele solicitará a senha root e você pode simplesmente pressionar Enter e definir sua nova senha root.

sagar mahajan
fonte
6

No meu caso, a porta padrão 3306 estava sendo usada por algum outro processo e, portanto, não estava iniciando. Depois que eu parei o outro serviço e o fiz sudo service mysql start, funcionou bem. BTW, você pode usar algo como sudo lsof -Pn -iTCP:3306para ver quem pode estar usando a porta.

Bhaskar
fonte
6

No meu caso, funcionou fazendo P&D:

Eu consigo conectar ao MySQL usando

root-debian#mysql -h 127.0.0.1 -u root -p

Mas não está funcionando mysql -u root -p.

Não encontrei nenhum bind-addressno my.cnf . Por isso, superei o parâmetro socket=/var/lib/mysql/mysqld.sockno my.cnfqual estava me causando um problema com o login.

Depois de reiniciar o serviço, tudo correu bem:

root@debian:~# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.6.19 MySQL Community Server (GPL)
Swapna Kumar
fonte
6

eu resolvi esse problema com o mysql restart

/etc/init.d/mysql stop

e

/etc/init.d/mysql start

é isso aí.

Jazuly
fonte
5

Por experiência, digo que você precisa verificar se o servidor está rodando primeiro e depois tentar configurar o MySQL. A última solução é reinstalar o MySQL.

elmaazouz
fonte
5

Abra o terminal e digite:

sudo apt-get purge mysql-client-core-5.6

sudo apt-get autoremove

sudo apt-get autoclean

sudo apt-get install mysql-client-core-5.5

sudo apt-get install mysql-server  

O cliente principal do banco de dados MySQL e os pacotes MySQL Server serão da mesma versão 5.5. O MySQL Client 5.5 e o MySQL Server 5.5 são as atuais "melhores" versões desses pacotes no Ubuntu 14.04, conforme determinado pelos mantenedores de pacotes.

Se você preferir instalar o MySQL Client 5.6 e o ​​MySQL Server 5.6, também poderá encontrar os pacotes mysql-client-core-5.6 e mysql-server-5.6 no Ubuntu Software Center. O importante é que os números de versão do cliente e do servidor correspondam nos dois casos.

Isso funcionou para mim.

Akshay
fonte
5

Verifique se você possui os direitos corretos:

sudo chmod 755 /var/lib/mysql/mysql

Eu tive os mesmos problemas e isso funcionou para mim. Depois disso, pude iniciar o MySQL.

user3599321
fonte
5

No meu caso, parece que não consegui realmente matar o processo mysql, quando executo

sudo service mysql stop
ps -ef | grep mysql

O processo mysql estava sempre lá, parece que estava bloqueando o arquivo de soquete e o novo processo mysql não foi capaz de criá-lo.

então isso ajudou

cd /var/run
sudo cp mysqld/ mysqld.bc -rf
sudo chown mysql:mysql mysqld.bc/
sudo service mysql stop
sudo cp mysqld.bc/ mysqld -rf
sudo chown mysql:mysql mysqld -R
sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking &

Agora consigo fazer login no banco de dados usando

mysql -u root

Em seguida, para atualizar a senha root:

UPDATE user SET authentication_string=password('YOURPASSWORDHERE') WHERE user='root';
FLUSH PRIVILEGES;

PS : tive problemas para atualizar o root passwod, parece um problema com o plugin "auth_socket", então tive que criar um novo usuário com privilégios totais

insert into user set `Host` = "localhost", `User` = "super", `plugin` = "mysql_native_password", `authentication_string` = NULL, `password_expired` = "N", `password_lifetime` = NULL, `account_locked` = "N", `Select_priv` = "Y",
`Insert_priv` = "Y", `Update_priv` = "Y", `Delete_priv` = "Y", `Create_priv` = "Y", `Drop_priv` = "Y", `Reload_priv` = "Y", `Shutdown_priv` = "Y", `Process_priv` = "Y", `File_priv` = "Y",
`Grant_priv` = "Y",  `References_priv` = "Y", `Index_priv` = "Y", `Alter_priv` = "Y", `Show_db_priv` = "Y", `Super_priv` = "Y", `Create_tmp_table_priv` = "Y", `Lock_tables_priv` = "Y",
`Execute_priv` = "Y", `Repl_slave_priv` = "Y",  `Repl_client_priv` = "Y",  `Create_view_priv` = "Y", `Show_view_priv` = "Y", `Create_routine_priv` = "Y", `Alter_routine_priv` = "Y",
`Create_user_priv` = "Y",  `Event_priv` = "Y", `Trigger_priv` = "Y", `Create_tablespace_priv` = "Y";

Isso cria o usuário "super" sem senha e você pode se conectar com mysql -u super

Buksy
fonte
obrigado pela resposta e consigo logar no mysql, mas não há tabela de usuário em meus bancos de dados.
John Joe
Esta solução funciona. Porém, antes de executar a instrução sql para alterar a senha do root, você precisa selecionar um banco de dados. Execute a seguinte instrução <br> use mysql;<br> e agora você pode usar <br>UPDATE user SET authentication_string=password('YOURPASSWORDHERE') WHERE user='root'; FLUSH PRIVILEGES;
Charle K.
5

No servidor Debian Jessie, minha solução de trabalho era simplesmente fazer

service mysql restart
service mysql reload

como usuário root

Thomas Webber
fonte