Cómo restablecer o recuperar la contraseña del superusuario root en MySQL Server. Realizamos el proceso en un equipo con Linux Ubuntu Server. Este tutorial es muy útil en caso de pérdida u olvido de la contraseña del superusuario root (o cualquier otro usuario). Teniendo acceso a la máquina con MySQL Server podremos modificar la contraseña sin necesidad de saberla previamente. Explicamos también cómo cambiar la contraseña del usuario root mediante el método normal (cuando se conoce).

Requisitos para recuperar la contraseña del superusuario root de MySQL Server en Linux Ubuntu Server

A continuación mostraremos cómo recuperar o restablecer la contraseña del superusuario root de MySQL Server en un equipo con Linux Ubuntu Server cuando la desconocemos. Este proceso es muy útil y puede evitarnos tener que reinstalar MySQL cuando hemos perdido la contraseña del usuario administrador del servidor de base de datos MySQL.

El primer requisito es disponer de un equipo con Linux Ubuntu Server, si bien lo explicado en este tutorial es aplicable a otras distribuciones de Linux e incluso a Windows (con algún pequeño cambio). En el siguiente tutorial mostramos cómo instalar este sistema operativo:

Necesitaremos también MySQL Server, en el tutorial anterior lo instalamos directamente desde el instalador del sistema operativo, en los siguientes lo instalamos manualmente:

Puesto que en los métodos explicados en este tutorial para recuperar la contraseña del superusuario root (modificar su contraseña sin saberla previamente) accederemos a la consola del sistema operativo necesitaremos un usuario con permisos de administrador para el sistema operativo Linux Ubuntu Server y acceso o bien en el propio equipo o bien mediante SSH.

Siempre es recomendable hacer copia de seguridad de los datos de MySQL antes de ejecutar este tipo de tareas, si bien no son peligrosas es muy recomendable hacer copia de seguridad antes de continuar.

Cambiar la contraseña de un usuario en MySQL de modo normal por comando

A continuación explicamos cómo cambiar la contraseña de un usuario de MySQL por el procedimiento normal, cuando conocemos la contraseña de un usuario de MySQL con permisos suficientes para acceder y modificar contraseñas. Indicaremos dos procedimientos, o bien usando el cliente de MySQL en modo comando o bien usando «mysqladmin».

Cambiar contraseña usuario root de MySQL mediante MySQL monitor (cliente MySQL en modo comando)

En primer lugar podremos verificar que el servicio de MySQL está ejecutándose con el comando:

ps -A | grep mysql

Que nos devolverá algo así como «1018 ? 00:00:00 mysqld» si se está ejecutando y no devolverá nada si no se está ejecutando.

Ahora accederemos al cliente por línea de comando de MySQL con el comando:

mysql -u root -p

(en este ejemplo de conexión utilizamos el superusuario «root», con -p le indicamos que nos solicite la contraseña)

También podremos acceder a la herramienta cliente de MySQL mediante:

mysql -u root -h localhost -p

(en este ejemplo de conexión utilizamos el superusuario «root» y el nombre de host «localhost», con -p le indicamos que nos solicite la contraseña)

Una vez que hayamos iniciado sesión en MySQL monitor, para cambiar la contraseña de un usuario, ejecutaremos el comando:

set password for ‘root‘@’%‘ = password(‘nueva_contrasena‘);

Donde «root» será el nombre de usuario al que le cambiaremos la contraseña, «%» será el nombre de host asociado al usuario anterior al que le cambiaremos la contraseña y «nueva_contraseña» será la nueva contraseña. En nuestro ejemplo disponemos de un usuario llamado «root» con el host asignado «%» que quiere decir que se puede utilizar este usuario desde cualquier equipo de la red. Si «root» sólo lo tenemos para el host «localhost», cambiaremos ‘root’@’%’ por ‘root’@’localhost’ .

Otra forma de cambiar la contraseña a un usuario es haciendo un UPDATE directamente en la tabla «user» de la base de datos «mysql» (que es lo que hace realmente el comando anterior), para ello en primer lugar nos conectaremos a la base de datos «mysql» con el comando:

use mysql;

Una vez abierto el catálogo «mysql» ejecutaremos una consulta SQL de actualización de datos, como la siguiente:

UPDATE mysql.user SET Password=PASSWORD(‘nueva_contrasena‘) WHERE User=’root‘ AND Host=’%‘;

Al igual que en el caso anterior cambiamos la contraseña al usuario «root» del host «%».

Por último recargamos los privilegios con:

flush privileges;

Y ya podremos salir de MySQL monitor con el comando:

quit;

Cambiar contraseña usuario root de MySQL mediante MySQL monitor (cliente MySQL en modo comando)

Consultar resultado de salida de todos los comandos

Cambiar contraseña usuario root de MySQL mediante mysqladmin

