MySQL échoue sur: mysql «ERREUR 1524 (HY000): le plug-in 'auth_socket' n'est pas chargé»

128

Mon environnement local est:

  • frais Ubuntu 16.04
  • avec PHP 7
  • avec MySQL 5.7 installé

    sudo apt-get install mysql-common mysql-server

Quand j'ai essayé de me connecter à MySQL (via CLI):

mysql -u root -p

Je suis tombé sur un problème cyclique en 3 étapes.

1) Le premier était un problème de socket

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

Solution: redémarrer le PC.

Ce qui a conduit à une autre erreur:

2) Avec accès refusé

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

Problème possible? Mauvais mot de passe pour l'utilisateur "root"!

Solution: réinitialisez le mot de passe root avec ce tutoriel .

Avec un mot de passe correct et une prise de courant, la dernière erreur survient.

3) Plug-in d'authentification incorrect

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

Ici, je me suis arrêté ou je suis arrivé à 1) à nouveau.

Tomáš Votruba
la source
1
Heureux que cela fonctionne bien pour vous :) merci de nous avoir contactés!
Tomáš Votruba

Réponses:

375

J'ai une solution!

Lors de la réinitialisation du mot de passe root à l'étape 2), changez également le plug-in d'authentification en 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;

Cela m'a permis de me connecter avec succès!


Solution de code complet

1. exécutez les commandes bash

1. d'abord, exécutez ces commandes 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. puis exécutez les commandes mysql => copiez-collez ceci manuellement dans cli

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. exécutez plus de commandes 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. Problème de socket (d'après vos commentaires)

Lorsque vous voyez une erreur de socket , une communauté est venue avec 2 solutions possibles:

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

(merci à @Cerin)

Ou

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

(merci à @Peter Dvukhrechensky)


Chemins aveugles et erreurs de bord possibles

Utilisez 127.0.0.1 au lieu de localhost

mysql -uroot # "-hlocalhost" is default

Peut conduire à un "fichier manquant" ou à une erreur slt.

mysql -uroot -h127.0.0.1

Fonctionne mieux.

Ignorer le problème de socket

J'ai trouvé de nombreuses façons de créer un mysqld.sockfichier, de modifier les droits d'accès ou de créer un lien symbolique. Ce n'était pas le problème après tout.

Passer le my.cnffichier

Le problème n'était pas non plus là. Si vous n'êtes pas sûr, cela pourrait vous aider .

Tomáš Votruba
la source
3
Merci pour ça. C'est aussi une excellente réponse sur la façon de réinitialiser le passage racine de mysql, vous voudrez peut-être modifier légèrement le titre pour l'aider à apparaître avant que nous ne rencontrions déjà le problème du socket.
Wtower
1
Je suis content que cela ait aidé. Comment modifieriez-vous le titre pour conserver le message d'origine? Je comprends que la solution nécessite de réinitialiser le mot de passe, mais cela ne résout pas le problème dans le titre. Il s'agit d'un échec plus complexe de plusieurs points. Pour la réinitialisation du mot de passe root, j'irais ici: stackoverflow.com/a/6401963/1348344
Tomáš Votruba
1
@matanster Pas vraiment, c'est un essai purement échoué étape par étape. Quel OS utilisez-vous?
Tomáš Votruba
8
Votre appel mysqld_safe est incorrect. Vous devez à la place exécuter:sudo mkdir -p /var/run/mysqld; sudo chown mysql /var/run/mysqld; sudo mysqld_safe --skip-grant-tables &
Cerin
3
Veuillez ajouter une solution possible du problème de socket à la réponse. Comme celui-ci, mkdir -p /var/run/mysqld && chown mysql:mysql /var/run/mysqldça peut faire gagner du temps à quelqu'un
Peter Dvukhrechensky
41

Vous pouvez essayer comme suit cela fonctionne pour moi.

Démarrer le serveur:

sudo service mysql start

Maintenant, allez dans le dossier chaussettes:

cd /var/run

Sauvegardez la chaussette:

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

Arrêter le serveur:

sudo service mysql stop

Restaurer la chaussette:

sudo mv ./mysqld.bak ./mysqld

Démarrez mysqld_safe:

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

Démarrer le shell mysql:

 mysql -u root

Changer le mot de passe:

Par conséquent, choisissez d'abord la base de données

mysql> use mysql;

Entrez maintenant ci-dessous deux requêtes:

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

Maintenant, tout ira bien.

mysql> flush privileges;
mysql> quit;

Pour vérifier:

mysql -u root -p

terminé!

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

Vérifiez maintenant hostname/phpmyadmin

Username: root

Password: 123456

Pour plus de détails, veuillez consulter Comment réinitialiser le mot de passe oublié phpmyadmin dans Ubuntu

Bablu Ahmed
la source
2
seulement cela fonctionne pour moi! le socket de sauvegarde et de restauration est assez intelligent
touhid udoy
1
ERREUR 1045 (28000): Accès refusé pour l'utilisateur 'root' @ 'localhost' (en utilisant le mot de passe: OUI) avant le "done!" ligne dans votre réponse lorsque vous essayez de vous connecter avec 123456.
trainoasis
J'ai résolu en suivant les étapes décrites dans phpmyadmin (c'est-à-dire changer le mot de passe, changer le plugin). Pour une raison quelconque, 'set authentication_string = password (...)' l'a empêché de fonctionner (Erreur 1045 (28000): Accès refusé ...).
Fil
12

