2012-04-26 3 views
18

J'ai hérité d'un serveur sur lequel mysql est installé. Je n'ai pas le mot de passe mysql pour n'importe quel utilisateur, pas même root (bien que j'ai le mot de passe root linux). De plus, je ne suis au courant d'un autre compte d'utilisateur besdies root, et que l'on n'a pas de privilèges pour effectuer une action, même pas SELECT.Réinitialisation du mot de passe racine MySQL lorsque le mot de passe actuel n'est pas connu

J'ai essayé arrêter le servicw mysql, redémarrer avec l'option d'attribution de saut de tables, et juste vous connecter sans mot de passe:

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

Mais l'erreur suivante:

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

Je puis essayé de réinitialiser le mot de passe:

mysqladmin -u root password 'newpw' 

Mais cela donne également un accès refusé erro r.

J'ai essayé aussi vous connecter comme un autre utilisateur (sans pw) et l'exécution de la commande suivante:

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

et a obtenu cette erreur:

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

J'ai aussi essayé d'enlever mysql et la réinstallation , mais j'ai les mêmes erreurs.

Des suggestions?

+2

Essayez [ces instructions] (http://dev.mysql.com/doc/refman/5.0/en/resetting-permissions.html#resetting-permissions-unix) du manuel. –

+1

Notez que si vous voulez utiliser '--skip-grant-tables', vous devrez peut-être lancer directement mysqld car les options ne sont pas nécessairement transmises via le script init. –

+1

Cette question appartient vraiment à [Database Administrators] (http://dba.stackexchange.com/) ou [Super User] (http://superuser.com/), pas à SO. – eggyal

Répondre

7

Deux options:

Si vous souhaitez utiliser des tables-grant---skip vous devrez peut-être commencer mysqld que les options ne sont pas nécessairement transmis lors du script d'initialisation.

Sinon, essayez these instructions à partir du manuel.

2

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

Écrivez les instructions UPDATE et FLUSH chacune sur une seule ligne. L'instruction UPDATE réinitialise le mot de passe pour tous les comptes root, et l'instruction FLUSH indique au serveur de recharger les tables de subvention en mémoire afin qu'il remarque le changement de mot de passe. »

34

Essayez le sudo dpkg-reconfigure mysql-server-5.5 et le nouveau mot de passe root vous sera demandé .

Remplacez 5.5 avec votre version actuelle mysql-server

+3

Le moyen le plus pratique, rapide et élégant de Debian. Fonctionne comme un charme –

+3

Ne fonctionne pas pour la définition du mot de passe à aucun mot de passe. Dans ce cas, définissez n'importe quel mot de passe, connectez-vous à mysql et 'SET PASSWORD pour root @ localhost = PASSWORD ('');' – bartekbrak

+0

C'est ce que j'ai utilisé et ça a marché –

0

Dans mon cas, se passait même, mais je faisais erreur dans la connexion à l'invite de mysql. Je faisais par mysql au lieu de mysql -u root -p

3

Vous devez vous assurer que vous exécutez la commande en tant que root en utilisant la commande sudo.

J'ai trouvé ce instruction pour réinitialiser le mot de passe mysql fonctionne bien. En suivant cette procédure, vous allez désactiver 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 il suffit de suivre les instructions suivantes:

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 & 

Parce que vous ne vérifiez pas privs utilisateur à ce stade, il est plus sûr de désactiver le réseau. Dans Dapper,/usr/bin/mysqld ... n'a pas fonctionné. 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 [email protected]'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 les deux méthodes, une fois avoir reçu un message indiquant une requête de succès (une ou plusieurs lignes affectées), les privilèges chasse d'eau:

FLUSH PRIVILEGES;

Ensuite, arrêter le processus mysqld et relancer avec la manière classique:

sudo /etc/init.d/mysql arrêter

sudo /etc/init.d/mysql start

0

Pour MySQL 5.7.16 sur Ubuntu 16.04 cela a fonctionné:

  • connexion sans mot de passe:

    Sudo mysqld_safe --skip-grant-tables --skip-réseau &

  • Changer mot de passe:

    SET POUR MOT DE PASSE 'root' @ 'localhost' = 'mypass';

solution Trouvé sur MySQL 5.7 Reference Manual

Questions connexes