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.

Tomáš Votruba
fonte
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 .

Tomáš Votruba
fonte
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

Bablu Ahmed
fonte
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/

rustyx
fonte
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

Inderpal Singh
fonte
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>
arunava maiti
fonte
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

Gorcer
fonte
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.

Rohn Adams
fonte
-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.
genghenggao
fonte
Você pode explicar isso mais? Como reiniciar o servidor resolve a mensagem de erro fornecida?
Nico Haase