Otra posibilidad para cambiar la contraseña del superusuario root de MySQL Server en Linux es utilizando el comando «mysqladmin», como hemos comentado anteriormente partimos del hecho de que conocemos la contraseña actual del usuario root. Para cambiar la contraseña ejecutaremos el comando:

mysqladmin -u root -p password

No solicitará que introduzcamos la contraseña actual y nos solicitará la nueva contraseña dos veces.

También podremos cambiar la contraseña del usuario root directamente en una línea mediante mysqladmin con el siguiente comando:

mysqladmin -u root -p’contraseña_actual’ password ‘nueva_contraseña’

Cambiar contraseña usuario root de MySQL mediante mysqladmin

Restablecer, recuperar, cambiar contraseña superusuario root de MySQL en Linux Ubuntu Server: Método 1

A continuación mostraremos cómo recuperar o restablecer la contraseña del superusuario root de MySQL Server en un equipo con Linux Ubuntu Server cuando la desconocemos. Este proceso es muy útil y puede evitarnos tener que reinstalar MySQL cuando hemos perdido la contraseña del usuario administrador del servidor de base de datos MySQL. El único requisito es que tendremos que disponer de acceso a la consola del servidor como administradores (del sistema operativo). Explicamos el método 1 consistente en usar el parámetro skip-grant-tables en el modo de inicio del servicio de MySQL mysqld_safe. Este método es un menos seguro que el método 2.

En primer lugar detendremos el servicio de MySQL, por lo que hay que tener en cuenta que todas las conexiones, servicios y aplicaciones que utilicen nuestro servidor de MySQL dejarán de funcionar.

Para detener el servicio de MySQL en un equipo con Linux Ubuntu Server ejecutaremos el siguiente comando:

sudo service mysql stop

Tambén se puede utilizar:

sudo /etc/init.d/mysql stop

Una vez detenido nos aseguraremos de que lo esté con el comando:

sudo service status

Deberá devolvernos «mysql stop/waiting «.

También podemos usar el siguiente comando para verificar que el servicio está detenido:

sudo ps -A | grep mysql

No debe devolver nada.

Tras detener el servicio, ahora ejecutaremos el siguiente comando para eliminar temporalmente el arranque automático del servicio de MySQL (al final lo volveremos a restablecer):

sudo update-rc.d -f mysql remove

Ahora iniciaremos el servicio en modo recuperación con el comando –skip-grant-tables:

sudo mysqld_safe –skip-grant-tables &

Se iniciará el servicio de MySQL en modo recuperación, ahora escribiremos (directamente en la consola aunque no aparezca el shell de comandos):

mysql

Y pulsaremos INTRO.

Si todo es correcto arrancará el cliente de MySQL en modo comando sin pedirnos usuario y contraseña. Ahora ya podremos restablecer o cambiar la contraseña del usuario que queramos, para ello ejecutaremos el comando:

UPDATE mysql.user SET Password=PASSWORD(‘nueva_contraseña‘) WHERE User=’root‘;

Para cualquier otro usuario distinto de «root» cambiaremos «User=’root'» por «User=’nombre_usuario'»)

Ejecutaremos también:

FLUSH PRIVILEGES;

Introduciremos el comando «exit» para salir del cliente de MySQL:

exit;

Eliminaremos cualquier proceso de MySQL (pues está iniciado en modo safe) con:

sudo pkill mysql*

Y ya podremos iniciar MySQL en modo normal con el comando:

sudo start mysql

O bien con este otro comando:

sudo /etc/init.d/mysql start

Restableceremos el script de autoinicio de MySQL con el comando:

sudo update-rc.d mysql defaults

Y si queremos verificar que todo es correcto reiniciaremos el servidor completo con el comando:

sudo shutdown -r now

Restablecer, recuperar, cambiar contraseña superusuario root de MySQL en Linux Ubuntu Server: Método 1

Consultar resultado ejecución de todos los comandos anteriores

Si todo es correcto se iniciará el servicio de MySQL de forma automática y ya tendremos la contraseña del usuario root cambiada por la nueva. Para acceder ejecutaremos:

mysql -u root -p

Nos solicitará la contraseña, introduciremos la nueva cambiada.

Restablecer contraseña root de MySQL en Linux Ubuntu Server: Método 2

Este segundo método para cambiar la contraseña al superusuario root de MySQL server es, tal vez, más seguro que el anterior. Como en el caso anterior en primer lugar detendremos el servicio de MySQL con:

sudo service mysql stop

Tambén se puede utilizar:

sudo /etc/init.d/mysql stop

O bien eliminando todos los procesos con:

sudo killall mysql

Verificaremos que no hay procesos de MySQL abiertos ejecutando el comando:

sudo ps -A | grep mysql

Que no debe devolver nada.

