La contraseña de Mysql expiró. No puedo conectar

87

Acabo de limpiar mi Mac e hice una nueva instalación de El Capitan. Estoy luchando por conectarme a Mysql ahora. Después de haber pasado por un proceso de configuración de servidor web, he creado un archivo de prueba PHP simple:

<?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();
?>

Cuando lo ejecuto, aparece este error:

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.

Nunca antes había visto esa respuesta de una conexión. ¿Cómo lo soluciono si no puedo conectarme?

EDITAR

En la terminal ingresé el comando:

mysql -u root -p

Esto me pidió mi contraseña (la actual) que puse. Ahora tengo acceso a los comandos mysql, pero todo lo que intento da como resultado este error:

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

¿Cómo restablezco la contraseña usando ALTER USER?

CaribouCode
fuente
Estoy teniendo el mismo problema.
Rohan Sanap
esto es realmente molesto que un servicio completo pueda ser
cerrado
1
Prueba a correr/usr/local/mysql/bin/mysqladmin -u root -p password
Connor Leech
1
@ConnorLeech pasó horas tratando de restablecer la contraseña de root caducada de MariaDB de homebrew, pero esto me solucionó, ¡gracias!
Alex Holsgrove

Respuestas:

179

Así que finalmente encontré la solución yo mismo.

Primero entré en la terminal y escribí:

mysql -u root -p

Esto me pidió mi contraseña actual que escribí y me dio acceso para proporcionar más comandos mysql. Todo lo que intenté desde aquí dio este error:

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

Esto es confuso porque en realidad no pude ver una forma de restablecer la contraseña usando la ALTER USERdeclaración, pero encontré otra solución simple:

SET PASSWORD = PASSWORD('xxxxxxxx');

CaribouCode
fuente
¿Funcionó esto correctamente? ¿Dio algún error después de seguir estos pasos en el futuro?
Rohan Sanap
¡Muchas gracias! Esto también funcionó para mí. Me ahorró muchas horas.
TBJ
5
Utilizo la versión 5.7.9 de MySQL y ahora está en desuso, ya que este mensaje de error del símbolo del sistema de MySQL nos dice: Advertencia (Código 1287): 'SET PASSWORD = PASSWORD (' <plaintext_password> ')' está en desuso y se eliminará en una versión futura. Utilice SET PASSWORD = '<plaintext_password>' en su lugar
Fabiano
Lamento que esto no me haya funcionado, pero el usuario alternativo publicado por Piotr N. funcionó. Quizás operando en una versión diferente de MySQL.
MG Developer
89

Primero, uso:

 mysql -u root -p

Dando mi contraseña actual para el 'root'. Próximo:

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

Cambie 'new_password'a una nueva contraseña para el usuario 'root'.
Resolvió mi problema.

Piotr N.
fuente
3
Obteniendo Error: ERROR 1064 (42000): Tiene un error en su sintaxis SQL; Consulte el manual que corresponde a la versión de su servidor MySQL para conocer la sintaxis correcta para usar cerca de 'USER' root '@' localhost 'IDENTIFICADO POR' newPassword ',' root '@' localhost 'PASSWORD' en la línea 1
Ketav Chotaliya
Esto funcionó bien. ALTER USER 'username' @ '%' IDENTIFICADO POR 'your_password', 'user' @ '%' PASSWORD NO EXPIRA NUNCA;
TheLegendaryCopyCoder
1
Obteniendo error: 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 passwordfuncionó para mí en OS X El Capitan y MySQL 5.7.12 Community Server. Ejemplo:

$ /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.

Esto es similar a la respuesta de pavan sachi, pero con indicaciones de contraseña.

Mi error fue "# 1862 - Su contraseña ha caducado. Para iniciar sesión, debe cambiarla utilizando un cliente que admita contraseñas caducadas". en la pantalla de inicio de sesión de phpMyAdmin por primera vez.

Equipo
fuente
¡También funcionó para mí, OS X El Capital y MySQL 5.17.13! ¡Gracias por esto!
Zeke
5
Vale la pena mencionar que la palabra "contraseña" es no un marcador de posición , mientras que "raíz" es el nombre del usuario que le gustaría actualizar:mysqladmin -u [username] -p password
random_user_name
Esto es lo único que (aparentemente) funcionó para mí en Linux (Fedora 25). Gracias.
Avinash Meetoo
¡Aleluya! mejor. mando. siempre. Miré por todas partes, pero esto es finalmente lo que lo resolvió. Muchas gracias
Connor Leech
19

Caducidad de la contraseña de MySQL

Restablecer la contraseña solo resolverá el problema temporalmente. De MySQL 5.7.4 a 5.7.10 (para fomentar una mejor seguridad, consulte MySQL: Política de caducidad de contraseña ), el valor de la default_password_lifetimevariable predeterminada es 360 ( aproximadamente 1 año). Para esas versiones, si no realiza cambios en esta variable (o en las cuentas de usuarios individuales), todas las contraseñas caducan después de 360 ​​días.

Por lo tanto, de un script puede recibir el mensaje: "Su contraseña ha caducado. Para iniciar sesión, debe cambiarla con un cliente que admita contraseñas caducadas".

Para detener el vencimiento automático de la contraseña, inicie sesión como root ( mysql -u root -p), luego, para los clientes que se conectan automáticamente al servidor (por ejemplo, scripts) cambie la configuración de vencimiento de la contraseña:

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

