Recherche de site Web

Comment réinitialiser le mot de passe de l'utilisateur root MySQL sous Linux


Avez-vous oublié le mot de passe de l'utilisateur root de MySQL ? Pas de souci ! Ce guide vous guide à travers les étapes pour réinitialiser le mot de passe de l'utilisateur root MySQL sur les systèmes d'exploitation Linux. Les étapes indiquées ci-dessous devraient également fonctionner pour réinitialiser le mot de passe root de MariaDB.

Nous avons déjà publié un guide pour réinitialiser le mot de passe de l'utilisateur root (administrateur) dans les anciennes versions de MySQL, c'est-à-dire MySQL 5.7. Mais, cette méthode ne fonctionnait pas avec la nouvelle version MySQL 8. Si vous souhaitez réinitialiser le mot de passe root dans MySQL 8, suivez l'une des deux solutions de contournement données ci-dessous.

Réinitialiser le mot de passe de l'utilisateur root MySQL sous Linux

Comme je l'ai déjà mentionné, nous pouvons réinitialiser le mot de passe root de MySQL de deux manières.

  • La manière générique,
  • Utilisation de la variable système init_file.

1. La méthode générique pour réinitialiser le mot de passe root de MySQL

Cette méthode fonctionnera quel que soit le système d'exploitation que vous utilisez. Je vous avertis que c’est une manière moins sûre, car nous allons démarrer le serveur MySQL avec l’option --skip-grant-tables. Cela donne à toute personne ayant accès au serveur un accès illimité à toutes les bases de données.

Tout d'abord, arrêtez le service MySQL en utilisant la commande :

$ sudo systemctl stop mysql

Vous pouvez vérifier si MySQL est réellement arrêté avec la commande :

$ sudo systemctl status mysql

Exemple de sortie :

● mysql.service - MySQL Community Server
      Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
      Active: inactive (dead) since Sat 2021-05-29 11:53:08 UTC; 8s ago
     Process: 560 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
     Process: 666 ExecStart=/usr/sbin/mysqld (code=exited, status=0/SUCCESS)
    Main PID: 666 (code=exited, status=0/SUCCESS)
      Status: "Server shutdown complete"
 May 29 10:08:33 ubunt4.localdomain systemd[1]: Starting MySQL Community Server…
 May 29 10:08:37 ubunt4.localdomain systemd[1]: Started MySQL Community Server.
 May 29 11:53:07 ubunt4.localdomain systemd[1]: Stopping MySQL Community Server…
 May 29 11:53:08 ubunt4.localdomain systemd[1]: mysql.service: Succeeded.
 May 29 11:53:08 ubunt4.localdomain systemd[1]: Stopped MySQL Community Server.

Eh bien, le service MySQL ne fonctionne pas.

Maintenant, redémarrez le serveur MySQL sans vérification des permissions en exécutant la commande suivante :

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

Ici, l'option --skip-grant-tables vous permet de vous connecter au serveur de base de données MySQL sans mot de passe et avec tous les privilèges. L'option --skip-networking est utilisée pour empêcher les autres clients de se connecter au serveur de base de données. Et, le symbole esperluette (&) est utilisé pour exécuter la commande en arrière-plan, afin que vous puissiez taper les autres commandes données dans les étapes suivantes. Veuillez noter que la commande ci-dessus est dangereuse et que votre serveur de base de données devient peu sûr et vulnérable aux menaces de sécurité. Vous devriez exécuter cette commande uniquement pendant une courte période pour réinitialiser le mot de passe.

Vous pouvez voir l'erreur suivante :

2021-05-29T12:00:19.991826Z mysqld_safe Logging to '/var/log/mysql/error.log'.
2021-05-29T12:00:19.996942Z mysqld_safe Directory '/var/run/mysqld' for UNIX socket file don't exists.