Ahora crearemos un fichero con un nombre cualquiera y en la ubicación que queramos con el comando:

sudo nano /root/recuperar_contraseña_root

(creará el fichero «recuperar_contraseña_root» en la carpeta /root)

En la edición del fichero añadiremos lo siguiente:

UPDATE mysql.user SET Password=PASSWORD(‘nueva_contraseña‘)
WHERE User=’root‘;
FLUSH PRIVILEGES;

Guardaremos los cambios en el fichero pulsando Control + O y cerraremos la edición pulsando Control + X.

Ahora ejecutaremos el servicio de MySQL en modo «safe» y pándole el parámetro –init-file y el fichero creado anteriormente (para que lo ejecute en el arranque):

sudo mysqld_safe –init-file=/root/recuperar_contraseña_root &

Se iniciará MySQL en modo Safe y ejecutará el fichero anterior. Ahora podremos detener los procesos de MySQL con:

sudo killall mysqld

O con:

sudo mysql stop

Y ya podremos iniciar el servicio de MySQL de forma normal con:

sudo service mysql start

O bien con:

sudo /etc/init.d/mysql start

Si el proceso se ha ejecutado correctamente ya podremos acceder a MySQL Server con la nueva contraseña recuperada de root.

Anexo

  • Resultado ejecución comandos para cambio de contraseña normal de un usuario en MySQL por comando:

root@srvajpdsoft:~# ps -A | grep mysql
1018 ? 00:00:00 mysqld
root@srvajpdsoft:~# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 38
Server version: 5.5.31-0ubuntu0.13.04.1 (Ubuntu)
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type ‘help;’ or ‘h’ for help. Type ‘c’ to clear the current input statement.
mysql> set password for ‘root’@’%’ = password(‘nueva_contrasena’);
Query OK, 0 rows affected (0.00 sec)
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> UPDATE mysql.user SET Password=PASSWORD(‘nueva_contrasena’) WHERE User=’r oot’ AND Host=’%’;
Query OK, 0 rows affected (0.02 sec)
Rows matched: 1 Changed: 0 Warnings: 0
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> quit;
Bye

  • Resultado ejecución comandos para recuperar contraseña usuario root en MySQL modo 1:

root@srvajpdsoft:~# service mysql stop
mysql stop/waiting
root@srvajpdsoft:~# service mysql status
mysql stop/waiting
root@srvajpdsoft:~# sudo ps -A | grep mysql
root@srvajpdsoft:~# sudo update-rc.d -f mysql remove
Removing any system startup links for /etc/init.d/mysql …
root@srvajpdsoft:~# sudo mysqld_safe –skip-grant-tables &
[1] 2049
root@srvajpdsoft:~# 130710 20:25:23 mysqld_safe Can’t log to error log and syslog at the same time. Remove all –log-error configuration options for –syslog to take effect.
130710 20:25:23 mysqld_safe Logging to ‘/var/log/mysql/error.log’.
130710 20:25:23 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
mysql
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 1
Server version: 5.5.31-0ubuntu0.13.04.1 (Ubuntu)
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type ‘help;’ or ‘h’ for help. Type ‘c’ to clear the current input statement.
mysql> UPDATE mysql.user SET Password=PASSWORD(‘nueva_contraseña’) WHERE User=’root’;
Query OK, 5 rows affected (0.00 sec)
Rows matched: 5 Changed: 5 Warnings: 0
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
mysql> exit;
Bye
root@srvajpdsoft:~# pk
pkaction pkcheck pkexec pkill pkttyagent
root@srvajpdsoft:~# pkill mysql*
root@srvajpdsoft:~# /usr/bin/mysqladmin: connect to server at ‘localhost’ failed
error: ‘Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (2)’
Check that mysqld is running and that the socket: ‘/var/run/mysqld/mysqld.sock’ exists!
130710 20:26:57 mysqld_safe Number of processes running now: 0
130710 20:26:57 mysqld_safe mysqld restarted
root@srvajpdsoft:~# start mysql
mysql start/running, process 2480
root@srvajpdsoft:~# sudo update-rc.d mysql defaults
update-rc.d: warning: /etc/init.d/mysql missing LSB information
update-rc.d: see <http://wiki.debian.org/LSBInitScripts>
Adding system startup for /etc/init.d/mysql …
/etc/rc0.d/K20mysql -> ../init.d/mysql
/etc/rc1.d/K20mysql -> ../init.d/mysql
/etc/rc6.d/K20mysql -> ../init.d/mysql
/etc/rc2.d/S20mysql -> ../init.d/mysql
/etc/rc3.d/S20mysql -> ../init.d/mysql
/etc/rc4.d/S20mysql -> ../init.d/mysql
/etc/rc5.d/S20mysql -> ../init.d/mysql
root@srvajpdsoft:~# shutdown -r now