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.
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.
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');
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>';
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.