Question mysql comment réparer Accès refusé pour l'utilisateur 'root' @ 'localhost'


Avant de bousiller quelque chose, quand je me connecte en utilisant $ mysql -u root -pet afficher des bases de données:

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| game_data          |
| test               |
+--------------------+

Ensuite, j'ai essayé de créer un nouvel utilisateur et remarque que quelque chose ne va pas avec les PRIVILEGES.

J'ai donc supprimé les nouveaux utilisateurs et je suppose que j'ai supprimé accidentellement la racine et l'administrateur.

Ensuite, j'essaie de créer à nouveau «root», mais j'obtiens l'erreur d'accès refusé lorsque vous accordez tous les privilèges.

mysql> CREATE USER 'root'@'localhost' IDENTIFIED BY 'password';
mysql> grant all privileges on *.* to 'root'@'localhost' identified by 'password' with grant option;
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

Si je me connecte à nouveau à MySQL en utilisant $ mysql -u root -pet afficher des bases de données,

+--------------------+
| Database           |
+--------------------+
| information_schema |
+--------------------+

Toutes les autres bases de données ont disparu.

Comment réparer MySQL maintenant?

Je ne peux pas trouver la base de données 'mysql', ne peut pas créer de base de données, créer un utilisateur, tout ce que je tente de faire obtiendra une erreur.

ERROR 1045 (28000): Accès refusé pour l'utilisateur 'root' @ 'localhost' (en utilisant le mot de passe: YES).

Dois-je réinstaller MySQL en utilisant MacPorts? Si réinstaller, je vais perdre la base de données game_data, droite?


104
2018-06-03 07:32


origine


Essayez d'accéder au serveur avec 'root'@'127.0.0.1', différent de 'root' @ 'localhost'. Ensuite, lancez une commande pour créer l'utilisateur 'root' @ 'localhost' et lui accorder tous les privilèges. - Gimmy
Regarde aussi Comment avoir MySQL comme droit d'utilisateur root? sur Super User. Il tente d'éviter de réinitialiser les mots de passe. - jww
Je viens d'avoir un espace entre -p et le mot de passe. Je sais que c'est idiot mais que je pourrais aider quelqu'un. - Vinay Wadhwa


Réponses:


Suivez les étapes ci-dessous.

  1. Démarrez l'instance ou le démon du serveur MySQL avec le --skip-grant-tables option (paramètre de sécurité).

    $ mysqld --skip-grant-tables
    
  2. Exécutez ces instructions.

    $ mysql -u root mysql
    $mysql> UPDATE user SET Password=PASSWORD('my_password') where USER='root';
    $mysql> FLUSH PRIVILEGES;
    

Si vous rencontrez le champ inconnu Erreur de mot de passe ci-dessus, utilisez:

update user set authentication_string=password('my_password') where user='root';
  1. Enfin, redémarrez l'instance / daemon sans le --skip-grant-tables option.

    $ /etc/init.d/mysql restart
    

Vous devriez maintenant pouvoir vous connecter avec votre nouveau mot de passe.

$ mysql -u root -p

Entrer le mot de passe: my_password

Correction de l'erreur MySQL "Impossible de verrouiller ibdata1"

sudo mv /usr/local/mysql/data/ibdata1 /usr/local/mysql/data/ibdata1.bak
sudo mv /usr/local/mysql/data/ib_logfile0 /usr/local/mysql/data/ib_logfile0.bak
sudo mv /usr/local/mysql/data/ib_logfile1 /usr/local/mysql/data/ib_logfile1.bak
sudo cp -a /usr/local/mysql/data/ibdata1.bak /usr/local/mysql/data/ibdata1
sudo cp -a /usr/local/mysql/data/ib_logfile0.bak /usr/local/mysql/data/ib_logfile0
sudo cp -a /usr/local/mysql/data/ib_logfile1.bak /usr/local/mysql/data/ib_logfile1
sudo /etc/init.d/mysql restart

113
2018-06-03 07:35



