GNU/Linux >> Tutoriels Linux >  >> Linux

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

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.


Linux
  1. Comment réinitialiser votre mot de passe racine MySQL sur CentOS 6

  2. Comment réinitialiser le mot de passe root MySql

  3. Comment réinitialiser le mot de passe root MySql

  4. Comment réinitialiser le mot de passe racine MySQL ou MariaDB

  5. Réinitialiser le mot de passe root sur Rocky Linux - Comment faire ?

Comment réinitialiser le mot de passe root dans MySQL 8 sur Ubuntu Linux

Comment réinitialiser le mot de passe administrateur WordPress via MySQL

Mot de passe Linux oublié sur WSL ? Voici comment le réinitialiser facilement

Comment réinitialiser le mot de passe root MySQL

Comment changer/réinitialiser le mot de passe racine MySQL ou MariaDB

Comment réinitialiser le mot de passe root MySQL 8.0 sur Centos 7.x ?