Comment réinitialiser ou récupérer le mot de passe du compte administrateur pour MySQL?

14

J'ai une base de données MySQL dont j'ai "hérité" et je n'ai pas reçu les informations d'identification d'administrateur. J'ai cependant accès à la box sur laquelle il fonctionne. Existe-t-il un moyen de récupérer les informations d'identification d'administrateur ou d'en créer de nouvelles?

slolife
la source

Réponses:

15

Lisez et exécutez le chapitre sur la réinitialisation du mot de passe root dans le manuel de référence MySQL.

Cette procédure démarre le démon mysql sans autorisation vous permettant de vous connecter sans fournir d'informations d'identification. Dans ce mode, vous pouvez vous connecter normalement et réinitialiser les mots de passe et les autorisations. Ensuite, n'oubliez pas de redémarrer mysql avec l'autorisation appropriée en place.

David Schmitt
la source
6

S'il s'agit d'une boîte Debian / Ubuntu, il existe un compte spécial équivalent racine appelé debian-sys-maint . Vous pouvez lire le mot de passe dans /etc/mysql/debian.cnf

En utilisant ce mot de passe, vous pouvez vous connecter à mysql en tant que debian-sys-maint en utilisant:

mysql --defaults-file=/etc/mysql/debian.cnf mysql

Une fois connecté, procédez comme suit:

update user set password=password('<new password>') where user='root';
flush privileges;
quit;

root devrait maintenant être accessible en utilisant votre nouveau mot de passe:

mysql -uroot -p
Brent
la source
3

Mon utilisateur root n'existait pas. Sur

CREATE USER root@localhost;

j'ai eu

ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement

La solution était de

mysqld_safe  --skip-grant-tables &
mysql
INSERT INTO user (Host,User,Password) VALUES ('localhost', 'root', 'changethispassword');
UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';
FLUSH PRIVILEGES;

Après cela, j'ai ajouté tous les privilèges un par un avec un peu d'aide:

mysql mysql -e "SELECT * FROM user WHERE User='root'\G"|grep N

(et celui-ci pourrait et devrait être automatisé davantage)

Remarque: trouver le nombre correct de «Y» dans le INSERTest un PITA.

kqw
la source
0

Comme les étapes du manuel de référence MySQL ne sont pas très claires, j'essaie de répondre ici dans un langage plus simple. (cette réponse concerne les utilisateurs de MacBook OSX):

  1. Comme nous ne connaissons pas le mot de passe actuel, le serveur MySQL doit exécuter en ignorant / contournant les informations de connexion actuelles. Demandez au serveur MySQL de sauter la table des autorisations d'accès en:
    • Arrêtez votre serveur MySQL (s'il est déjà en cours d'exécution).
    • Trouvez votre fichier de configuration MySQL, my.cnf. (Pour moi, il a été placé @ /Applications/XAMPP/xamppfiles/etc. Vous pouvez simplement rechercher si vous ne le trouvez pas).
    • Ouvrez le my.cnffichier dans n'importe quel éditeur de texte.
    • Ajoutez "skip-grant-tables"(sans guillemets) à la fin de la [mysqld]section et enregistrez le fichier.
    • Démarrez maintenant votre serveur MySQL. Cela commencera par l' skip-grant-tablesoption.
  2. Ouvrir Terminalet exécuter la mysqlcommande
  3. Exécuter la commande mysql> UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root';
  4. Exécuter la commande mysql> FLUSH PRIVILEGES;
  5. Exécuter la commande mysql> exit
  6. Redémarrez le serveur MySQL.
Saurabh Hooda
la source