"$ mysqld --skip-grant-tables" et "InnoDB: Impossible de verrouiller ./ibdata1, erreur: 35 InnoDB: Vérifiez que vous ne possédez pas déjà un autre processus mysqld InnoDB: utiliser les mêmes données ou fichiers journaux InnoDB."
voir ma mise à jour ci-dessus - Yogus
J'ai trouvé que l'arrêt de mysql avant de lancer la 1ère commande arrête l'erreur de verrouillage - service mysql stop - Frank Tzanabetis
Apparemment, la colonne 'password' n'existe plus ... elle a été remplacée par 'authentication_string'. La chaîne de mise à jour du mot de passe est donc maintenant: UPDATE user SET authentication_string = PASSWORD ('my_password') où USER = 'root'; - jdmcnair
Je vous remercie! Et maintenant, je suis curieux: qu'est-ce qui aurait pu causer ça? Sur Windows? - Andrienko


Rien de ce qui précède ne m'a été utile. J'ai trouvé que je devais effacer la méthode du plugin. En 5.6, je pourrais faire:

sudo mysql -u root
use mysql;
[mysql] update user set plugin='' where User='root';
[mysql] flush privileges;

En 5.7, j'ai trouvé que je devais:

sudo mysql -u root
use mysql;
[mysql] update user set plugin='mysql_native_password' where User='root';
[mysql] flush privileges;

Selon le document, avec le plug-in défini sur une chaîne vide, il aurait dû être défini par défaut sur mysql_native_password, mais il pourrait être confondu par un hachage de mot de passe vide. Pour plus de nuances, vous pouvez lire la documentation ici: https://dev.mysql.com/doc/refman/5.7/en/native-authentication-plugin.html 


39
2017-09-28 15:01



Cela l'a résolu pour moi. Lorsque j'ai regardé le statut du démon mysql, j'ai vu cet avertissement: "[avertissement] 'utilisateur' entrée 'root @ localhost' a à la fois un mot de passe et un plugin d'authentification spécifié. Le mot de passe sera ignoré." La configuration du plug-in pour '' m'a permis de me connecter à nouveau. Merci, @Mario Flores - SpacePope
Mon plugin était vide. Ce qui est amusant, c’est qu’il est devenu blanc automatiquement. Veuillez noter que je parle d'une installation sur mon ordinateur personnel où j'utilise dist-upgrades, ce qui pourrait être la raison pour laquelle l'utilisateur root a rompu. - Friend of Kim
set plugin='mysql_native_password' l'a fait pour moi, merci! Pour référence: dev.mysql.com/doc/refman/5.7/en/ - Koen.
Pourquoi est-ce toujours un problème pour les installations de packs mises à la terre en 2018? - mckenzm
Eh bien, le défaut MariaDB plugin="unix_socket"est tellement sécurisé qu'il faut un certain temps pour se connecter :) Merci pour cette réponse, a travaillé pour moi. - BurninLeo


Assurez-vous également que les enregistrements nécessaires dans le tableau user a vide plugin domaine (il peut y avoir, par exemple, "unix_socket").

Depuis la version 5.5.7, mysql prend en charge divers plugins d'authentification https://dev.mysql.com/doc/refman/5.6/en/authentication-plugins.html

Donc, si vous avez non vide plugin champ alors le mot de passe serait ignoré et il y aurait un avertissement au journal d'erreur mysql (pour moi c'est /var/log/mysql/error.log):

[Warning] 'user' entry 'root@localhost' has both a password and an authentication plugin specified. The password will be ignored.


8
2018-04-28 21:27



Pour quelqu'un d'autre qui court dessus, lors de l'exécution de mysql server 5.7.15, cela verrouille l'utilisateur si vous ne fournissez pas de plug-in. Ce que vous recherchez est probablement un plugin de mysql_native_password. - Jonathan Cantrell


grep 'temporary password' /var/log/mysqld.log
Sort date (newest date)

Vous pouvez voir quelque chose comme ça;

