O MySQL falha: mysql “ERRO 1524 (HY000): O plug-in 'auth_socket' não está carregado”


126

Meu ambiente local é:

  • novo Ubuntu 16.04
  • com PHP 7
  • com o MySQL 5.7 instalado

    sudo apt-get install mysql-common mysql-server

Quando tentei acessar o MySQL (via CLI):

mysql -u root -p

Me deparei com um problema cíclico com três etapas.

1) Primeiro foi um problema de soquete

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

Solução: reiniciando o PC.

O que levou a outro erro:

2) Com acesso negado

ERROR 1698 (28000): Access denied for user 'root'@'localhost'.

Possível problema? Senha incorreta para o usuário "root"!

Solução: redefina a senha root com este tutorial .

Com senha correta e soquete de trabalho, chega o último erro.

3) Plug-in de autenticação incorreto

mysql "ERROR 1524 (HY000): Plugin 'unix_socket' is not loaded"

Aqui eu parei ou de alguma forma cheguei a 1) novamente.


1
Que bom que funciona bem para você :) obrigado por entrar em contato!
— Tomáš Votruba 22/10

Respostas:


371

Eu tenho uma solução!

Ao redefinir a senha root na etapa 2), também altere o plugin de autenticação para mysql_native_password:

use mysql;
update user set authentication_string=PASSWORD("") where User='root';
update user set plugin="mysql_native_password" where User='root';  # THIS LINE

flush privileges;
quit;

Isso me permitiu fazer login com sucesso!


Solução de código completo

1. execute comandos bash

1. primeiro, execute estes comandos bash

sudo /etc/init.d/mysql stop # stop mysql service
sudo mysqld_safe --skip-grant-tables & # start mysql without password
# enter -> go
mysql -uroot # connect to mysql

2. execute os comandos mysql => copie e cole para o cli manualmente

use mysql; # use mysql table
update user set authentication_string=PASSWORD("") where User='root'; # update password to nothing
update user set plugin="mysql_native_password" where User='root'; # set password resolving to default mechanism for root user

flush privileges;
quit;

3. execute mais comandos bash

sudo /etc/init.d/mysql stop 
sudo /etc/init.d/mysql start # reset mysql
# try login to database, just press enter at password prompt because your password is now blank
mysql -u root -p 

4. Problema de soquete (de seus comentários)

Quando você vê um erro de soquete , uma comunidade veio com 2 soluções possíveis:

sudo mkdir -p /var/run/mysqld; sudo chown mysql /var/run/mysqld
sudo mysqld_safe --skip-grant-tables &

(graças a @Cerin)

Ou

mkdir -p /var/run/mysqld && chown mysql:mysql /var/run/mysqld  

(graças a @Peter Dvukhrechensky)


Caminhos cegos e possíveis erros de borda

Use 127.0.0.1 em vez de localhost

mysql -uroot # "-hlocalhost" is default

Pode levar a "arquivo ausente" ou erro slt.

mysql -uroot -h127.0.0.1

Funciona melhor.

Ignorar a questão do soquete

Encontrei várias maneiras de criar mysqld.sockarquivos, alterar direitos de acesso ou vincular-os a links simbólicos. Afinal, não era esse o problema.

Ignorar o my.cnfarquivo

A questão também não estava lá. Se você não tiver certeza, isso pode ajudá-lo .


3
Obrigado por isso. Esta também é uma excelente resposta sobre como redefinir o passe root do mysql, para que você possa editar um pouco o título para ajudá-lo a aparecer antes que já tenhamos encontrado o problema do soquete.
— Wtower 22/08/16

1
Estou feliz que ajudou. Como você editaria o título para manter a mensagem de origem? Entendo que a solução requer a redefinição da senha, mas não resolve o problema no título. Esta é uma falha mais complexa de mais pontos. Para redefinir a senha root, eu iria aqui: stackoverflow.com/a/6401963/1348344
— Tomáš Votruba

1
@matanster Não, na verdade, isso é puro passo-a-passo de falha de teste construído. Qual SO você usa?
— Tomáš Votruba

8
Sua chamada mysqld_safe está incorreta. Em vez disso, você precisa executar:sudo mkdir -p /var/run/mysqld; sudo chown mysql /var/run/mysqld; sudo mysqld_safe --skip-grant-tables &
— Cerin

3
Adicione uma solução possível do problema do soquete à resposta. Como este mkdir -p /var/run/mysqld && chown mysql:mysql /var/run/mysqldPode economizar tempo de alguém
— Peter Dvukhrechensky

41

Você pode tentar da seguinte forma que funciona para mim.

Iniciar servidor:

sudo service mysql start

Agora, vá para a pasta meia:

cd /var/run

Faça backup da meia:

sudo cp -rp ./mysqld ./mysqld.bak

Pare o servidor:

sudo service mysql stop

Restaure a meia:

sudo mv ./mysqld.bak ./mysqld

Inicie o mysqld_safe:

 sudo mysqld_safe --skip-grant-tables --skip-networking &

Shell inicial do mysql:

 mysql -u root

Mudar senha:

Portanto, primeiro escolha o banco de dados

mysql> use mysql;

