Cuando uno lleva impartiendo clases de bases de datos bastante tiempo hay algunas situaciones que son recurrentes, no importa el software utilizado, la versión, las máquinas o la procedencia del alumnado, siempre hay algún alumno que en el día menos pensando justo en el momento de acceder a MySQL comenta... "Profeee, no me acuerdo de la contraseña de MySQL". Esta situación, tan habitual a la vuelta de vacaciones la suelo resolver en dos pasos:
- La primera vez ayudo al alumno indicando los pasos para recuperar la contraseña
- La segunda vez le recuerdo que ya le expliqué cómo lo hacía y que como buen informático es el momento de que recupere el acceso a su servidor. Esto que podría ser interpretado como de "mal profesor" suele dar mejores resultados ya que no conozco ningún alumno que una vez que se haya enfrentado al problema y lo haya resuelto por si mismo me haya vuelto a decir eso de "Profeee!, he olvidado la contraseña de MySQL".
Sin embargo la última vez que me ha ocurrido esta situación me di cuenta de que había un pequeño cambio en la sintaxis de la sentencia de establecimiento de contraseña a partir de la versión 5.7.6 de MySQL por lo que a partir de este momento es importante ser consciente de qué versión de MySQL estamos utilizando. Para ello podemos utilizar el siguiente comando desde el prompt de linux:
$ mysql -V
En mi caso ya estoy trabajando con una versión posterior a la 5.7.6. En todo caso la mayoría de pasos para recuperar la contraseña en todas las versiones son similares y solo cambia la sentencia final.
1. Paramos el servicio
$ sudo service mysql stop
2. Lo arrancamos de nuevo sin cargar las tablas de permisos:
$ sudo mysqld_safe --skip-grant-tables &
En el caso de que nuestro servidor permitiese conexiones remotas, opción que viene deshabilitada por defecto con la opción de bind_address en el fichero de configuración de MySQL podría ser interesante la incorporación de la opción --skip-networking en la instrucción anterior.
3. Accedemos al servicio como usuario root, pero ahora no es necesaria la contraseña
$ mysql -u root
4. Y cambiamos la contraseña con una sentencia SQL... Pero claro, en este paso es donde hay que estar atento porque dependiendo de nuestra versión de MySQL el comando será diferente dentro del prompt MySQL.
Para versiones de MySQL anteriores a la 5.7.6 normalmente realizaba los dos pasos siguientes:
Acceder al esquema mysql.
mysql > use mysql;
Y cambiar el valor de la contraseña directamente con una sentencia SQL de actualización:
mysql > UPDATE user SET password=PASSWORD("NuevaContraseña") WHERE user='root';
Otra posibilidad que es la que recomienda el propio manual de MySQL y que no solía usar es:
mysql > SET PASSWORD FOR 'root'@'localhost' = PASSWORD('NuevaContraseña');
Que además parece que hasta el momento funciona en todas las versiones.
Sin embargo, la documentación oficial de MySQL indica que para versiones 5.7.6. y posteriores se debe usar:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'nuevaContraseña';
Esto es debido a que a partir de esta versión de MySQL los comandos de gestión de usuarios han cambiado. Es más, la sentencia UPDATE que solía utilizar ahora genera este error que inicialmente te deja bastante despistado.
mysql> ERROR 1054 (42S22): Unknown column 'password' in 'field list'
En todo caso con las dos otras opciones que indico todo debería funcionar y nuestro alumno despistado podría volver a acceder a su servidor MySQL simplemente arrancando de nuevo el servicio después de los cambios anteriores.
$ sudo service mysql restart
No hay comentarios:
Publicar un comentario