Avez-vous oublié votre mot de passe d'utilisateur root MySQL ? Pas de soucis! Ce guide vous guide à travers les étapes de réinitialisation du mot de passe de l'utilisateur racine MySQL dans les systèmes d'exploitation Linux. Les étapes 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 MySQL les anciennes versions, c'est-à-dire MySQL 5.7. Mais cette méthode ne fonctionnait pas avec la nouvelle version de MySQL 8. Si vous souhaitez réinitialiser le mot de passe root dans MySQL 8, suivez l'une des deux solutions de contournement indiquées ci-dessous.
Réinitialiser le mot de passe de l'utilisateur racine MySQL sous Linux
Comme je l'ai déjà mentionné, nous pouvons réinitialiser le mot de passe root MySQL de deux manières.
- La méthode générique,
- Utiliser
init_file
variable système.
1. Le moyen générique de réinitialiser le mot de passe root MySQL
Cette méthode fonctionnera quel que soit le système d'exploitation que vous utilisez. Je vous préviens que c'est un moins sécurisé façon, car nous allons démarrer le serveur MySQL avec le --skip-grant-tables
option. 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 à l'aide de 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 résultat :
● 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 ubuntu2004.localdomain systemd[1]: Starting MySQL Community Server… May 29 10:08:37 ubuntu2004.localdomain systemd[1]: Started MySQL Community Server. May 29 11:53:07 ubuntu2004.localdomain systemd[1]: Stopping MySQL Community Server… May 29 11:53:08 ubuntu2004.localdomain systemd[1]: mysql.service: Succeeded. May 29 11:53:08 ubuntu2004.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 autorisations en exécutant la commande suivante :
$ sudo mysqld_safe --skip-grant-tables --skip-networking &
Ici, --skip-grant-tables
L'option vous permet de vous connecter au serveur de base de données mysql sans mot de passe et avec tous les privilèges. Le --skip-networking
L'option est utilisée pour empêcher les autres clients de se connecter au serveur de base de données. Et, l'esperluette (&
) Le symbole est utilisé pour exécuter la commande en arrière-plan, vous pouvez donc taper les autres commandes indiquées dans les étapes suivantes. Veuillez garder à l'esprit que la commande ci-dessus est dangereuse et que votre serveur de base de données devient non sécurisé et vulnérable aux menaces de sécurité. Vous ne devez exécuter cette commande que 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-lui les autorisations appropriées comme ci-dessous.
$ sudo mkdir -p /var/run/mysqld
$ sudo chown -R mysql:mysql /var/run/mysqld
Essayez à 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 à l'aide de la commande :
$ mysql
Vous serez redirigé vers 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.
Depuis que nous nous sommes connectés sans charger les tables de subventions (parce que nous avons utilisé --skip-grant-tables
option), nous ne pouvons pas utiliser ALTER USER
commande pour réinitialiser le mot de passe. Alors chargeons les tables de subventions à l'aide de la commande :
mysql> FLUSH PRIVILEGES;
Maintenant, exécutez la commande suivante pour mettre à jour le mot de passe de l'utilisateur root mysql :
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '[email protected]#@!';
Dans la commande ci-dessus, remplacez [email protected]#@!
avec votre propre mot de passe. Veuillez noter que si vous avez activé Validate Password
composant, vous devez utiliser un mot de passe fort.
Enfin, quittez l'invite mysql :
mysql> exit
Enfin, arrêtez le serveur de base de données en cours d'exécution que vous avez démarré précédemment avec --skip-grant-tables
option. Pour ce faire, exécutez :
$ sudo mysqladmin -u root -p shutdown
Il vous sera demandé d'entrer votre sudo
mot de passe suivi de MySQL root
mot de passe utilisateur 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/ubuntu2004.localdomain.pid ended [1]+ Done sudo mysqld_safe --skip-grant-tables --skip-networking
Si la commande ci-dessus ne fonctionne pas, recherchez le fichier .pid file
qui contient l'ID de processus du serveur. Le fichier PID sera généralement disponible dans /var/lib/mysql/
ou /var/run/mysqld/
ou /usr/local/mysql/data/
répertoire en fonction de votre distribution, de votre nom d'hôte et de votre configuration. Généralement, le nom du fichier a une extension .pid et commence soit par mysqld
ou le nom d'hôte de votre système.
Dans mon cas, c'est "/var/lib/mysql/ubuntuserver.pid"
.
J'ai donc 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-tic pour mentionner le chemin du fichier.
Nous pouvons également trouver le pid MySQL en utilisant ps
et grep
commandes comme ci-dessous :
$ ps ax | grep mysql
Exemple de résultat :
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 le service MySQL normalement 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 résultat :
2. Réinitialiser le mot de passe root MySQL avec le fichier de mots de passe
L'autre façon de réinitialiser le mot de passe root mysql est d'utiliser init_file
variable système.
Arrêter le service MySQL :
$ sudo systemctl stop mysql
Créez un fichier texte, par exemple ostechnix.txt
:
$ vi ostechnix.txt
Ajoutez-y la ligne suivante :
ALTER USER 'root'@'localhost' IDENTIFIED BY '[email protected]#@!';
Remplacez [email protected]#@!
avec votre propre mot de passe dans la ligne ci-dessus. Si vous avez activé Validate Password
plugin, vous devez spécifier un mot de passe fort. Enregistrez et fermez le fichier.
Maintenant, démarrez le serveur MySQL avec le init_file
variable système qui pointe vers le ostechnix.txt
fichier :
$ sudo mysqld --init-file=/home/sk/ostechnix.txt &
Cette commande exécutera le contenu de ostechnix.txt
fichier et mettre à jour le [email protected]
mot de passe du compte avec le nouveau mot de passe mentionné dans le ostechnix.txt
fichier et enfin démarrer le serveur mysql.
Maintenant, arrêtez 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 un 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 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 d'administrateur de base de données, vous pouvez facilement le réinitialiser en quelques minutes.