web-dev-qa-db-fra.com

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

J'essaie de réinitialiser le mot de passe root après MysqlPasswordReset mais lorsque j'essaie de démarrer le serveur avec --skip-grant-tables, le serveur ne démarre pas.

  • Ubuntu 16.04.1 LTS (x86_64 générique GNU/Linux 4.4.0-59)
  • 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.

Essayer de commencer avec --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 commencer avec mysql_safe (error.log 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.
28
pedronalbert

J'ai trouvé que mysql.sock est supprimé lorsque le service mysql est arrêté et que mysqld_safe ne peut pas le créer (je n'ai pas trouvé la raison), ma solution a donc été de sauvegarder le dossier chaussettes et de restaurer avant de démarrer mysqld_safe

Démarrer le serveur

$ Sudo service mysql start

Aller au dossier chaussette

$ cd /var/run

Sauvegarder 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émarrer mysqld_safe

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

Init mysql Shell

mysql -u root

Changer le mot de passe

FLUSH PRIVILEGES;

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

pedronalbert's answer ci-dessus a fonctionné pour moi mais la dernière étape est maintenant obsolète et jette l'avertissement suivant:

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

Utilisez cette commande à la place:

SET PASSWORD FOR root = '<plaintext_password>';
5
auhsor

J'ai essayé de nombreuses façons, notamment celle de @Pedronalbert, mais je ne fonctionne toujours pas.

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

Cela fonctionne dans mon VM CentOS 7.

1
gevge