web-dev-qa-db-fra.com

Erreur MySQL: 'Accès refusé pour l'utilisateur' root '@' localhost '

$ ./ mysqladmin -u racine -p ' expurgé '
Entrer le mot de passe:

mysqladmin: erreur de connexion au serveur 'localhost':
'Accès refusé pour l'utilisateur' root '@' localhost '(avec mot de passe: OUI)'

Comment puis-je réparer cela?

164
Harsh Trivedi
  1. Ouvrez et éditez _/etc/my.cnf_ ou _/etc/mysql/my.cnf_, en fonction de votre distribution.
  2. Ajouter _skip-grant-tables_ sous _[mysqld]_
  3. Redémarrer Mysql
  4. Vous devriez pouvoir vous connecter à mysql maintenant en utilisant la commande ci-dessous _mysql -u root -p_
  5. Exécuter _mysql> flush privileges;_
  6. Définir le nouveau mot de passe par ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword';
  7. Retournez à /etc/my.cnf et remove/comment skip-grant-tables
  8. Redémarrer Mysql
  9. Vous pourrez maintenant vous connecter avec le nouveau mot de passe _mysql -u root -p_
241

Toutes les solutions que j'ai trouvées étaient beaucoup plus complexes que nécessaire et aucune ne fonctionnait pour moi. Voici la solution qui a résolu mon problème. Pas besoin de redémarrer mysqld ou de le démarrer avec des privilèges spéciaux.

Sudo mysql

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

