impossible de réinitialiser le mot de passe root de mysql

28

J'ai besoin de réinitialiser le mot de passe root de mon installation mysql locale mais cela ne me le permettra pas. J'ai essayé ça:

$ sudo /etc/init.d/mysql stop
 * Stopping MySQL database server mysqld                                                                                                              [ OK ] 
[1]-  Exit 1                  sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking
[2]+  Exit 1                  sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking
reg@regDesktopHome:~$ sudo mysqld --skip-grant-tables &
[1] 13651
reg@regDesktopHome:~$ 140627 19:02:02 [Warning] Using unique option prefix key_buffer instead of key_buffer_size is deprecated and will be removed in a future release. Please use the full name instead.

reg@regDesktopHome:~$ mysql -u root mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
reg@regDesktopHome:~$ sudo mysql -u root mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
[1]+  Exit 1                  sudo mysqld --skip-grant-tables

Comment obtenir la réinitialisation du mot de passe? modifier 1 J'ai obtenu ceci:

$ ps ax| grep mysql
16515 ?        Ssl    0:00 /usr/sbin/mysqld
16551 pts/23   S+     0:00 grep --color=auto mysql
reg@regDesktopHome:~/semios/v3upgrade$ sudo kill -9 16515
reg@regDesktopHome:~/semios/v3upgrade$ ps ax| grep mysql
16678 ?        Ssl    0:00 /usr/sbin/mysqld
16715 pts/23   S+     0:00 grep --color=auto mysql
reg@regDesktopHome:~/semios/v3upgrade$ mysql -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

on dirait qu'un processus redémarre automatiquement mysql dès que je le tue ...

stdcerr
la source

Réponses:

43

Veuillez d'abord essayer d'utiliser

mysql -u root -p

et entrez votre mot de passe (si vous vous en souvenez) à l'invite pour vous connecter en tant qu'utilisateur root sql (notez que le commutateur -pest pour le mot de passe).

Si vous devez vraiment réinitialiser votre mot de passe root pour mysql, voici un moyen simple - reconfigurez le paquet avec dpkg-reconfigure.

