web-dev-qa-db-fra.com

Le mot de passe Mysql a expiré. Impossible de se connecter

Je viens d'essuyer mon Mac et de faire une nouvelle installation d'El Capitan. J'ai du mal à me connecter à Mysql maintenant. Après avoir suivi le processus d'installation du serveur Web, j'ai créé un simple fichier 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();
?>

Quand je le lance, 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 puis-je résoudre ce problème si je ne peux pas me connecter?

EDIT

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 dans. J'ai maintenant accès aux commandes mysql mais tout ce que j'essaye a comme résultat 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?

78
Coop

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

Premièrement, je suis entré dans le terminal et j'ai tapé:

mysql -u root -p

Cela m'a demandé mon mot de passe actuel que j'ai tapé et cela m'a permis d'accéder à plus de commandes mysql. Tout ce que j'ai essayé d'ici a donné cette erreur:

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

C'est déroutant car je ne voyais pas vraiment comment réinitialiser le mot de passe à l'aide de l'instruction ALTER USER, mais j'ai trouvé une autre solution simple:

SET PASSWORD = PASSWORD('xxxxxxxx');

168
Coop

Tout d'abord, j'utilise:

 mysql -u root -p

Donner mon mot de passe actuel pour la "racine". Prochain:

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

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

80
Piotr N.

mysqladmin -u [username] -p password a 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." sur l'écran de connexion phpMyAdmin pour la première fois.

45
Kit

Expiration du mot de passe MySQL

Réinitialiser le mot de passe ne résoudra que temporairement le problème. De MySQL 5.7.4 à 5.7.10 (pour encourager une meilleure sécurité - voir MySQL: politique d’expiration du mot de passe ), la valeur par défaut de la variable default_password_lifetime est 360 (1 an). Pour ces versions, si vous ne modifiez pas cette variable (ou les comptes d'utilisateurs individuels) , tous les mots de passe expirent après 360 jours.

Ainsi, à partir d'un script, vous pouvez obtenir le message suivant: "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."

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. ) modifier 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 Mertaydin l'a souligné dans les commentaires, pour rendre ce permanent, ajoutez la ligne suivante à un fichier my.cnf lu au démarrage par MySQL, dans le groupe de paramètres [mysqld]. L'emplacement de my.cnf dépend de votre configuration (par exemple, Windows ou Homebrew sous OS X ou un programme d'installation), et du choix de l'utilisateur par utilisateur sous Unix ou global:

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

Voir le documentation MySQL sur les fichiers de configuration .

15
Dave Everitt

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 en utilisant l'utilitaire mysqladmin comme ci-dessous;

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

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

11
pavan sachi

Il suffit de télécharger MySQL Workbench pour vous connecter. Il vous demandera de changer le mot de passe immédiatement et automatiquement.

7
Grassright

démarrer MYSQL en mode sans échec

mysqld_safe --skip-grant-tables &

Se connecter au serveur MYSQL

mysql -u root

lancez les 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

4
Dylan B

j'ai fait face à 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 à l'aide de la commande suivante:

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

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

C'est possible que mySQL prenne 360 ​​jours, ajoutez donc my.ini:

[mysqld]
default_password_lifetime=0

Et redémarrez mysql.

3
Laurent Zminka

ATTENTION: cela permettra à tout utilisateur de se connecter

Je devais essayer autre chose. Comme mon mot de passe root a expiré et que la modification n’est pas une option, car

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

ajouter temporairement skip-grant-tables sous [mysqld] dans my.cnf et redémarrer mysql a fait l'affaire

3
Marius.C

Cela a fonctionné pour moi:

ALTER USER 'root' @ 'localhost' IDENTIFIÉ PAR 'yourpassword', 'root' @ 'localhost' PASSWORD EXPIRE NEVER;

3
Robert Saylor

meilleure solution facile:

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

et puis fonctionne bien.

1
Fastorro

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

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

Ensuite, il vous demandera de saisir votre mot de passe actuel, entrez-le.

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

1
Rust

redémarrez le serveur MySQL avec l'option --skip-grant-tables Et 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.

0
Adarsh Gangadharan

Ouvrez la console MySQL et tapez SET PASSWORD = 'votre mot de passe'; puis appuyez sur la touche ENTER 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 vierge pour l'utilisateur root.

0
Prasant Kumar

J'ai fait quelque chose comme ça.

UPDATE mysql.user SET authentication_string = PASSWORD (''), password_expired = 'N' WHERE Utilisateur = 'root' AND Host = 'localhost';

0
Marcel Zebrowski

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 n'est évidemment pas capable de 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.

0
Daniel W.