La mysqlcommande utilise par défaut des sockets UNIX pour se connecter à MySQL.

Si vous utilisez MariaDB, vous devez charger le plug-in d'authentification de socket Unix côté serveur.

Vous pouvez le faire en modifiant la [mysqld]configuration comme ceci:

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

Selon la distribution, le fichier de configuration est généralement situé à /etc/mysql/ou/usr/local/etc/mysql/

rustyx
la source
1
Celui-là. Toutes les autres réponses expliquent comment contourner l'erreur. Celui-ci explique comment le RÉSOUDRE.
Envite
Si vous êtes sur MariaDB 10.4.3 et versions ultérieures, le plugin auth unix_socket devrait être installé par défaut, mais si vous le référencez incorrectement comme plugin = "auth_socket", au lieu de plugin = "unix_socket" lors de la mise à jour de votre "user", vous recevra ce message quelque peu trompeur. Ma réponse explique comment j'ai gâché cela.
Rohn Adams
9

Vous pouvez essayer ces quelques étapes:

Arrêter le service Mysql 1er sudo /etc/init.d/mysql stop

Connectez-vous en tant que root sans mot de passe sudo mysqld_safe --skip-grant-tables &

Après vous être connecté au terminal mysql, vous devriez avoir plus besoin d'exécuter des commandes:

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

Après avoir redémarré votre serveur mysql Si vous rencontrez toujours une erreur, vous devez visiter: Réinitialiser le mot de passe root MySQL 5.7 Ubuntu 16.04

Inderpal Singh
la source
8

Pour Ubuntu 18.04 et mysql 5.7

  • étape 1: sudo mkdir /var/run/mysqld;

    étape 2: sudo chown mysql /var/run/mysqld

    étape 3: sudo mysqld_safe --skip-grant-tables& quit (utilisez quit s'il est bloqué)

connectez-vous à mysql sans mot de passe

  • étape 4: sudo mysql --user=root mysql

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

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

maintenant connectez-vous avec

  • mysql -u root -p <root>
arunava maiti
la source
1
mais à quelle étape puis-je définir le pass pour root? parce que j'ai essayé $ mysql -u root -pmais l'accès refusé encore. Access denied for user 'root'@'localhost' (using password: YES)J'ai essayé de saisir le mot de passe `` OUI ''
AlexNikonov
4

Essayez-le: sudo mysql_secure_installation

Travail dans Ubuntu 18.04

Gorcer
la source
1

Au cas où quelqu'un atterrirait ici après avoir commis la même erreur que moi:

  1. Passé plugin="mysql_native_password"temporairement à. J'ai effectué mes tâches.
  2. Tentative de retour au plug-in "auth_socket", mais référence incorrecte, ce plugin="auth_socket"qui a entraînémysql "ERROR 1524 (HY000): Plugin 'auth_socket' is not loaded"
  3. Faute de moyen de me connecter pour corriger cette erreur, j'ai été obligé d'arrêter mysql et d'utiliser mysql_safepour contourner l'authentification afin de passer au plugin appropriéplugin="unix_socket"

J'espère que cela permet à quelqu'un de gagner du temps s'il reçoit le message d'erreur de l'affiche d'origine, mais la vraie cause était de flipper le nom du plugin, ne manquant pas réellement de l'existence du plugin "auth_socket" lui-même, qui selon la documentation MariaDB :

Dans MariaDB 10.4.3 et versions ultérieures, le plugin d'authentification unix_socket est installé par défaut, et il est utilisé par le compte utilisateur 'root' @ 'localhost' par défaut.

Rohn Adams
la source
-7

Vous pouvez essayer avec les commandes ci-dessous:

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
la source
Pouvez-vous expliquer cela davantage? Comment le redémarrage du serveur résout-il le message d'erreur donné?
Nico Haase