web-dev-qa-db-fra.com

Réinitialisation du mot de passe root MySQL lorsque le mot de passe actuel est inconnu

J'ai hérité d'un serveur sur lequel mysql est installé. Je n'ai pas le mot de passe mysql pour aucun utilisateur, même pas root (même si j'ai le mot de passe root Linux). De plus, je ne suis au courant que d’un compte d’autre compte utilisateur root, et qu’on n’a pas le privilège d’exécuter une action, pas même SELECT.

J'ai essayé d'arrêter mysql servicw, de redémarrer avec l'option skip grant tables et de me connecter sans mot de passe: 

service mysqld stop
service mysqld start --skip-grant-tables &
mysql -u root

Mais obtenez l'erreur suivante:

Access denied for user 'root'@'localhost' (using password: NO)

J'ai ensuite essayé de réinitialiser le mot de passe:

mysqladmin -u root password 'newpw'

Mais cela donne aussi une erreur d'accès refusé.

J'ai aussi essayé de me connecter en tant qu'autre utilisateur (sans pw) et d'exécuter la commande suivante:

UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root';

et j'ai cette erreur:

ERROR 1142 (42000): UPDATE command denied to user ''@'localhost' for table 'user'

J'ai aussi essayé de supprimer mysql et de réinstaller, mais les erreurs sont les mêmes.

Aucune suggestion?

18
Bad Programmer

Deux options:

Si vous voulez utiliser --skip-grant-tables, vous devrez peut-être démarrer directement mysqld car les options ne sont pas nécessairement transmises par le script init.

Sinon, essayez ces instructions à partir du manuel.

7
Michael Mior

essayez Sudo dpkg-reconfigure mysql-server-5.5 et on vous demandera le nouveau mot de passe root. 

Remplacez la version 5.5 par votre version actuelle de mysql-server

34
Amadu Bah

Vous devez vous assurer que vous exécutez la commande en tant que root à l'aide de la commande Sudo.

J'ai trouvé cette instruction pour réinitialiser le mot de passe mysql fonctionne bien.

En suivant cette procédure, vous désactiverez le contrôle d'accès sur le serveur MySQL. Toutes les connexions auront un accès root. C'est une bonne chose de débrancher votre serveur du réseau ou au moins de désactiver l'accès à distance.

Pour réinitialiser votre mot de passe mysqld, suivez ces instructions:

Stop the mysql demon process using this command :

       Sudo /etc/init.d/mysql stop

Start the mysqld demon process using the --skip-grant-tables option with this command

       Sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking &

Étant donné que vous ne vérifiez pas les données personnelles des utilisateurs à ce stade, il est plus sûr de désactiver le réseau. Dans Dapper,/usr/bin/mysqld ... ne fonctionnait pas. Cependant, mysqld --skip-grant-tables l'a fait.

start the mysql client process using this command

       mysql -u root

from the mysql Prompt execute this command to be able to change any password

       FLUSH PRIVILEGES;

Then reset/update your password

       SET PASSWORD FOR root@'localhost' = PASSWORD('password');

If you have a mysql root account that can connect from everywhere, you should also do:

       UPDATE mysql.user SET Password=PASSWORD('newpwd') WHERE User='root';

Alternate Method:

       USE mysql
       UPDATE user SET Password = PASSWORD('newpwd')
       WHERE Host = 'localhost' AND User = 'root';

And if you have a root account that can access from everywhere:

       USE mysql
       UPDATE user SET Password = PASSWORD('newpwd')
       WHERE Host = '%' AND User = 'root';

Pour l'une ou l'autre méthode, une fois que vous avez reçu un message indiquant qu'une requête a réussi (une ou plusieurs lignes affectées), supprimez les privilèges

FLUSH PRIVILEGES;

Puis arrêtez le processus mysqld et relancez-le avec la méthode classique:

Sudo /etc/init.d/mysql stop

Sudo /etc/init.d/mysql start

3
charles zeng

`UPDATE mysql.user SET Mot de passe = PASSWORD ('MyNewPass') WHERE User = 'root'; FLUSH PRIVILEGES;

Écrivez les instructions UPDATE et FLUSH sur une seule ligne. L'instruction UPDATE réinitialise le mot de passe de tous les comptes racine et l'instruction FLUSH indique au serveur de recharger les tables d'attribution en mémoire afin qu'il remarque le changement de mot de passe.`

2
harpej

Pour mysql 5.7.16 sur Ubuntu 16.04, cela fonctionnait:

  • login sans mot de passe:

    Sudo mysqld_safe --skip-grant-tables --skip-networking &

  • changer le mot de passe:

    SET PASSWORD FOR 'root' @ 'localhost' = 'mypass';

Solution trouvée sur Manuel de référence MySQL 5.7

0
Ula Karzelek