Mot de passe MySQL expiré. Impossible de se connecter

87

J'ai juste essuyé mon Mac et fait une nouvelle installation d'El Capitan. J'ai du mal à me connecter à Mysql maintenant. Après avoir suivi un processus de configuration de serveur Web, j'ai créé un simple fichier de test PHP:

<?php
  $conn = new mysqli("127.0.0.1", "root", "xxxxxxxx");
  if ($conn->connect_error) echo "Connection failed: " . $conn->connect_error; 
  else echo "Connected successfully";
  phpinfo();
?>

Lorsque je l'exécute, j'obtiens cette erreur:

Warning: mysqli::mysqli(): (HY000/1862): Your password has expired. To log in you must change it using a client that supports expired passwords. in /Users/rich/Documents/DESIGN/test/index.php on line 3
Connection failed: Your password has expired. To log in you must change it using a client that supports expired passwords.

Je n'ai jamais vu cette réponse d'une connexion auparavant. Comment résoudre ce problème si je ne parviens pas à me connecter?

ÉDITER

Dans le terminal, j'ai entré la commande:

mysql -u root -p

Cela m'a demandé mon mot de passe (actuel) que j'ai mis. J'ai maintenant accès aux commandes mysql mais tout ce que j'essaye entraîne cette erreur:

ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

Comment réinitialiser le mot de passe en utilisant ALTER USER?

CaribouCode
la source
J'ai le même problème.
Rohan Sanap
c'est vraiment ennuyeux qu'un service entier puisse être arrêté à cause de cela
tofutim
1
Essayez de courir/usr/local/mysql/bin/mysqladmin -u root -p password
Connor Leech
1
@ConnorLeech a passé des heures à essayer de réinitialiser le mot de passe root expiré MariaDB de homebrew, mais cela a résolu le problème pour moi - merci!
Alex Holsgrove

Réponses:

179

J'ai donc finalement trouvé la solution moi-même.

Tout d'abord, je suis entré dans le terminal et j'ai tapé:

mysql -u root -p

Cela a demandé mon mot de passe actuel que j'ai tapé et m'a donné accès pour fournir plus de commandes mysql. Tout ce que j'ai essayé à partir d'ici a donné cette erreur:

ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

Ceci est déroutant car je ne pouvais pas réellement voir un moyen de réinitialiser le mot de passe à l'aide de l' ALTER USERinstruction, mais j'ai trouvé une autre solution simple:

SET PASSWORD = PASSWORD('xxxxxxxx');

CaribouCode
la source
Cela a-t-il fonctionné correctement? A-t-il donné une erreur après avoir suivi ces étapes à l'avenir?
Rohan Sanap
Merci beaucoup! Cela a fonctionné pour moi aussi. Cela m'a fait gagner beaucoup d'heures.
TBJ
5
J'utilise la version 5.7.9 de MySQL et cela est maintenant obsolète car ce message d'erreur de l'invite de commande MySQL nous l'indique: Avertissement (Code 1287): 'SET PASSWORD = PASSWORD (' <plaintext_password> ')' est obsolète et sera supprimé dans une version future. Veuillez utiliser SET PASSWORD = '<plaintext_password>' à la place
Fabiano
Je suis désolé que cela n'ait pas fonctionné pour moi, mais l'alter utilisateur posté par Piotr N. a fonctionné. Peut-être fonctionnant sur une version différente de MySQL.
MG Developer
89

Tout d'abord, j'utilise:

 mysql -u root -p

Donner mon mot de passe actuel pour le «root». Suivant:

mysql> ALTER USER `root`@`localhost` IDENTIFIED BY 'new_password',
       `root`@`localhost` PASSWORD EXPIRE NEVER;

Changez 'new_password'pour un nouveau mot de passe pour l'utilisateur «root».
Cela a résolu mon problème.

Piotr N.
la source
3
Obtention d'erreur: ERREUR 1064 (42000): vous avez une erreur dans votre syntaxe SQL; Vérifiez le manuel qui correspond à votre version de serveur MySQL pour la bonne syntaxe à utiliser près de 'USER' root '@' localhost 'IDENTIFIED BY' newPassword ',' root '@' localhost 'PASSWORD' à la ligne 1
Ketav Chotaliya
Cela a bien fonctionné. ALTER USER 'username' @ '%' IDENTIFIED BY 'your_password', 'user' @ '%' PASSWORD EXPIRE JAMAIS;
TheLegendaryCopyCoder
1
Obtenir une erreur: ERROR 1805 (HY000): Column count of mysql.user is wrong. Expected 45, found 46. The table is probably corrupted
Pulkit Pahwa
52