Étapes faciles pour réinitialiser le mot de passe racine mySQL:

  1. Vérifiez la version de votre mysql-server;

    apt-cache policy mysql-server
    

    et voyez la ligne qui montre la version installée entre autres informations. par exemple pour mon installation c'est:

    Installed: 5.5.37-0ubuntu0.12.04.1
    

    (De cela, je sais que j'ai mysql-server-5.5installé dans mon système.)

  2. Démarrez la reconfiguration avec:

    sudo dpkg-reconfigure mysql-server-*.*
    

    mysql-server-*.*doit être remplacé par la version que vous avez. (pour moi ce serait mysql-server-5.5). Cela arrêtera le démon de base de données. Une invite apparaîtra alors où vous devrez entrer votre nouveau mot de passe et confirmer la reconfiguration.

    snap1

    Le démon sera automatiquement démarré une fois la reconfiguration terminée.

  3. Vous pouvez ensuite vous connecter avec:

    mysql -u root -p
    

    et démarrez vos tâches d'administration de base de données.

Les références:

  1. https://help.ubuntu.com/community/MysqlPasswordReset [qui serait bientôt nettoyé comme indiqué dans la page.]

  2. Guide du serveur Ubuntu relatif à votre version spécifique.

précis
la source
2
Peut confirmer que cela a dpkg-reconfigure mariadb-server-10.1fonctionné pour MariaDB, contrairement à toutes les autres solutions. Merci pour ça.
liviucmg
19
dpkg-reconfiguren'a pas demandé de mot de passe pour moi .. existe-t-il un moyen de le forcer?
Unirgy
15
N'a pas travaillé pour moi. J'ai utilisé la commande comme ci-dessus et j'ai obtenu "Vérifier si une mise à jour est nécessaire. Cette installation de MySQL est déjà mise à niveau vers 5.7.13, utilisez --force si vous avez encore besoin d'exécuter mysql_upgrade". L'utilisation de --force a donné la même réponse.
Anthony Scaife
5
Apparemment, cela ne fonctionne plus.
dpi
1
@Paulo Henrique Non. Compte tenu de la situation, nous avons décidé que la meilleure utilisation de notre temps était une réinstallation complète du serveur.
Anthony Scaife
21

Référence tirée de ce blog:

Étape 1: Arrêtez le service MySQL.

sudo service mysql stop

Étape 2: Tuez tous les mysqld en cours d'exécution.

sudo killall -9 mysqld

Étape 3: démarrage de mysqld en mode sans échec.

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

Étape 4: Démarrez le client mysql

mysql -u root

Étape 5: Après une connexion réussie, veuillez exécuter cette commande pour modifier un mot de passe.

FLUSH PRIVILEGES;

Étape 6: Vous pouvez mettre à jour le mot de passe root de mysql.

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

pour mysql> 5.7 utilisez ceci au lieu de ci-dessus:

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

Étape 7: veuillez exécuter cette commande.

FLUSH PRIVILEGES;

Étape 8: Quittez la console mysql

exit

Étape 9: tuer mysqld_safe et démarrer mysql

sudo killall mysqld_safe && sudo service mysql start
Anvesh
la source
1
devrait être sudo service mysql stop, passudo stop mysql
knocte
1
aussi, à la fin, il manque les étapes sudo killall mysqld_safe && sudo service mysql start, puis essayez de vous
reconnecter
3
Pour MYSQL 5.7, la syntaxe de changement de mot de passe est devenueALTER USER root IDENTIFIED BY 'NEW_PASSWORD_HERE'
Tarek Fadel
7
REMARQUE ! Il y a une nouvelle bête dans MySQL 5.7 appelée auth_socket. Si vous installez mysql sans mot de passe root, la bête vous attaquera et vous perdrez 50 points de vie. À l'étape 6 ci-dessus, vous devez ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NEWPASS';. Vous pouvez en lire plus ici . Théoriquement (je n'ai pas essayé), vous devriez pouvoir vous connecter à mysql sans mot de passe si vous "sudo su -" pour devenir root.
olafure
3
Et au cas où ALTER USER ...cela ne fonctionnerait pas, utilisezUPDATE mysql.user SET authentication_string = PASSWORD('NEWPASS'), plugin = 'mysql_native_password' WHERE User = 'root' AND Host = 'localhost';
olafure
9

Sous Ubuntu 16.04 et mysql-server-5.7, la bonne réponse est le dernier commentaire d'Olafure, dpkg-reconfigure mysql-server-5.7ne fonctionne plus.

sudo service mysql stop
sudo killall mysqld
sudo mysqld_safe --skip-grant-tables --skip-networking &
mysql -u root

Maintenant dans la console mysql >mysql

USE mysql;
UPDATE user SET authentication_string=PASSWORD('newpass') WHERE user='root';
FLUSH PRIVILEGES;
\q

Redémarrez le bon mysql processus

sudo killall mysqld
sudo service mysql start

Vérifiez votre nouveau mot de passe

mysql -u root -p
Enter password: newpass
mysql>
Pierre-Damien
la source
5
A l' mysqld_safeexécution, je reçois l'erreur: Directory '/var/run/mysqld' for UNIX socket file don't exists.. J'ai donc couru sudo mkdir /var/run/mysqld; sudo chown mysql /var/run/mysqldet le reste de la réponse ci-dessus fonctionne. Est-ce un bug sur Ubuntu 16? Je n'ai jamais rencontré tous ces problèmes de mise à jour des mots de passe auparavant.
Chester
@Chester merci beaucoup !! C'était le seul moyen qui a finalement fonctionné maintenant, car toutes les autres solutions génèrent une erreur. (Ubuntu-Server 16.04 ici) Cela devrait être ajouté à la réponse
derHugo
3

À partir de MySQL 5.7 , lors de l'installation initiale, si vous laissez le mot de passe vide, alors pour cet utilisateur, l'authentification sera basée sur le auth_socketplugin.

La bonne façon de changer le mot de passe sera:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'test';

https://www.percona.com/blog/2016/03/16/change-user-password-in-mysql-5-7-with-plugin-auth_socket/

Barun
la source
C'était mon cas exact (mot de passe vide lors de l'installation dans mysql 5.7) et c'était la seule solution pour mon cas.
cherouvim
Je reçois le message:ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
user2513149
@ user2513149 Veuillez redémarrer votre serveur MySQL sans --skip-grant-tablesoption et voir cette solution fonctionne.
Barun
@Barun, non, sans --skip-grant-tablesoption, je ne peux même pas me connecter à MySQL en tant que root. Il ditERROR 1698 (28000): Access denied for user 'root'@'localhost'
user2513149
Résolu! J'ai dû me connecter à la console MySQL régulière (pas mysqld_safe) en tant que root sans mot de passe. J'ai Ubuntu 18.04 et mysql-server-5.7. Cette réponse m'a aidé askubuntu.com/a/767252/585252 (voir la partie inférieure)
user2513149
1

Rien du reste des réponses ne semblait fonctionner pour moi. Voici ma solution:

sudo service mysql stop
sudo mysqld_safe &
sudo mysql -u root

Là-dedans:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
FLUSH PRIVILEGES;
QUIT;

Ensuite:

sudo killall mysqld
sudo service mysql start
sudo mysql -u root -p
Wtower
la source
1
Le reste ne fonctionne pas pour moi non plus ... ni votre solution malheureusement: obtenez toujours cette erreur 2017-05-30T06:33:22.291126Z mysqld_safe Logging to syslog. 2017-05-30T06:33:22.294375Z mysqld_safe Logging to '/var/log/mysql/error.log'. 2017-05-30T06:33:22.296874Z mysqld_safe Directory '/var/run/mysqld' for UNIX socket file don't exists.
derHugo
1
C'est le seul conseil qui fonctionne pour moi parmi les six suggestions que j'ai essayées, mais j'ai ajouté le bit de @Chester ci-dessus pour éviter l'erreur "Le fichier socket UNIX n'existe pas": sudo mkdir /var/run/mysqld; sudo chown mysql /var/run/mysqldc'est sur mysql 5.7 et ubuntu 18.04 .
twowheeler
0

Créez un fichier avec ceci:

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

Arrêtez le serveur mysql et exécutez ceci:

mysqld_safe --init-file=/home/me/mysql-init &

Vérifiez ici pour plus de détails: http://dev.mysql.com/doc/refman/5.0/en/resetting-permissions.html

Elier
la source