Si vous voyez cette erreur, créez le répertoire manquant (c'est-à-dire /var/run/mysqld) et définissez les permissions appropriées comme ci-dessous.

$ sudo mkdir -p /var/run/mysqld
$ sudo chown -R mysql:mysql /var/run/mysqld

Essayez maintenant à nouveau de démarrer le serveur MySQL sans mot de passe et avec les privilèges root :

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

Ensuite, connectez-vous au serveur MySQL en utilisant la commande :

$ mysql

Vous serez amené à l'invite du shell mysql.

 Welcome to the MySQL monitor.  Commands end with ; or \g.
 Your MySQL connection id is 7
 Server version: 8.0.25-0ubuntu0.20.04.1 (Ubuntu)

 Copyright (c) 2000, 2021, Oracle and/or its affiliates.

 Oracle is a registered trademark of Oracle Corporation and/or its
 affiliates. Other names may be trademarks of their respective
 owners.

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

Puisque nous nous sommes connectés sans charger les tables de privilèges (car nous avons utilisé l'option --skip-grant-tables), nous ne pouvons pas utiliser la commande ALTER USER pour réinitialiser le mot de passe. Chargeons donc les tables de privilèges en utilisant la commande :

mysql> FLUSH PRIVILEGES;

Maintenant, exécutez la commande suivante pour mettre à jour le mot de passe de l'utilisateur root de mysql :

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'P@ssw0rd123#@!';

Dans la commande ci-dessus, remplacez P@ssw0rd123#@! par votre propre mot de passe. Veuillez noter que si vous avez activé le composant Valider le mot de passe, vous devez utiliser un mot de passe fort.

Enfin, quittez l'invite mysql :

mysql> exit

Réinitialiser le mot de passe de l'utilisateur root MySQL sous Linux

Enfin, arrêtez le serveur de base de données en cours d’exécution que vous avez démarré précédemment avec l’option --skip-grant-tables. Pour ce faire, exécutez :

$ sudo mysqladmin -u root -p shutdown

Il vous sera demandé de saisir votre mot de passe sudo suivi du mot de passe de l'utilisateur root de MySQL que vous avez défini à l'étape précédente.

[sudo] password for ostechnix: 
Enter password: 
2021-05-29T12:09:38.425737Z mysqld_safe mysqld from pid file /var/lib/mysql/ubunt4.localdomain.pid ended
[1]+  Done                    sudo mysqld_safe --skip-grant-tables --skip-networking

Si la commande ci-dessus ne fonctionne pas, trouvez le fichier .pid qui contient l'identifiant du processus du serveur. Le fichier PID est généralement disponible dans le répertoire /var/lib/mysql/ ou /var/run/mysqld/ ou /usr/local/mysql/data/ selon votre distribution, le nom d'hôte et la configuration. En général, le nom du fichier a une extension .pid et commence soit par mysqld soit par le nom d'hôte de votre système.

Dans mon cas, c’est "/var/lib/mysql/ubuntuserver.pid".

Donc, j'ai arrêté l'instance du serveur de base de données avec la commande :

$ sudo kill `/var/lib/mysql/ubuntuserver.pid`

Veuillez utiliser le back-tick pour mentionner le chemin du fichier.

Nous pouvons également trouver le pid de MySQL en utilisant les commandes ps et grep comme suit :

$ ps ax | grep mysql

Exemple de sortie :

1930 pts/0 S 0:00 sudo mysqld_safe --skip-grant-tables --skip-networking
1931 pts/0 S 0:00 /bin/sh /usr/bin/mysqld_safe --skip-grant-tables --skip-networking
2091 pts/0 Sl 0:28 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --skip-grant-tables --skip-networking --log-error=/var/log/mysql/error.log --pid-file=ubuntuserver.pid

Tuez-le manuellement comme ci-dessous :

$ sudo kill <PID>

Ou, tuez tous les services MySQL :

$ sudo  killall mysql

Maintenant, démarrez normalement le service MySQL en utilisant la commande :

$ sudo systemctl start mysql

Maintenant, connectez-vous au serveur MySQL avec le nouveau mot de passe :

$ mysql -u root -p

Exemple de sortie :

Connectez-vous au serveur MySQL avec le nouveau mot de passe root

Connectez-vous au serveur MySQL avec le nouveau mot de passe root

2. Réinitialiser le mot de passe root MySQL avec un fichier de mot de passe

L'autre façon de réinitialiser le mot de passe root de MySQL est d'utiliser la variable système init_file.

Arrêter le service MySQL :

$ sudo systemctl stop mysql

Créez un fichier texte, par exemple ostechnix.txt :

$ vi ostechnix.txt

Ajoutez la ligne suivante dedans :

ALTER USER 'root'@'localhost' IDENTIFIED BY 'P@ssw0rd123#@!';

Remplacez P@ssw0rd123#@! par votre propre mot de passe dans la ligne ci-dessus. Si vous avez activé le plugin Validate Password, vous devez spécifier un mot de passe fort. Enregistrez et fermez le fichier.

Maintenant, démarrez le serveur MySQL avec la variable système init_file qui pointe vers le fichier ostechnix.txt :

$ sudo mysqld --init-file=/home/sk/ostechnix.txt &

Cette commande exécutera le contenu du fichier ostechnix.txt et mettra à jour le mot de passe du compte root@localhost avec le nouveau mot de passe indiqué dans le fichier ostechnix.txt et enfin démarrera le serveur MySQL.

Arrêtez maintenant et redémarrez le serveur MySQL normalement :

$ sudo systemctl stop mysql
$ sudo systemctl start mysql

Enfin, supprimez le fichier de mot de passe, c'est-à-dire ostechnix.txt.

$ rm /home/sk/ostechnix.txt

Vous pouvez maintenant vous connecter au serveur MySQL avec le nouveau mot de passe en utilisant la commande :

$ mysql -u root -p

Nous avons également publié une méthode légèrement différente pour réinitialiser le mot de passe root de MySQL. Consultez le guide suivant pour plus de détails :

>> How To Reset Root Password In MySQL 8 On Ubuntu Linux

Conclusion

Dans ce guide, nous avons appris deux manières différentes de réinitialiser le mot de passe oublié de l'utilisateur root MySQL dans les systèmes d'exploitation Linux. Si vous avez perdu le mot de passe de votre compte administrateur de base de données, vous pouvez facilement le réinitialiser en quelques minutes.

Ressource :

  • Manuel de référence MySQL 8.0