Cómo restablecer la contraseña de root de MySQL o MariaDB
Olvidar las contraseñas pasa siempre. Si olvida o pierde la contraseña de root a su base de datos MySQL o MariaDB, todavía se puede acceder y restablecer la contraseña si tiene acceso al servidor y una cuenta de usuario habilitado para sudo.
Este tutorial nos muestra cómo restablecer la contraseña de root para versiones más antiguas y nuevas de MySQL y MariaDB.
Requisitos previos
Para recuperar su contraseña de root MySQL / MariaDB, necesitará:
- El acceso al servidor Linux corriendo MySQL oMariaDB con un usuario sudo.
Paso 1 – Identificar la versión de la base de datos
La mayoría de las distribuciones modernas de Linux se envían con MySQL o MariaDB, un popular reemplazo que es totalmente compatible con MySQL. Dependiendo de la base de datos utilizada y su versión, necesitará usar comandos diferentes para recuperar la contraseña de root.
Puede comprobar su versión con el siguiente comando:
1 |
mysql --version |
Verás la respuesta como ésta con MySQL:
1 |
mysql Ver 14.14 Distrib 5.7.16, for Linux (x86_64) using EditLine wrapper |
O como esto para MariaDB:
1 |
mysql Ver 15.1 Distrib 5.5.52-MariaDB, for Linux (x86_64) using readline 5.1 |
Anote qué base de datos y qué versión está ejecutando, ya que los utilizará más tarde.
A continuación, debe detener la base de datos para poder acceder a ella manualmente.
Paso 2: detener el servidor de base de datos
Para cambiar la contraseña de root, tiene que detener los servicios de la base de datos.
Para MySQL:
1 |
sudo systemctl stop mysql |
Para MariaDB:
1 |
sudo systemctl stop mariadb |
Después de detener el servicio de base de datos, accederá a él manualmente para restablecer la contraseña de root.
Paso 3 – Reiniciar el servidor de base de datos sin verificación de permisos
Si ejecuta MySQL y MariaDB sin cargar información sobre privilegios de usuario, le permitirá acceder a la línea de comandos de la base de datos con privilegios de root sin proporcionar una contraseña. Esto le permitirá tener acceso a la base de datos sin saberlo.
Para ello, tiene que dejar que cargué la base de datos de las tablas de permisos, que almacenan información de privilegios de usuario. Debido a que esto representa un riesgo para la seguridad, también debe omitir la conexión en red para evitar que otros usuarios se conecten.
Inicie la base de datos sin cargar las tablas de permisos ni habilitar la creación de redes:
1 |
sudo mysqld_safe --skip-grant-tables --skip-networking & |
El signo «&» al final de este comando hará que este proceso se ejecute en segundo plano para que pueda seguir utilizando su terminal.
Ahora puede conectarse a la base de datos como el usuario root, que no debe pedir una contraseña.
1 |
mysql -u root |
De inmediato verá un indicador de shell de base de datos en su lugar.
1 2 |
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> |
1 2 |
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> |
Ahora que tiene acceso de root, puede cambiar la contraseña de root.
Paso 4 – Cambiar la contraseña de root
Una forma sencilla de cambiar la contraseña de root para las versiones modernas de MySQL es usando el comando ALTER USER. Sin embargo, este comando no funcionará ahora porque no se cargan las tablas de concesión.
Indicamos al servidor de base de datos, que vuelva cargar las tablas de permisos es con el comando FLUSH PRIVILEGES.
1 |
Mysql> FLUSH PRIVILEGES; |
Ahora podemos cambiar la contraseña de root.
Para MySQL 5.7.6 y posteriores, así como MariaDB 10.1.20 y más reciente, utilice el siguiente comando.
1 |
Mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password'; |
Para MySQL 5.7.5 y mayores, así como MariaDB 10.1.20 y mayores, utilice:
1 |
Mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password'); |
Asegúrese de cambiar new_password con su nueva contraseña de su elección.
Nota: Si el comando ALTER USER no funciona, por lo general es indicativo de un es un problema más grande. Sin embargo, puede intentar con UPDATE … SET para restablecer la contraseña de root en su lugar.
1 |
Mysql> UPDATE mysql.user SET authentication_string = PASSWORD('new_password') WHERE User = 'root' AND Host = 'localhost'; |
Recuerde recargar los permisos de las tablas después de esto.
En cualquier caso, debe ver la confirmación de que el comando se ha ejecutado correctamente.
Salida
1 |
Query OK, 0 rows affected (0.00 sec) |
La contraseña se ha cambiado, por lo que ahora puede detener la instancia manual del servidor de base de datos y reiniciarla como antes.
Paso 5: reinicie normalmente el servidor de base de datos
En primer lugar, detener la instancia del servidor de base de datos que inicia de forma manual en el paso 3. Este comando busca el PID, o identificador de proceso, de MySQL o MariaDB y envía SIGTERM para indicarle que debe salir sin problemas después de realizar las operaciones de limpieza.
Para MySQL, utilice:
1 |
sudo kill 'cat /var/run/mysqld/mysqld.pid' |
Para MariaDB, utilice:
1 |
sudo kill '/var/run/mariadb/mariadb.pid' |
A continuación, reinicie el servicio usando systemctl.
Para MySQL, utilice:
1 |
sudo systemctl start mysql |
Para MariaDB, utilice:
1 |
sudo systemctl start mariadb |
Ahora puede confirmar que la nueva contraseña se ha aplicado correctamente ejecutando:
1 |
mysql -u root -p |
El comando debe ahora pedir la contraseña recién asignada. Escríbalo y debería tener acceso a la base de datos como se esperaba.
Conclusión
Ahora tiene acceso al servidor de MySQL o MariaDB restaurado. Asegúrese de que la nueva contraseña de root que elija sea fuerte y segura y guárdela en un lugar seguro.