mysqladmin -u [username] -p passworda travaillé pour moi sur OS X El Capitan et MySQL 5.7.12 Community Server. Exemple:

$ /usr/local/mysql/bin/mysqladmin -u root -p password
Enter password:
New password:
Confirm new password:
Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.

Ceci est similaire à la réponse de pavan sachi, mais avec des invites de mot de passe.

Mon erreur était "# 1862 - Votre mot de passe a expiré. Pour vous connecter, vous devez le modifier à l'aide d'un client prenant en charge les mots de passe expirés." à l'écran de connexion phpMyAdmin pour la première fois.

Trousse
la source
A travaillé pour moi aussi, OS X El Capital et MySQL 5.17.13! Merci pour cela!
Zeke
5
Il est à noter que le mot «mot de passe» n'est pas un espace réservé , alors que «root» est le nom de l'utilisateur que vous souhaitez mettre à jour:mysqladmin -u [username] -p password
random_user_name
C'est la seule chose qui (apparemment) a fonctionné pour moi sous Linux (Fedora 25). Merci.
Avinash Meetoo
Alléluia!! meilleur. commander. déjà. J'ai cherché partout mais c'est finalement ce qui l'a résolu. Merci beaucoup
Connor Leech
19

Expiration du mot de passe MySQL

La réinitialisation du mot de passe ne résoudra le problème que temporairement. De MySQL 5.7.4 à 5.7.10 (pour encourager une meilleure sécurité - voir MySQL: Politique d'expiration des mots de passe ), la valeur de la default_password_lifetimevariable par défaut est 360 (1 an). Pour ces versions, si vous n'apportez aucune modification à cette variable (ou à des comptes d'utilisateurs individuels), tous les mots de passe expirent au bout de 360 ​​jours.

Ainsi, à partir d'un script, vous pourriez obtenir le message: "Votre mot de passe a expiré. Pour vous connecter, vous devez le modifier à l'aide d'un client qui prend en charge les mots de passe expirés."

Pour arrêter l'expiration automatique du mot de passe, connectez-vous en tant que root ( mysql -u root -p), puis, pour les clients qui se connectent automatiquement au serveur (par exemple, des scripts), modifiez les paramètres d'expiration du mot de passe:

ALTER USER 'script'@'localhost' PASSWORD EXPIRE NEVER;

OU vous pouvez désactiver l'expiration automatique du mot de passe pour tous les utilisateurs :

SET GLOBAL default_password_lifetime = 0;

Comme l'a souligné Mertaydin dans les commentaires, pour rendre cela permanent, ajoutez la ligne suivante à un my.cnffichier que MySQL lit au démarrage, sous le [mysqld]groupe de paramètres. L'emplacement de my.cnfdépend de votre configuration (par exemple Windows, ou Homebrew sur OS X, ou un programme d'installation), et si vous voulez que ce soit par utilisateur sous Unix ou global:

[mysqld] default_password_lifetime = 0 (Il peut y avoir d'autres paramètres ici aussi ...)

Consultez la documentation MySQL sur les fichiers de configuration .

Dave Everitt
la source
2
Avec un mot de passe déjà expiré, seul le paramètre global a fonctionné pour moi.
maaartinus
2
Vous pouvez ajouter ce paramètre à /etc/mysql/my.cnf, sous mysqld; default_password_lifetime = 0 sinon, après le redémarrage de mysql, vous obtiendrez à nouveau la même erreur.
mertaydin
2
Merci @Dave Everitt et @mertaydin!
WebMW
11

J'ai récemment rencontré le même problème lors de l'installation de mysql sur mac os x capitan. Je n'ai pas trouvé la bonne réponse ici, donc en ajoutant cette réponse.

MySql dans les versions actuelles, génère un mot de passe temporaire lorsque vous installez mysql. Utilisez ce mot de passe pour définir un nouveau mot de passe à l'aide de l'utilitaire mysqladmin comme ci-dessous;

/ usr / local / mysql / bin / mysqladmin -u root -p '<votre mot de passe temporaire>' password '<votre nouveau mot de passe>'

J'espère que cela vous aidera, vous et les autres.

Pavan Sachi
la source
7

Téléchargez simplement MySQL workbench pour vous connecter. Cela vous demandera de changer le mot de passe immédiatement et automatiquement.

Grassright
la source
4

démarrer MYSQL en mode sans échec

mysqld_safe --skip-grant-tables &

Connectez-vous au serveur MYSQL

mysql -u root

exécutez des commandes SQL pour réinitialiser le mot de passe:

use mysql;
SET GLOBAL default_password_lifetime = 0;
SET PASSWORD = PASSWORD('new_password');

Dernière étape, redémarrez votre service mysql

Dylan B
la source
4

J'ai rencontré ce problème il y a quelques jours. Pour la meilleure solution pour la version 5.7 de MySQL; connectez-vous à votre console mysql et modifiez votre mot de passe avec la commande suivante:

ALTER USER `root`@`localhost` IDENTIFIED BY 'new_password', `root`@`localhost` PASSWORD EXPIRE NEVER;
Mehmet MERCAN
la source
4

ATTENTION: cela permettra à tout utilisateur de se connecter

J'ai dû essayer autre chose. Étant donné que mon mot de passe root a expiré et que la modification n'était pas une option car

Column count of mysql.user is wrong. Expected 45, found 46. The table is probably corrupted

ajoutant temporarly skip-grant-tablessous [mysqld]dans my.cnfet le redémarrage de MySQL a fait l'affaire

Marius.C
la source
4

Sur Windows dans phpmyadmin, regardez dans Variables: default_password_lifetime, et réglez-le sur 0 (au lieu de 360), profitez-en.

Il est possible que mySQL prenne encore 360 ​​jours, alors ajoutez dans my.ini:

[mysqld]
default_password_lifetime=0

Et redémarrez mysql.

Laurent Zminka
la source
Il est possible que le default_password_lifetime prenne à nouveau 360 jours, donc dans my.ini ajoutez:
Laurent Zminka
4

Cela a fonctionné pour moi:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'yourpassword','root'@'localhost' PASSWORD EXPIRE NEVER;
Robert Saylor
la source
1

redémarrez le serveur MySQL avec l'option --skip-grant-tables, puis définissez un nouveau mot de passe root

$ mysql -u root
mysql> USE mysql;
mysql> UPDATE user SET password=PASSWORD("NEWPASSWORD") WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> quit

Maintenant, si vous avez besoin, vous pouvez mettre à jour la table mysql.user (champ password_expired = 'N') pour ne pas expirer le mot de passe.

Adarsh ​​Gangadharan
la source
Lorsque j'entre dans la première commande, mysql -u rootj'obtiens cette erreur:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
CaribouCode
Pour mémoire, j'ai réussi à entrer en changeant la première commande en mysql -u root -ppuis il m'a demandé le mot de passe que j'ai You must reset your password using ALTER USER statement before executing this statement.
entré
Savez-vous comment réinitialiser le mot de passe en utilisant ALTER USER? Je ne suis pas très bon avec Mysql (je suis plutôt une personne NodeJS / MongoDB).
CaribouCode
1

Toutes ces réponses utilisent des consoles Linux pour accéder à MySQL.

Si vous êtes sous Windows et que vous utilisez WAMP, vous pouvez commencer par ouvrir la console MySQL ( click WAMP icon->MySQL->MySQL console).

Ensuite, il vous demandera d'entrer votre mot de passe actuel, entrez-le.

Et puis tapez SET PASSWORD = PASSWORD('some_pass');

Buts et jeux
la source
1

meilleure solution facile:

[PATH MYSQL]/bin/mysql -u root
[Enter password]
SET GLOBAL default_password_lifetime = 0;

puis fonctionne très bien.

Fastorro
la source
0

L'expiration du mot de passe est une nouvelle fonctionnalité de MySQL 5.6 ou 5.7.

La réponse est claire: utilisez un client capable de changer de mot de passe expiré (je pense que Sequel Pro peut le faire).

La bibliothèque MySQLi ne peut évidemment pas changer le mot de passe expiré.

Si vous avez un accès limité à localhost et que vous n'avez qu'un client console, le client mysql standard peut le faire.

Daniel W.
la source
2
Merci pour votre réponse. J'ai téléchargé Sequel Pro et essayé de me connecter via une prise avec cela.
J'obtiens
0

Ouvrez la console MySQL et tapez SET PASSWORD = 'votre mot de passe'; puis appuyez sur la touche ENTRÉE qui définira votre mot de passe défini pour l'utilisateur root.

Vous ne pouvez écrire que SET PASSWORD = ''; qui définira le mot de passe comme vide pour l'utilisateur root.

Prasant Kumar
la source
0

J'ai fait quelque chose comme ça.

UPDATE mysql.user SET authentication_string = PASSWORD(''), password_expired = 'N' WHERE User = 'root' AND Host = 'localhost';
Marcel Zebrowski
la source
1
You must reset your password using ALTER USER statement before executing this statement.
Weijing Jay Lin
0

Ouvrez simplement MySQL Workbench et choisissez [Instance] Démarrage / Arrêt et cliquez sur Démarrer le serveur. Ça a marché pour moi

Arjun
la source