Agora digite abaixo duas consultas:

mysql> update user set authentication_string=password('123456') where user='root';
mysql> update user set plugin="mysql_native_password" where User='root'; 

Agora, tudo ficará bem.

mysql> flush privileges;
mysql> quit;

Para verificação:

mysql -u root -p

feito!

N.B, After login please change the password again from phpmyadmin

Agora verifica hostname/phpmyadmin

Username: root

Password: 123456

Para mais detalhes, consulte Como redefinir a senha esquecida phpmyadmin no Ubuntu


2
só isso funciona para mim! backup e restauração soquete é muito inteligente
— touhid udoy

1
ERRO 1045 (28000): acesso negado para o usuário 'root' @ 'localhost' (usando a senha: YES) antes do "done!" na sua resposta ao tentar fazer login com 123456.
— trainoasis

Eu resolvi fazer as etapas descritas no phpmyadmin (por exemplo, alterar senha, alterar plugin). Por alguma razão, 'definir authentication_string = senha (...)' fez com que parasse de funcionar (Erro 1045 (28000): acesso negado ...).
— Fil

12

O mysqlcomando por padrão usa soquetes UNIX para conectar-se ao MySQL.

Se você estiver usando o MariaDB, precisará carregar o Plug - in de autenticação de soquete Unix no lado do servidor.

Você pode fazer isso editando a [mysqld]configuração da seguinte maneira:

[mysqld]
plugin-load-add = auth_socket.so

Dependendo da distribuição, o arquivo de configuração geralmente está localizado em /etc/mysql/ou/usr/local/etc/mysql/


1
Este. Todas as outras respostas explicam como solucionar o erro. Este explica como resolvê-lo.
— Envia

Se você estiver no MariaDB 10.4.3 e posterior, o plug-in de autenticação unix_socket deve ser instalado por padrão, mas se você o referenciar incorretamente como plugin = "auth_socket", em vez de plugin = "unix_socket" ao atualizar seu "usuário", você receberá esta mensagem algo enganosa. Minha resposta explica como eu estraguei tudo.
— Rohn Adams

9

Você pode tentar estas etapas:

Parar o Serviço Mysql sudo /etc/init.d/mysql stop

Efetue login como root sem senha sudo mysqld_safe --skip-grant-tables &

Após o login no terminal mysql, você deve executar mais os comandos:

use mysql;

UPDATE mysql.user SET authentication_string=PASSWORD('solutionclub3@*^G'), plugin='mysql_native_password' WHERE User='root';

flush privileges;

sudo mysqladmin -u root -p -S /var/run/mysqld/mysqld.sock shutdown

Depois de reiniciar o servidor mysql Se você ainda está enfrentando um erro, deve visitar: Redefinir a senha root do MySQL 5.7 Ubuntu 16.04


8

Para Ubuntu 18.04 e mysql 5.7

  • passo 1: sudo mkdir /var/run/mysqld;

    passo 2: sudo chown mysql /var/run/mysqld

    Etapa 3: sudo mysqld_safe --skip-grant-tables& Sair (use Sair se estiver preso)

faça o login no mysql sem senha

  • Passo 4: sudo mysql --user=root mysql

    passo 5: SELECT user,authentication_string,plugin,host FROM mysql.user;

    passo 6: ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root'

agora entre com

  • mysql -u root -p <root>

1
mas em que etapa posso definir o passe para root? porque eu tentei, $ mysql -u root -pmas o acesso negado ainda. Access denied for user 'root'@'localhost' (using password: YES)Eu tentei digitar a senha 'SIM'
— AlexNikonov 12/08/19

4

Experimente: sudo mysql_secure_installation

Trabalhos no Ubuntu 18.04


1

Caso alguém chegue aqui depois de cometer o mesmo erro, eu cometi:

  1. Mudou para plugin="mysql_native_password"temporariamente. Realizei minhas tarefas.
  2. Tentou voltar ao plug-in "auth_socket", mas referenciou-o incorretamente como o plugin="auth_socket"que resultou emmysql "ERROR 1524 (HY000): Plugin 'auth_socket' is not loaded"
  3. Na falta de uma maneira de fazer login para corrigir esse erro, fui forçado a parar o mysql e usar mysql_safepara ignorar a autenticação para mudar para o plug-in apropriadoplugin="unix_socket"

Espero que isso poupe algum tempo se alguém receber a mensagem de erro do pôster original, mas a verdadeira causa foi usar o nome do plug-in, na verdade não falta a existência do próprio plugin "auth_socket", que de acordo com a documentação do MariaDB :

No MariaDB 10.4.3 e posterior, o plug-in de autenticação unix_socket é instalado por padrão e é usado pela conta de usuário 'root' @ 'localhost' por padrão.


-7

Você pode tentar com os comandos abaixo:

hduser@master:~$ sudo /etc/init.d/mysql stop
[ ok ] Stopping mysql (via systemctl): mysql.service.
hduser@master:~$ sudo /etc/init.d/mysql start
[ ok ] Starting mysql (via systemctl): mysql.service.

Você pode explicar isso mais? Como reiniciar o servidor resolve a mensagem de erro fornecida?
— Nico Haase
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.