En este artículo, le mostraré cómo restablecer la contraseña de root de MySQL de dos maneras diferentes. Además, ambos métodos funcionan con la bifurcación MariaDB sin Oracle.
¿Por qué?
Hay dos razones principales por las que uno necesitaría restablecer la contraseña de root:
- olvidaste esa contraseña
- usted no sabe esa contraseña
Puede haber muchas razones para no saber la contraseña:nunca supo la contraseña y el antiguo DBA se ha ido; alguien cambió por diversión o por motivos maliciosos; son las 3 a. m., el sistema está colapsado y el dba está de vacaciones en otro país, etc.
El hecho es que una mañana necesitas rellenar la base de datos y llegar a esta situación:
Supongo que tiene superusuario (es decir, su o sudo a root) acceso al Sistema Operativo. Mi sistema operativo en este tutorial es Debian Linux.
Ambos métodos requieren que detenga el servicio mysql antes. Hazlo con (no olvides su/sudo según sea necesario):
# service mysql stop
Método 1:
Cree un archivo con el comando SQL para establecer una nueva contraseña de root que usaremos en el inicio de mysql. Puede usar cualquier editor de texto o simplemente escribir:
# echo "ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword';" > passreset.sql
Si elige el editor de texto, cree un archivo con solo la parte en negrita. Por supuesto, elige un real contraseña, fácil de recordar y difícil de descubrir.
E inícielo manualmente con el usuario mysql (-u mysql) y con el archivo que creamos antes (–init-file:passreset.sql). La línea de comando completa sería:
# mysqld -u mysql --init-file=/var/lib/mysql/passreset.sql
Espere hasta que aparezca el mensaje:mysqld:listo para conexiones . Luego abra otra consola para probar su nueva contraseña de root:
Método 2:
En el pasado, vi varias veces en Internet cómo restablecer la contraseña de root de mysql. En el primer intento esta mañana no funcionó para mí, pero encontré una solución alternativa.
Usaremos este interruptor del comando mysqld:
--skip-grant-tables Start without grant tables. This gives all users FULL ACCESS to all tables.
Esto me dejó acceso completo a todas las tablas. El procedimiento es conectarse a mysql y ejecutar el comando ALTER USER que vimos en el método anterior, pero recibí un error sobre mysqld ejecutándose con skip-grant-tables.
La solución es ejecutar mysqld con el conmutador skip-grant-tables y usar el usuario mysql. La línea de comando completa es:
# mysqld -u mysql --skip-grant-tables
Y, en otra consola, vacíe los privilegios antes de la actualización, luego vuelva a vaciar los privilegios:
# mysql -u root
MariaDB (none) > flush privileges;
MariaDB (none) > ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword';
MariaDB (none) > flush privileges;
MariaDB (none) > ^DBye
Finalizar
Ahora puede detener mysql e iniciarlo normalmente. En mi caso, ctrl-c no funcionó para detenerlo, tengo que eliminar el proceso iniciado manualmente antes:
# killall mysqld
# service mysql start
Y eso es todo, con uno de esos métodos recuperas el control sobre tu MySQL o MariaDB.