MySQL non riesce su: mysql "ERROR 1524 (HY000): Plugin 'auth_socket' non è caricato"


128

Il mio ambiente locale è:

  • Ubuntu 16.04
  • con PHP 7
  • con MySQL 5.7 installato

    sudo apt-get install mysql-common mysql-server

Quando ho provato ad accedere a MySQL (tramite CLI):

mysql -u root -p

Mi sono imbattuto in un problema ciclico con 3 passaggi.

1) Il primo era un problema con il socket

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

Soluzione: riavvio del PC.

Che ha portato a un altro errore:

2) Con accesso negato

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

Possibile problema? Password sbagliata per l'utente "root"!

Soluzione: reimposta la password di root con questo tutorial .

Con la password corretta e il socket funzionante, arriva l'ultimo errore.

3) Plugin di autenticazione errato

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

Qui mi sono fermato o in qualche modo sono riuscito a 1) di nuovo.


1
Sono contento che funzioni bene per te :) grazie per averci contattato!
Tomáš Votruba

Risposte:


374

Ho una soluzione!

Quando si reimposta la password di root al passaggio 2), modificare anche il plug-in di autenticazione in 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;

Questo mi ha permesso di accedere con successo!


Soluzione di codice completo

1. eseguire comandi bash

1. per prima cosa, esegui questi comandi 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. quindi eseguire i comandi mysql => copia e incolla questo su 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. eseguire più comandi 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 socket (dai tuoi commenti)

Quando vedi un errore di socket , una comunità è arrivata con 2 possibili soluzioni:

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

(grazie a @Cerin)

O

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

(grazie a @Peter Dvukhrechensky)


Percorsi ciechi e possibili errori di bordo

Usa 127.0.0.1 invece di localhost

mysql -uroot # "-hlocalhost" is default

Può portare a "file mancante" o errore slt.

mysql -uroot -h127.0.0.1

Funziona meglio.

Salta il problema del socket

Ho trovato molti modi per creare mysqld.sockfile, modificare i diritti di accesso o collegarlo simbolicamente. Non era il problema, dopotutto.

Salta il my.cnffile

Anche il problema non c'era. Se non sei sicuro, questo potrebbe aiutarti .


3
Grazie per questo. Questa è anche un'ottima risposta su come reimpostare il passaggio di root di mysql, quindi potresti voler modificare leggermente il titolo per aiutarlo a venire fuori prima che ci imbattiamo già nel problema del socket.
Wtower

1
Sono contento che abbia aiutato. Come modificheresti il ​​titolo per mantenere il messaggio di origine? Capisco che la soluzione richieda di reimpostare la password, ma non risolve il problema nel titolo. Questo è un fallimento più complesso di più punti. Per la reimpostazione della password di root, mi piacerebbe andare qui: stackoverflow.com/a/6401963/1348344
Tomáš Votruba

1
@matanster Non proprio, questo è un tentativo fallito passo dopo passo costruito. Che sistema operativo usi?
Tomáš Votruba

8
La tua chiamata mysqld_safe non è corretta. Devi invece correre:sudo mkdir -p /var/run/mysqld; sudo chown mysql /var/run/mysqld; sudo mysqld_safe --skip-grant-tables &
Cerin

3
Si prega di aggiungere una possibile soluzione del problema del socket alla risposta. Come questo mkdir -p /var/run/mysqld && chown mysql:mysql /var/run/mysqldPotrebbe far risparmiare tempo a qualcuno
Peter Dvukhrechensky

41

Puoi provare come segue per me funziona.

Avvia server:

sudo service mysql start

Ora vai alla cartella del calzino:

cd /var/run

Esegui il backup del calzino:

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

Arresta server:

sudo service mysql stop

Ripristina il calzino:

sudo mv ./mysqld.bak ./mysqld

Avvia mysqld_safe:

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

Iniziare la shell mysql:

 mysql -u root

Cambia la password:

Quindi, prima scegli il database

mysql> use mysql;

Ora inserisci di seguito due query:

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

Adesso andrà tutto bene.

mysql> flush privileges;
mysql> quit;

Per controllare:

mysql -u root -p

fatto!

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