[root@SERVER ~]# grep 'temporary password' /var/log/mysqld.log
2016-01-16T18:07:29.688164Z 1 [Note] A temporary password is generated for root@localhost: O,k5.marHfFu
2016-01-22T13:14:17.974391Z 1 [Note] A temporary password is generated for root@localhost: b5nvIu!jh6ql
2016-01-22T15:35:48.496812Z 1 [Note] A temporary password is generated for root@localhost: (B*=T!uWJ7ws
2016-01-22T15:52:21.088610Z 1 [Note] A temporary password is generated for root@localhost: %tJXK7sytMJV
2016-01-22T16:24:41.384205Z 1 [Note] A temporary password is generated for root@localhost: lslQDvgwr3/S
2016-01-22T22:11:24.772275Z 1 [Note] A temporary password is generated for root@localhost: S4u+J,Rce_0t
[root@SERVER ~]# mysql_secure_installation

Sécuriser le déploiement du serveur MySQL.

Enter password for user root: 

The existing password for the user account root has expired. Please set a new password.

New password: 

Re-enter new password:

Si vous voyez ça dit

... Failed! Error: Your password does not satisfy the current policy requirements
That means your password needs to have a character such as ! . # - etc...
mix characters well, upper case, lower case, ! . , # etc...

New password: 

Re-enter new password: 
The 'validate_password' plugin is installed on the server.
The subsequent steps will run with the existing configuration
of the plugin.
Using existing password for root.

Estimated strength of the password: 100 
Change the password for root ? ((Press y|Y for Yes, any other key for No) : Y

New password: 

Re-enter new password: 

Estimated strength of the password: 100 
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : Y
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : Y
Success.


Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : Y
Success.

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.


Remove test database and access to it? (Press y|Y for Yes, any other key for No) : Y
 - Dropping test database...
Success.

 - Removing privileges on test database...
Success.

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y
Success.

All done! 
[root@SERVER ~]# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 5.7.10 MySQL Community Server (GPL)

Regardez les 10 dernières minutes de cette vidéo, cela vous apprend comment vous le faites.


7
2018-01-22 23:08



Bien que cela puisse répondre à la question, vous devriez donner une description plus détaillée du contenu lié et expliquer son lien avec la question. Cela aidera à garantir que cette réponse reste utile au cas où la page liée serait supprimée ou serait déconnectée. Pour plus d'informations, voir ce poste d'échange Meta Stack. - bwDraco
C'est le cas d'utilisation que j'ai vu, j'installe mysql sur RHEL7 dans AWS avec Ansible et j'obtiens le même comportement après avoir reconfiguré et redémarré la base de données. Savez-vous pourquoi cela se produit en premier lieu, bloque Ansible d’accéder au mysqld local et de le configurer. Ceci est juste à des fins de test. - einarc
Apparemment, cela dépend de la façon dont vous initialisez le serveur, regardez l'étape 4 ici: dev.mysql.com/doc/refman/5.7/en/ - einarc


Essayez-le:

mysql --no-defaults --force --user=root --host=localhost --database=mysql 
UPDATE user SET Password=PASSWORD('NEWPASSWORD') where USER='root';
FLUSH PRIVILEGES;

3
2018-02-21 17:05



Pouvez-vous décrire ce que le --no-defaults --force commutateurs font? Sinon, il s'agit d'un duplicata VLQ de la réponse acceptée ci-dessus. - Canadian Luke
@CanadianLuke no defaults ignore tous les fichiers de configuration qu'il inclurait autrement, force continue à fonctionner même si l'une des commandes SQL émises échoue. En cas de doute, vérifiez Le manuel - deucalion
Il doit être modifié pour répondre - Canadian Luke
Je reçois ERROR 1054 (42S22): Unknown column 'Password' in 'field list' - Jonathan
@JonathanLeaders regarde: stackoverflow.com/questions/30692812/ - Gustavo Duarte


Dans mon cas, j'ai eu une corruption de base de données, après le redémarrage de mysql sur Debian, le login root était sans mot de passe. La solution était la suivante:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'test';

Certaines autres réponses ont également mentionné le plug-in native_password, mais c'est comme cela que vous pouvez le faire sans trop compliquer les choses. C'est comme ça que l'on veut changer.


0
2017-11-10 20:13