Avec une seule requête nous changeons le auth_plugin en mysql_native_password et définissons le mot de passe root pour root (n'hésitez pas à le changer dans la requête)

Vous devriez maintenant pouvoir vous connecter avec root. Plus d'informations peuvent être trouvées dans documentation mysql

(quittez la console mysql avec Ctrl + D ou en tapant exit )

397
user1878906

J'ai essayé plusieurs étapes pour résoudre ce problème. Il existe tellement de sources de solutions possibles à ce problème qu'il est difficile de filtrer le sens du non-sens. J'ai enfin trouvé une bonne solution ici :

Étape 1: Identifiez la version de la base de données

$ mysql --version

Vous verrez des résultats comme celui-ci avec MySQL:

$ mysql  Ver 14.14 Distrib 5.7.16, for Linux (x86_64) using  EditLine wrapper

Ou une sortie comme celle-ci pour MariaDB:

mysql  Ver 15.1 Distrib 5.5.52-MariaDB, for Linux (x86_64) using readline 5.1

Notez quelle base de données et quelle version vous utilisez, car vous les utiliserez plus tard. Ensuite, vous devez arrêter la base de données pour pouvoir y accéder manuellement.

Étape 2: arrêt du serveur de base de données

Pour changer le mot de passe root, vous devez au préalable arrêter le serveur de base de données.

Vous pouvez le faire pour MySQL avec:

$ Sudo systemctl stop mysql

Et pour MariaDB avec:

$ Sudo systemctl stop mariadb

Étape 3: redémarrage du serveur de base de données sans vérification des autorisations

Si vous exécutez MySQL et MariaDB sans charger les informations sur les privilèges de l'utilisateur, cela vous permettra d'accéder à la ligne de commande de la base de données avec les privilèges root sans fournir de mot de passe. Cela vous permettra d'accéder à la base de données sans le savoir.

Pour ce faire, vous devez empêcher la base de données de charger les tables d'attribution, qui stockent les informations de privilège de l'utilisateur. Comme il s’agit là d’un risque pour la sécurité, vous devez également ignorer la mise en réseau afin d’empêcher d’autres clients de se connecter.

Démarrez la base de données sans charger les tables de droits d'accès ni activer la mise en réseau:

$ Sudo mysqld_safe --skip-grant-tables --skip-networking &

L'esperluette à la fin de cette commande fera en sorte que ce processus s'exécute en arrière-plan afin que vous puissiez continuer à utiliser votre terminal.

Vous pouvez maintenant vous connecter à la base de données en tant qu'utilisateur root, ce qui ne devrait pas vous demander de mot de passe.

$ mysql -u root

Vous verrez immédiatement une invite de base de données à la place.

Invite MySQL

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

Invite MariaDB

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

Maintenant que vous avez un accès root, vous pouvez changer le mot de passe root.

Étape 4: modification du mot de passe racine

mysql> FLUSH PRIVILEGES;

Maintenant, nous pouvons réellement changer le mot de passe root.

Pour MySQL 5.7.6 et plus récent ainsi que MariaDB 10.1.20 et plus récent , utilisez la commande suivante:

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

Pour MySQL 5.7.5 et plus ancien ainsi que MariaDB 10.1.20 et plus ancien , utilisation:

mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');

Assurez-vous de remplacer new_password par votre nouveau mot de passe.

Remarque: Si la commande ALTER USER ne fonctionne pas, cela indique généralement un problème plus grave. Cependant, vous pouvez essayer UPDATE ... SET pour réinitialiser le mot de passe root à la place.

[IMPORTANT] Il s'agit de la ligne spécifique qui a résolu mon problème particulier:

mysql> UPDATE mysql.user SET authentication_string = PASSWORD('new_password') WHERE User = 'root' AND Host = 'localhost';

N'oubliez pas de recharger les tables de subvention après cela.

Dans les deux cas, vous devriez voir confirmation que la commande a été exécutée avec succès.

Query OK, 0 rows affected (0.00 sec)

Le mot de passe a été modifié. Vous pouvez donc maintenant arrêter l'instance manuelle du serveur de base de données et la redémarrer comme auparavant.

Étape 5: redémarrez le serveur de base de données normalement

Le tutoriel décrit d'autres étapes pour redémarrer la base de données, mais le seul élément que j'ai utilisé est le suivant:

Pour MySQL, utilisez: $ Sudo systemctl start mysql

Pour MariaDB, utilisez:

$ Sudo systemctl start mariadb

Maintenant, vous pouvez confirmer que le nouveau mot de passe a été appliqué correctement en exécutant:

$ mysql -u root -p

La commande devrait maintenant demander le mot de passe nouvellement attribué. Entrez-le et vous devriez accéder à l'invite de la base de données comme prévu.

Conclusion

Vous avez maintenant un accès administratif au serveur MySQL ou MariaDB restauré. Assurez-vous que le nouveau mot de passe root que vous choisissez est fort et sécurisé et conservez-le en lieu sûr.

36
Blairg23

Pour les utilisateurs Ubuntu/Debian

Exécutez ce qui suit pour vous connecter en tant que root (sans mot de passe)

Sudo /usr/bin/mysql --defaults-file=/etc/mysql/debian.cnf

Si vous ne souhaitez pas ajouter --defaults-file à chaque fois que vous souhaitez vous connecter en tant que root, vous pouvez copier /etc/mysql/debian.cnf dans votre répertoire personnel:

Sudo cp /etc/mysql/debian.cnf ~/.my.cnf

puis:

Sudo mysql
20
Fab

Pour les nouveaux utilisateurs de Linux, cela pourrait être une tâche ardue. Permettez-moi de mettre à jour cela avec mysql 8 (la dernière version disponible est la version 8.0.12 à compter du 12 sept. 2018)

  1. Ouvrez le fichier de configuration "mysqld.cnf" à "/etc/mysql/mysql.conf.d/".
  2. Ajoutez skip-grant-tables à la ligne suivante du texte [mysql] et enregistrez.
  3. Redémarrez le service mysql en tant que "sudo service mysql restart". Maintenant, votre mysql est libre de toute authentification.
  4. Connectez-vous au client mysql (également appelé mysql-shell) sous le nom mysql -u root -p. Il n'y a pas de mot de passe à saisir pour l'instant.
  5. lancer la commande sql privilèges de vidage;
  6. Réinitialisez le mot de passe maintenant comme ALTER USER 'root' @ 'localhost' IDENTIFIED BY 'MyNewPassword';
  7. Revenons maintenant à l'état normal. supprimez cette ligne "skip-grant-tables" de "mysqld.cnf" et redémarrez le service.

C'est ça.

12
Amit Kr

Après avoir essayé toutes les autres réponses, voici ce qui a finalement fonctionné pour moi

Sudo mysql -- It does not ask me for any password

-- Then in MariaDB/MySQL console:
update mysql.user set plugin = 'mysql_native_password' where User='root';
FLUSH PRIVILEGES;
exit;

J'ai trouvé la réponse dans cet article: https://medium.com/@chiragpatel_52497/solved-error-access-denied-for-user-root-localhost-of-mysql-programming-school-6e3611838d06 =

4
Pico12

Dans votre atelier MySQL, vous pouvez aller dans la barre latérale gauche, sous Gestion, sélectionnez "Utilisateurs et privilèges", cliquez sur racine sous Comptes d'utilisateur, dans la section de droite, cliquez sur l'onglet "Limites de compte" pour augmenter le nombre maximal de requêtes, de mises à jour, etc. puis cliquez sur l'onglet "Rôles administratifs" et cochez les cases pour donner accès au compte. J'espère que ça t'as aidé!

4
Colleen Purcell

Je l’ai fait pour définir mon mot de passe root lors de la configuration initiale de MySQL dans OSx. Ouvrez un terminal.

Sudo sh -c 'echo /usr/local/mysql/bin > /etc/paths.d/mysql'

Fermez le terminal et ouvrez un nouveau terminal. Et les suivants fonctionnent sous Linux, pour définir un mot de passe root.

Sudo /usr/local/mysql/support-files/mysql.server stop
Sudo mysqld_safe --skip-grant-tables

(Sudo mysqld_safe --skip-grant-tables: Cela n’a pas fonctionné pour moi la première fois. Mais lors du deuxième essai, le succès a été positif.)

Puis connectez-vous à MySQL

mysql -u root

FLUSH PRIVILEGES;

Maintenant changez le mot de passe:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpassword';

Redémarrez MySQL:

Sudo /usr/local/mysql/support-files/mysql.server stop
Sudo /usr/local/mysql/support-files/mysql.server start
3
Sadee

Cela peut arriver si vous n'avez pas assez de privilèges. Tapez su, entrez le mot de passe root et réessayez.

0
vitaly goji

Dans mon cas sous Debian 10, l'erreur

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

a été résolu par (GOOD WAY)

Sudo mysql -u root -p mysql

MAUVAISE MANIÈRE:

mysql -u root -p mysql
0
klor

Si vous êtes comme moi et que toutes les suggestions ci-dessus ont échoué, désinstallez toutes les versions de mysql sur votre ordinateur, recherchez tous les fichiers mysql restants à l'aide de la commande Sudo find / -name "mysql" et rm -rf de chaque fichier ou répertoire contenant mysql. nom qui y est attaché (vous devez ignorer les fichiers liés aux bibliothèques de langages de programmation). Maintenant, installez une nouvelle version de MySQL et profitez-en. NB: Vous perdrez toutes vos données alors pesez vos options en premier.

0
Michael Ogala