Ubuntu 15.10 erreur mysql 1524 - unix_socket

51

Sur Ubuntu 15.10, à un moment donné (peut-être après une installation et suppression de mariadb), mysql était incapable de fonctionner. Les tâches sont terminées, mais le serveur est en panne.

À la commande:

mysql -u root -p

le système répond avec comme un:

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

Aucun moyen de se connecter, aucun plugin trouvé, aucune erreur dans les fichiers de configuration (tous par défaut).

Comment reprendre le contrôle et faire fonctionner le serveur mysql?

Hydra Starmaster
la source
Je ne suis pas familier avec cette erreur particulière mais voyez cette discussion: lists.launchpad.net/maria-developers/msg08177.html
Jos
@Jos: cette discussion, peut-être pour une situation similaire, n'offre pas de solution. J'ai beaucoup cherché sur Google, mais je n'ai pas trouvé de solution complète exposée. Quoi qu'il en soit, j'ai posté une réponse de travail.
Hydra Starmaster
À propos de la raison du message d'erreur: Le plugin unix_socket fait partie de MariaDB (pas de MySQL) et doit être chargé pour que les subventions qui l'utilisent fonctionnent: mariadb.com/kb/en/library/authentication-plugin-unix-socket
JonnyJD

Réponses:

94

Le "unix_socket" a été appelé par le processus d'authentification mysql (peut-être lié à une migration partielle de la base de données vers mariadb, maintenant supprimée). Pour que tout fonctionne à nouveau, allez sur su:

sudo su

puis suivez:

/etc/init.d/mysql stop
mysqld_safe --skip-grant-tables &
mysql -uroot

Cela arrêtera complètement mysql, contournera l'authentification de l'utilisateur (aucun mot de passe requis) et se connectera à mysql avec l'utilisateur "root".

Maintenant, dans la console mysql, utilisez la base de données administrative mysql:

use mysql;

Pour réinitialiser le mot de passe root sur mynewpassword (changez-le à votre guise), pour en être sûr:

update user set password=PASSWORD("mynewpassword") where User='root';

Et celui-ci écrasera la méthode d'authentification, supprimera la demande unix_socket (et tout le reste), en restaurant une méthode de mot de passe normale et fonctionnelle:

update user set plugin="mysql_native_password";

Quittez la console mysql:

quit;

Arrêtez et démarrez tout ce qui concerne mysql:

/etc/init.d/mysql stop
kill -9 $(pgrep mysql)
/etc/init.d/mysql start

N'oubliez pas exitle mode su.

Le serveur MySQL est maintenant opérationnel. Vous pouvez vous connecter avec root:

mysql -u root -p

ou ce que vous voulez. L'utilisation du mot de passe est opérationnelle.

C'est ça.

Hydra Starmaster
la source
Mon mysqld_safen'a pas d'option comme --skip-grant-tables.. que donne?
heemayl
Je suis sur mysqld 5.6.27-0ubuntu1. Vous devriez trouver cette option en regardant:mysqld --verbose --help
Hydra Starmaster
2
Cela m'a fait aller. Avec quelques différences au lieu de mysqld_safequoi se plaint l'argument --skip-grant-tables n'existait pas j'ai utilisé mysqld. Cependant, il n'arrêtait pas de se plaindre de ne pas pouvoir créer les fichiers de socket /var/run/mysqld/. J'ai vérifié la configuration d'apparmor et il avait les autorisations appropriées. Pour résoudre ce problème , je devais mkdir /var/run/mysqld/puis donner des autorisations complètement ouvertes: chmod -R 777 /var/run/mysqld/. Ensuite, je pourrais enfin démarrer le démon et changer le plug-in en "mysql_native_password".
Dennmat
1
Ma table utilisateur n'a pas de mot de passe (Ubuntu 16 mysql 5.7.13). J'ai utilisé ce code SQL: UPDATE mysql.user SET authentication_string = PASSWORD ('foobar123'), password_expired = 'N' WHERE User = 'root' AND Host = 'localhost';
Anthony Scaife
Les instructions ici sont concises et m'ont aidé à résoudre le problème. Je vous remercie!
Eduardo B.
11

Voici mes étapes à suivre:

/etc/init.d/mysql stop
sudo killall mysqld_safe
sudo killall mysqld
sudo mysqld_safe --skip-grant-tables &
mysql -u root
use mysql;
update user set password=PASSWORD("mynewpassword") where User='root';
update user set plugin="mysql_native_password";
quit;
/etc/init.d/mysql stop
sudo kill -9 $(pgrep mysql)
/etc/init.d/mysql start
Roy Yan
la source
1
Maintenant, après "mysql -u root" je reçois: ERREUR 1524 (HY000): le plug-in 'root' n'est pas chargé
dxvargas
On dirait que vous avez mélangé les deux requêtes UPDATE. Avez-vous défini plugin = "root" lors d'un accident?
Adam Plocher le