62 votes

Impossible de réinitialiser le mot de passe root avec --skip-grant-tables sur Ubuntu 16

Je suis en train d'essayer de réinitialiser le mot de passe root suivantes MysqlPasswordReset mais quand j'essaie de démarrer le serveur avec l'option --skip-grant-tables le serveur ne démarre pas

  • Ubuntu 16.04.1 LTS (GNU/Linux 4.4.0-59-générique x86_64)
  • mysql Ver 14.14 Distrib 5.7.17, pour Linux (x86_64)

Le serveur est en cours d'exécution

$ mysql -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

Arrêter le serveur

$ sudo /etc/init.d/mysql stop
[ ok ] Stopping mysql (via systemctl): mysql.service.

Essayez de démarrer avec l'option --skip-grant-tables

sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking &
[1] 9856

Se connecter sans mot de passe

$ mysql -u root
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
[1]+  Exit 1                  sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking

J'ai aussi essayé de démarrer avec mysql_safe (erreur.le journal est vide)

sudo mysqld_safe --skip-grant-tables
2017-02-01T16:33:31.382105Z mysqld_safe Logging to syslog.
2017-02-01T16:33:31.383942Z mysqld_safe Logging to '/var/log/mysql/error.log'.
2017-02-01T16:33:31.386058Z mysqld_safe Logging to '/var/log/mysql/error.log'.
2017-02-01T16:33:31.388009Z mysqld_safe Directory '/var/run/mysqld' for UNIX socket file don't exists.

163voto

pedronalbert Points 1244

J'ai trouvé que la base de données mysql.chaussette est supprimé lorsque le service mysql est arrêtée et mysqld_safe peut pas le créer (je ne pouvais pas trouver la raison), donc ma solution a été de sauvegarder la chaussette dossier et restaurer avant de commencer mysqld_safe

Démarrer le serveur

$ sudo service mysql start

Aller à la chaussette dossier

$ cd /var/run

Retour en haut de la chaussette

$ sudo cp -rp ./mysqld ./mysqld.bak

Arrêter le serveur

$ sudo service mysql stop

Restaurer la chaussette

$ sudo mv ./mysqld.bak ./mysqld

Début mysqld_safe

$ sudo mysqld_safe --skip-grant-tables --skip-networking &

Init shell mysql

mysql -u root

Changer de mot de passe

FLUSH PRIVILEGES;

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

5voto

auhsor Points 71

La réponse de pedronalbert ci-dessus a fonctionné pour moi, mais la dernière étape est maintenant obsolète et lance l'avertissement suivant:

Avertissement | 1287 | 'SET PASSWORD FOR = PASSWORD (' ')' est obsolète et sera supprimé dans une prochaine version. Veuillez utiliser SET PASSWORD FOR = '' à la place

Utilisez plutôt cette commande:

 SET PASSWORD FOR root = '<plaintext_password>';
 

4voto

gevge Points 11

J'ai essayé de nombreuses façons, y compris @pedronalbert 's, mais toujours pas de travail.

La façon dont je l'ai résolu est l'ajout de "skip-grant-tables" dans /etc/my.cnf puis démarrer le service mysql et la connexion mysql avec "mysql -u root" comme https://www.codero.com/knowledge-base/content/33/296/en/how-to-reset-your-root-mysql-password.html

Il fonctionne dans ma VM CentOS 7.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X