O puede deshabilitar la caducidad automática de la contraseña para todos los usuarios :

SET GLOBAL default_password_lifetime = 0;

Como señaló Mertaydin en los comentarios, para que esto sea permanente, agregue la siguiente línea a un my.cnfarchivo que MySQL lee al inicio, en el [mysqld]grupo de configuraciones. La ubicación de my.cnfdepende de su configuración (por ejemplo, Windows o Homebrew en OS X, o un instalador), y si lo desea por usuario en Unix o global:

[mysqld] default_password_lifetime = 0 (También puede haber otras configuraciones aquí ...)

Consulte los documentos de MySQL sobre archivos de configuración .

Dave Everitt
fuente
2
Con una contraseña ya caducada, solo la configuración global funcionó para mí.
maaartinus
2
Puede agregar este parámetro a /etc/mysql/my.cnf, en mysqld; default_password_lifetime = 0 de lo contrario, después de reiniciar mysql obtendrá el mismo error nuevamente.
mertaydin
2
¡Gracias @Dave Everitt y @mertaydin!
WebMW
11

Pasé por el mismo problema recientemente al instalar mysql en mac os x capitan. No encontré la respuesta correcta aquí, así que agregué esta respuesta.

MySql en las versiones actuales, genera una contraseña temporal cuando instala mysql. Use esta contraseña para establecer una nueva contraseña usando la utilidad mysqladmin como se muestra a continuación;

/ usr / local / mysql / bin / mysqladmin -u root -p '<su contraseña temporal>' contraseña '<su nueva contraseña>'

Espero que te ayude a ti y a los demás.

pavan sachi
fuente
7

Simplemente descargue MySQL Workbench para iniciar sesión. Le pedirá que cambie la contraseña de forma inmediata y automática.

Grassright
fuente
4

iniciar MYSQL en modo seguro

mysqld_safe --skip-grant-tables &

Conectarse al servidor MYSQL

mysql -u root

ejecutar comandos SQL para restablecer la contraseña:

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

Último paso, reinicia tu servicio mysql

Dylan B
fuente
4

Me enfrenté a este problema hace unos días. Para obtener la mejor solución para la versión 5.7 de MySQL; inicie sesión en su consola mysql y modifique su contraseña con el siguiente comando:

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

ADVERTENCIA: esto permitirá que cualquier usuario inicie sesión

Tenía que probar otra cosa. Dado que mi contraseña de root expiró y modificar no era una opción porque

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

añadiendo temporarly skip-grant-tablesbajo [mysqld]en my.cnfy reiniciar MySQL hizo el truco

Marius.C
fuente
4

En Windows en phpmyadmin, busque en Variables: default_password_lifetime, y cámbielo a 0 (en lugar de 360), disfrute.

Es posible que mySQL vuelva a tomar 360 días, así que agregue my.ini:

[mysqld]
default_password_lifetime=0

Y reinicie mysql.

Laurent Zminka
fuente
Es posible que default_password_lifetime vuelva a tomar 360 días, así que en my.ini agregue:
Laurent Zminka
4

Esto funcionó para mí:

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

reinicie el servidor MySQL con la opción --skip-grant-tables y luego configure una nueva contraseña de root

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

Ahora, si lo necesita, puede actualizar la tabla mysql.user (campo password_expired = 'N') para que no caduque la contraseña.

Adarsh ​​Gangadharan
fuente
Cuando ingreso el primer comandomysql -u rootERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
aparece
Para que conste, logré ingresar cambiando el primer comando y mysql -u root -pluego me pidió la contraseña que You must reset your password using ALTER USER statement before executing this statement.
ingresé
¿Sabe cómo restablecer la contraseña usando ALTER USER? No soy tan bueno con Mysql (soy más una persona NodeJS / MongoDB).
CaribouCode
1

Todas estas respuestas utilizan consolas Linux para acceder a MySQL.

Si está en Windows y usa WAMP, puede comenzar abriendo la consola MySQL (click WAMP icon->MySQL->MySQL console ).

Luego le pedirá que ingrese su contraseña actual, ingrésela.

Y luego escribe SET PASSWORD = PASSWORD('some_pass');

Objetivos y juegos
fuente
1

la mejor solución fácil:

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

y luego funciona bien.

Fastorro
fuente
0

La expiración de la contraseña es una característica nueva en MySQL 5.6 o 5.7.

La respuesta es clara: utilice un cliente que sea capaz de cambiar la contraseña vencida (creo que Sequel Pro puede hacerlo).

La biblioteca MySQLi obviamente no puede cambiar la contraseña caducada.

Si tiene acceso limitado a localhost y solo tiene un cliente de consola, el cliente mysql estándar puede hacerlo.

Daniel W.
fuente
2
Gracias por su respuesta. Descargué Sequel Pro e intenté conectarme a través de un enchufe con eso. Recibo el mismo error sobre la caducidad de la contraseña ...
CaribouCode
0

Abra la consola MySQL y escriba SET PASSWORD = 'su contraseña'; y luego presione la tecla ENTER que establecerá su contraseña definida para el usuario root.

Solo puede escribir SET PASSWORD = ''; que establecerá la contraseña en blanco para el usuario root.

Prasant Kumar
fuente
0

Hice algo como esto.

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

Simplemente abra MySQL Workbench y elija [Instancia] Inicio / Apagado y haga clic en iniciar servidor. Funcionó para mi

Arjun
fuente