Adesso controlla hostname/phpmyadmin

Username: root

Password: 123456

Per maggiori dettagli, controlla Come reimpostare la password dimenticata phpmyadmin in Ubuntu


2
solo questo funziona per me! il socket di backup e ripristino è piuttosto intelligente
touhid udoy

1
ERRORE 1045 (28000): Accesso negato per l'utente 'root' @ 'localhost' (utilizzando la password: YES) prima del "fatto!" riga nella risposta quando si tenta di accedere con
123456.

Ho risolto facendo i passaggi descritti in phpmyadmin (cioè cambia password, cambia plugin). Per qualche motivo "set authentication_string = password (...)" ha fatto smettere di funzionare (Errore 1045 (28000): Accesso negato ...).
Fil

12

Il mysqlcomando per impostazione predefinita utilizza socket UNIX per connettersi a MySQL.

Se stai usando MariaDB, devi caricare il plugin Unix Socket Authentication sul lato server.

Puoi farlo modificando la [mysqld]configurazione in questo modo:

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

A seconda della distribuzione, il file di configurazione si trova solitamente in /etc/mysql/o/usr/local/etc/mysql/


1
Questo. Tutte le altre risposte spiegano come aggirare l'errore. Questo spiega come RISOLVERLO.
Envite

Se sei su MariaDB 10.4.3 e versioni successive, il plug-in di autenticazione unix_socket dovrebbe essere installato per impostazione predefinita, ma se lo fai riferimento erroneamente come plugin = "auth_socket", invece di plugin = "unix_socket" quando aggiorni il tuo "utente", riceverà questo messaggio alquanto fuorviante. La mia risposta spiega come ho sbagliato tutto.
Rohn Adams

9

Puoi provare questi alcuni passaggi:

Interrompi il servizio Mysql prima sudo /etc/init.d/mysql stop

Accedi come root senza password sudo mysqld_safe --skip-grant-tables &

Dopo aver effettuato l'accesso al terminale mysql, dovresti eseguire più comandi:

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

Dopo aver riavviato il server mysql Se si verificano ancora errori, è necessario visitare: Reimposta la password di root di MySQL 5.7 Ubuntu 16.04


8

Per Ubuntu 18.04 e mysql 5.7

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

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

    passaggio 3: sudo mysqld_safe --skip-grant-tables& esci (usa quit se è bloccato)

accedi a mysql senza password

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

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

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

ora accedi con

  • mysql -u root -p <root>

1
ma in quale fase posso impostare il passaggio per root? perché ho provato $ mysql -u root -pma l'accesso è stato ancora negato. Access denied for user 'root'@'localhost' (using password: YES)Ho provato a inserire la password "SÌ"
AlexNikonov

4

Provalo: sudo mysql_secure_installation

Il lavoro è in Ubuntu 18.04


1

Nel caso qualcuno atterra qui dopo aver commesso lo stesso errore che ho fatto:

  1. Passato plugin="mysql_native_password"temporaneamente a. Ho eseguito i miei compiti.
  2. Tentativo di tornare al plug-in "auth_socket", ma vi ha fatto riferimento in modo errato plugin="auth_socket"che ha provocatomysql "ERROR 1524 (HY000): Plugin 'auth_socket' is not loaded"
  3. Non avendo un modo per accedere per correggere questo errore, sono stato costretto a interrompere mysql e utilizzare mysql_safeper bypassare l'autenticazione per passare al plug-in appropriatoplugin="unix_socket"

Si spera che questo faccia risparmiare un po 'di tempo a qualcuno se riceve il messaggio di errore del poster originale, ma la vera causa era il flubbing del nome del plug-in, in realtà non mancava l'esistenza del plug-in "auth_socket" stesso, che secondo la documentazione di MariaDB :

In MariaDB 10.4.3 e versioni successive, il plug-in di autenticazione unix_socket è installato per impostazione predefinita e viene utilizzato per impostazione predefinita dall'account utente "root" @ "localhost".


-7

Puoi provare con i seguenti comandi:

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.

Puoi spiegarlo ulteriormente? In che modo il riavvio del server risolve il messaggio di errore fornito?
Nico Haase
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.