¿Ha olvidado su contraseña de usuario raíz de MySQL? ¡No hay problema! Esta guía lo guía a través de los pasos para restablecer la contraseña de usuario raíz de MySQL en los sistemas operativos Linux. Los pasos que se indican a continuación también deberían funcionar para restablecer la contraseña raíz de MariaDB.
Ya publicamos una guía para restablecer la contraseña de usuario root (administrativo) en MySQL versiones anteriores, es decir, MySQL 5.7. Pero ese método no funcionó con la nueva versión de MySQL 8. Si desea restablecer la contraseña de root en MySQL 8, siga cualquiera de las dos soluciones que se indican a continuación.
Restablecer la contraseña de usuario raíz de MySQL en Linux
Como ya mencioné, podemos restablecer la contraseña de root de MySQL de dos maneras.
- La forma genérica,
- Usando
init_file
variable del sistema.
1. La forma genérica de restablecer la contraseña de root de MySQL
Este método funcionará independientemente del sistema operativo que utilice. Te advierto que es un menos seguro manera, porque vamos a iniciar el servidor MySQL con --skip-grant-tables
opción. Esto le da a cualquier persona con acceso al servidor acceso sin restricciones a todas las bases de datos .
Primero, detenga el servicio MySQL usando el comando:
$ sudo systemctl stop mysql
Puede verificar si MySQL está realmente detenido con el comando:
$ sudo systemctl status mysql
Salida de muestra:
● mysql.service - MySQL Community Server Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled) Active: inactive (dead) since Sat 2021-05-29 11:53:08 UTC; 8s ago Process: 560 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS) Process: 666 ExecStart=/usr/sbin/mysqld (code=exited, status=0/SUCCESS) Main PID: 666 (code=exited, status=0/SUCCESS) Status: "Server shutdown complete" May 29 10:08:33 ubuntu2004.localdomain systemd[1]: Starting MySQL Community Server… May 29 10:08:37 ubuntu2004.localdomain systemd[1]: Started MySQL Community Server. May 29 11:53:07 ubuntu2004.localdomain systemd[1]: Stopping MySQL Community Server… May 29 11:53:08 ubuntu2004.localdomain systemd[1]: mysql.service: Succeeded. May 29 11:53:08 ubuntu2004.localdomain systemd[1]: Stopped MySQL Community Server.
Bueno, el servicio MySQL no se está ejecutando.
Ahora, reinicie el servidor MySQL sin verificar los permisos ejecutando el siguiente comando:
$ sudo mysqld_safe --skip-grant-tables --skip-networking &
Aquí, --skip-grant-tables
La opción le permite conectarse al servidor de base de datos mysql sin contraseña y con todos los privilegios. El --skip-networking
La opción se utiliza para evitar que otros clientes se conecten al servidor de la base de datos. Y, el ampersand (&
) El símbolo se usa para ejecutar el comando en segundo plano, por lo que puede escribir los otros comandos dados en los pasos posteriores. Tenga en cuenta que el comando anterior es peligroso y su servidor de base de datos se vuelve inseguro y vulnerable a las amenazas de seguridad. Debe ejecutar este comando solo durante un breve período de tiempo para restablecer la contraseña.
Es posible que vea el siguiente error:
2021-05-29T12:00:19.991826Z mysqld_safe Logging to '/var/log/mysql/error.log'. 2021-05-29T12:00:19.996942Z mysqld_safe Directory '/var/run/mysqld' for UNIX socket file don't exists.
Si ve este error, cree el directorio que falta (es decir, /var/run/mysqld
) y establezca los permisos adecuados como se muestra a continuación.
$ sudo mkdir -p /var/run/mysqld
$ sudo chown -R mysql:mysql /var/run/mysqld
Ahora intente nuevamente iniciar el servidor mysql sin contraseña y con privilegios de root:
$ sudo mysqld_safe --skip-grant-tables --skip-networking &
Luego, conéctese al servidor mysql usando el comando:
$ mysql
Accederá al indicador de shell de mysql.
Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 7 Server version: 8.0.25-0ubuntu0.20.04.1 (Ubuntu) Copyright (c) 2000, 2021, Oracle and/or its affiliates. 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.
Dado que iniciamos sesión sin cargar tablas de concesión (porque usamos --skip-grant-tables
opción), no podemos usar ALTER USER
comando para restablecer la contraseña. Entonces, carguemos las tablas de concesión usando el comando:
mysql> FLUSH PRIVILEGES;
Ahora, ejecute el siguiente comando para actualizar la contraseña del usuario root de mysql:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '[email protected]#@!';
En el comando anterior, reemplaza [email protected]#@!
con tu propia contraseña. Tenga en cuenta que si ha habilitado Validate Password
componente, debe utilizar una contraseña segura.
Finalmente, salga del indicador de mysql:
mysql> exit
Finalmente, apague el servidor de base de datos en ejecución que inició anteriormente con --skip-grant-tables
opción. Para hacerlo, ejecute:
$ sudo mysqladmin -u root -p shutdown
Se le pedirá que ingrese su sudo
contraseña seguida de MySQL root
contraseña de usuario que estableció en el paso anterior.
[sudo] password for ostechnix: Enter password: 2021-05-29T12:09:38.425737Z mysqld_safe mysqld from pid file /var/lib/mysql/ubuntu2004.localdomain.pid ended [1]+ Done sudo mysqld_safe --skip-grant-tables --skip-networking
Si el comando anterior no funciona, busque el archivo .pid file
que contiene el ID de proceso del servidor. El archivo PID normalmente estará disponible en /var/lib/mysql/
o /var/run/mysqld/
o /usr/local/mysql/data/
directorio dependiendo de su distribución, nombre de host y configuración. Generalmente, el nombre del archivo tiene una extensión de .pid y comienza con mysqld
o el nombre de host de su sistema.
En mi caso, es "/var/lib/mysql/ubuntuserver.pid"
.
Entonces, detuve la instancia del servidor de la base de datos con el comando:
$ sudo kill `/var/lib/mysql/ubuntuserver.pid`
Utilice la marca de retroceso para mencionar la ruta del archivo.
También podemos encontrar el pid de MySQL usando ps
y grep
comandos como a continuación:
$ ps ax | grep mysql
Salida de muestra:
1930 pts/0 S 0:00 sudo mysqld_safe --skip-grant-tables --skip-networking 1931 pts/0 S 0:00 /bin/sh /usr/bin/mysqld_safe --skip-grant-tables --skip-networking 2091 pts/0 Sl 0:28 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --skip-grant-tables --skip-networking --log-error=/var/log/mysql/error.log --pid-file=ubuntuserver.pid
Mátalo manualmente como se muestra a continuación:
$ sudo kill <PID>
O, elimine todos los servicios de MySQL:
$ sudo killall mysql
Ahora, inicie el servicio MySQL normalmente usando el comando:
$ sudo systemctl start mysql
Ahora, inicie sesión en el servidor MySQL con una nueva contraseña:
$ mysql -u root -p
Salida de muestra:
2. Restablecer la contraseña de root de MySQL con el archivo de contraseña
La otra forma de restablecer la contraseña raíz de mysql es usar init_file
variable del sistema.
Detener el servicio MySQL:
$ sudo systemctl stop mysql
Cree un archivo de texto, por ejemplo ostechnix.txt
:
$ vi ostechnix.txt
Agregue la siguiente línea en él:
ALTER USER 'root'@'localhost' IDENTIFIED BY '[email protected]#@!';
¡Reemplace [email protected]#@!
con su propia contraseña en la línea de arriba. Si ha habilitado Validate Password
complemento, debe especificar una contraseña segura. Guarde y cierre el archivo.
Ahora, inicie el servidor MySQL con el init_file
variable del sistema que apunta a ostechnix.txt
archivo:
$ sudo mysqld --init-file=/home/sk/ostechnix.txt &
Este comando ejecutará el contenido de ostechnix.txt
y actualice el [email protected]
contraseña de la cuenta con la nueva contraseña mencionada en el ostechnix.txt
archivo y finalmente inicie el servidor mysql.
Ahora detenga y reinicie el servidor mysql normalmente:
$ sudo systemctl stop mysql
$ sudo systemctl start mysql
Finalmente, elimine el archivo de contraseña, es decir, ostechnix.txt
.
$ rm /home/sk/ostechnix.txt
Ahora puede iniciar sesión en el servidor mysql con una nueva contraseña usando el comando:
$ mysql -u root -p
También publicamos un método ligeramente diferente para restablecer la contraseña de root de MySQL. Consulta la siguiente guía para obtener más información:
>> How To Reset Root Password In MySQL 8 On Ubuntu Linux
Conclusión
En esta guía, hemos aprendido dos formas diferentes de restablecer la contraseña olvidada del usuario raíz de MySQL en los sistemas operativos Linux. Si perdió la contraseña de usuario de su cuenta administrativa de la base de datos, puede restablecerla fácilmente en un par de minutos.