Dans cet article, je vais vous montrer comment réinitialiser le mot de passe root MySQL de deux manières différentes. De plus, les deux méthodes fonctionnent avec le fork MariaDB sans Oracle.
Pourquoi ?
Il y a deux raisons principales pour lesquelles il faudrait réinitialiser le mot de passe root :
- vous avez oublié ce mot de passe
- vous ne savez pas ce mot de passe
Il peut y avoir de nombreuses raisons de ne pas connaître le mot de passe :vous n'avez jamais connu le mot de passe et l'ancien DBA a disparu ; quelqu'un a changé pour des raisons amusantes ou malveillantes ; il est 3h du matin, le système plante et le dba est en vacances dans un autre pays, etc.
Le fait est qu'un matin, vous devez remplir la base de données et vous retrouver dans cette situation :
Je suppose que vous avez un superutilisateur (c'est-à-dire su ou sudo à la racine) l'accès au système d'exploitation. Mon système d'exploitation dans ce tutoriel est Debian Linux.
Les deux méthodes nécessitent que vous arrêtiez le service mysql avant. Faites-le avec (n'oubliez pas de su/sudo si nécessaire):
# service mysql stop
Méthode 1 :
Créez un fichier avec la commande SQL pour définir un nouveau mot de passe root que nous utiliserons au démarrage de mysql. Vous pouvez utiliser n'importe quel éditeur de texte ou simplement taper :
# echo "ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword';" > passreset.sql
Si vous choisissez l'éditeur de texte, créez un fichier avec uniquement la partie en gras. Bien sûr, choisissez un réel mot de passe, facile à retenir et difficile à découvrir.
Et démarrez-le manuellement avec l'utilisateur mysql ( -u mysql) et avec le fichier que nous avons créé auparavant (–init-file:passreset.sql). La ligne de commande complète serait :
# mysqld -u mysql --init-file=/var/lib/mysql/passreset.sql
Attendez le message :mysqld :prêt pour les connexions . Ouvrez ensuite une autre console pour tester votre nouveau mot de passe root :
Méthode 2 :
Dans le passé, j'ai vu comment réinitialiser le mot de passe root mysql plusieurs fois sur Internet. Lors du premier essai ce matin n'a pas fonctionné pour moi, mais j'ai trouvé une solution de contournement.
Nous allons utiliser ce commutateur de la commande mysqld :
--skip-grant-tables Start without grant tables. This gives all users FULL ACCESS to all tables.
Cela m'a laissé un accès complet à toutes les tables. La procédure consiste à se connecter à mysql et à exécuter la commande ALTER USER que nous avons vue dans la méthode précédente, mais j'ai eu une erreur concernant l'exécution de mysqld avec skip-grant-tables.
La solution consiste à exécuter mysqld avec le commutateur skip-grant-tables et en utilisant l'utilisateur mysql. La ligne de commande complète est :
# mysqld -u mysql --skip-grant-tables
Et, dans une autre console, videz les privilèges avant la mise à jour, puis videz à nouveau les privilèges :
# mysql -u root
MariaDB (none) > flush privileges;
MariaDB (none) > ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword';
MariaDB (none) > flush privileges;
MariaDB (none) > ^DBye
Terminer
Vous pouvez maintenant arrêter mysql et le démarrer normalement. Dans mon cas, ctrl-c n'a pas fonctionné pour l'arrêter, je dois tuer le processus démarré manuellement avant :
# killall mysqld
# service mysql start
Et ça y est, avec l'une de ces méthodes, vous reprenez le contrôle de votre MySQL ou MariaDB.