J'ai essayé de nombreuses étapes pour corriger ce problème. Il existe tellement de sources de solutions possibles à ce problème qu'il est difficile de faire la part des choses. J'ai finalement trouvé une bonne solution aquí :
Étape 1 : Identifier la version de la base de données
mysql --version
Vous verrez une sortie comme celle-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 la base de données et la version que vous exécutez, 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 modifier le mot de passe Root, vous devez au préalable arrêter le serveur de la 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 d'informations sur les privilèges de l'utilisateur, il 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'octroi, qui stockent les informations relatives aux privilèges des utilisateurs. Comme il s'agit d'un risque pour la sécurité, vous devez également désactiver la mise en réseau pour empêcher d'autres clients de se connecter.
Démarrez la base de données sans charger les tables d'octroi 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, qui ne devrait pas demander de mot de passe.
mysql -u root
Vous verrez immédiatement une invite du shell de la 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 l'accès Root, vous pouvez changer le mot de passe Root.
Étape 4 : Changement du mot de passe Root
mysql> FLUSH PRIVILEGES;
Maintenant nous pouvons réellement changer le mot de passe Root.
Para 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';
Para MySQL 5.7.5 et plus ainsi que MariaDB 10.1.20 et plus utiliser :
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');
Veillez à remplacer new_password
avec le nouveau mot de passe de votre choix.
Note : Si le ALTER USER
ne fonctionne pas, c'est généralement le signe d'un problème plus important. Cependant, vous pouvez essayer UPDATE ... SET
pour réinitialiser le mot de passe Root à la place.
[IMPORTANT] C'est 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 tableaux de subventions après cela.
Dans les deux cas, vous devriez voir la 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 avant.
Étape 5 : Redémarrer le serveur de base de données normalement
Le tutoriel présente quelques étapes supplémentaires pour redémarrer la base de données, mais le seul élément que j'ai utilisé est celui-ci :
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 vous demander le nouveau mot de passe attribué. Entrez-le et vous devriez avoir accès à 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 avez choisi est fort et sécurisé et conservez-le dans un endroit sûr.
5 votes
Duplicata possible de Accès refusé pour l'utilisateur 'Root'@'localhost' (avec mot de passe : YES) (Mysql::Error)
1 votes
@clearlight Ce n'est pas la même question, ce post est un problème avec mysqladmin gagner super privilèges dans mysql, l'autre post est un problème avec une simple connexion à partir de socket.
1 votes
Essayer de supprimer s'il existe
~/.my.cnf
fichier.46 votes
Je sais que c'est vieux, mais je tiens à le dire pour les futurs visiteurs. N'entrez pas votre mot de passe mysql, surtout pour Root, dans la commande elle-même, ou il sera stocké dans l'historique de votre shell. Laissez simplement le champ
-p
par elle-même et mysql vous demandera un mot de passe.1 votes
Pour MySQL 8, utilisez sudo mysql_secure_installation et définissez un mot de passe fort. Réf. Vérifiez l'étape 5 de ce tutoriel phoenixnap.com/kb/how-to-install-mysql-on-ubuntu-18-04