Server version: 5.7.10 MySQL Community Server (GPL)
Dans MySQL, j'ai un utilisateur mangues. L'utilisateur a parfaitement fonctionné lorsque je l'ai créé. Après avoir redémarré mon ordinateur, cependant, une tentative de connexion à mangues a donné cette sortie:
$ mysql -u mangos -p
Enter password:
ERROR 1524 (HY000): Plugin '*some_random_long_hash_I_cannot_remember' is not loaded
$
Cela m'a en quelque sorte rappelé le hachage du mot de passe, alors après avoir enquêté sur mysql.user, j'ai découvert que mangos n'avait pas de mot de passe!
SET PASSWORD FOR 'mangos'@'127.0.0.1' = PASSWORD('mangos');
FLUSH PRIVILEGES;
Maintenant, je reçois:
ERROR 1524 (HY000): Plugin '*3FBBDB84EA2B2A0EA599948396AD622B7FF68183' is not loaded
3FBBDB84EA2B2A0EA599948396AD622B7FF68183
est le même numéro que celui indiqué dans la colonne mot de passe de mysql.user pour mangos, et est différent de celui d'origine. Je n'arrive toujours pas à me connecter.
Comment faire en sorte que MySQL reconnaisse correctement un mot de passe? Est-ce même le problème ici?
Edits:
mysql> SELECT * FROM mysql.user WHERE user = 'mangos' \G
*************************** 1. row ***************************
Host: localhost
User: mangos
Password: *3FBBDB84EA2B2A0EA599948396AD622B7FF68183
Select_priv: N
Insert_priv: N
Update_priv: N
Delete_priv: N
Create_priv: N
Drop_priv: N
Reload_priv: N
Shutdown_priv: N
Process_priv: N
File_priv: N
Grant_priv: N
References_priv: N
Index_priv: N
Alter_priv: N
Show_db_priv: N
Super_priv: N
Create_tmp_table_priv: N
Lock_tables_priv: N
Execute_priv: N
Repl_slave_priv: N
Repl_client_priv: N
Create_view_priv: N
Show_view_priv: N
Create_routine_priv: N
Alter_routine_priv: N
Create_user_priv: N
Event_priv: N
Trigger_priv: N
Create_tablespace_priv: N
ssl_type:
ssl_cipher:
x509_issuer:
x509_subject:
max_questions: 0
max_updates: 0
max_connections: 0
max_user_connections: 0
plugin: *3FBBDB84EA2B2A0EA599948396AD622B7FF68183
authentication_string: NULL
password_expired: N
Il semble que votre table d'utilisateurs est corrompue. Le redémarrage que vous avez mentionné a probablement déclenché une mise à niveau vers MySQL et le script mysql_upgrade
n'a pas été exécuté. Cela devrait résoudre la situation:
mysql_upgrade -u root -ppassword --skip-grant-tables
mysql -u root -ppassword -e "UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE user = 'mangos'; FLUSH PRIVILEGES"
Source: http://kb.odin.com/fr/126676
Fournir l'option --force
à mysql_upgrade
réappliquera les scripts de mise à niveau même si une mise à niveau a déjà été effectuée. Cela peut être nécessaire en cas de restauration partielle à partir d'une sauvegarde.
Il convient également de mentionner que la commande permettant de modifier un mot de passe utilisateur a été modifiée dans MySQL 5.7.6 / MariaDB 10.2.0 et le transfert suivant:
ALTER USER mangos IDENTIFIED BY 'mangos';
C'est maintenant la méthode recommandée pour définir le mot de passe, bien que l'ancienne syntaxe SET PASSWORD
ne soit pas officiellement obsolète.
mysql_upgrade
(suggéré par @ miken32) ne fonctionnait pas pour moi, j'ai donc dû le faire à la dure, en arrêtant le service et en utilisant mysqld_safe
, comme expliqué ici .
UPDATE: En fait, cela ne fonctionnait pas non plus, donc je devais faire très fort (attention, ceci supprime toutes vos bases de données):
Sudo killall mysqld
Sudo rm -rf /var/lib/mysql
Sudo apt-get purge mysql-server
mysql-server
à nouveau.J'ai résolu le problème de ici. Exécutez mysql_upgrade -u root -p
pour résoudre le problème ou si vous rencontrez cette erreur lors de la création d'un utilisateur, essayez plutôt d'utiliser "BY" au lieu de "AVEC" dans votre requête.
CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'xyz';