J'ai essayé de nombreuses étapes pour corriger ce problème. Il y a tellement de sources de solutions possibles à ce problème qu'il est difficile de filtrer le sens du non-sens. J'ai finalement trouvé une bonne solution ici :
É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 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 modifier 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 d'informations sur les privilèges 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'octroi, qui stockent les informations de privilège utilisateur. Étant donné qu'il s'agit d'un risque pour la sécurité, vous devez également ignorer 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 de droits ni activer la mise en réseau:
$ sudo mysqld_safe --skip-grant-tables --skip-networking &
L'esperluette à la fin de cette commande fera exécuter ce processus 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 de shell 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 disposez d'un accès root, vous pouvez modifier 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 versions antérieures ainsi que MariaDB 10.1.20 et versions antérieures , utilisez:
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');
Assurez-vous de le remplacer new_password
par le nouveau mot de passe de votre choix.
Remarque: Si la ALTER USER
commande ne fonctionne pas, cela indique généralement un problème plus important. Cependant, vous pouvez essayer UPDATE ... SET
de réinitialiser le mot de passe root à la place.
[IMPORTANT] Ceci 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 tables de droits 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 arrêter l'instance manuelle du serveur de base de données et le redémarrer comme il l'était auparavant.
Étape 5: redémarrer le serveur de base de données normalement
Le tutoriel va dans quelques étapes supplémentaires pour redémarrer la base de données, mais la seule pièce que j'ai utilisée était la suivante:
Pour MySQL, utilisez:
$ sudo systemctl start mysql
Pour MariaDB, utilisez:
$ sudo systemctl start mariadb
Vous pouvez maintenant confirmer que le nouveau mot de passe a été appliqué correctement en exécutant:
$ mysql -u root -p
La commande doit maintenant demander le nouveau mot de passe attribué. Entrez-le et vous devriez avoir accès à l'invite de 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 solide et sécurisé et conservez-le en lieu sûr.