Intenté muchos pasos para corregir este problema. Hay tantas fuentes de posibles soluciones a este problema que es difícil filtrar el sentido del sinsentido. Finalmente encontré una buena solución aquí :
Paso 1: identificar la versión de la base de datos
$ mysql --version
Verás algunos resultados como este con MySQL:
$ mysql Ver 14.14 Distrib 5.7.16, for Linux (x86_64) using EditLine wrapper
O salida como esta para MariaDB:
mysql Ver 15.1 Distrib 5.5.52-MariaDB, for Linux (x86_64) using readline 5.1
Tome nota de qué base de datos y qué versión está ejecutando, ya que las usará más adelante. A continuación, debe detener la base de datos para poder acceder a ella manualmente.
Paso 2: detener el servidor de bases de datos
Para cambiar la contraseña de root, debe cerrar el servidor de la base de datos de antemano.
Puede hacer eso para MySQL con:
$ sudo systemctl stop mysql
Y para MariaDB con:
$ sudo systemctl stop mariadb
Paso 3: reiniciar el servidor de base de datos sin verificación de permisos
Si ejecuta MySQL y MariaDB sin cargar información sobre los privilegios del usuario, le permitirá acceder a la línea de comando de la base de datos con privilegios de root sin proporcionar una contraseña. Esto le permitirá obtener acceso a la base de datos sin saberlo.
Para hacer esto, debe evitar que la base de datos cargue las tablas de concesión, que almacenan información de privilegios de usuario. Debido a que este es un riesgo de seguridad, también debe omitir las redes para evitar que otros clientes se conecten.
Inicie la base de datos sin cargar las tablas de concesión o habilitar la conexión en red:
$ sudo mysqld_safe --skip-grant-tables --skip-networking &
El ampersand 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 usuario root, que no debe solicitar una contraseña.
$ mysql -u root
Inmediatamente verá un indicador de shell de la base de datos.
Mensaje de MySQL
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
Mensaje de MariaDB
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
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 posteriores , use el siguiente comando:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
Para MySQL 5.7.5 y versiones anteriores , así como MariaDB 10.1.20 y versiones anteriores , use:
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');
Asegúrese de reemplazar new_password
con su nueva contraseña de elección.
Nota: Si el ALTER USER
comando no funciona, generalmente es indicativo de un problema mayor. Sin embargo, puede intentar UPDATE ... SET
restablecer la contraseña de root en su lugar.
[IMPORTANTE] Esta es la línea específica que solucionó mi problema particular:
mysql> UPDATE mysql.user SET authentication_string = PASSWORD('new_password') WHERE User = 'root' AND Host = 'localhost';
Recuerde volver a cargar las tablas de concesión después de esto.
En cualquier caso, debería ver la confirmación de que el comando se ha ejecutado correctamente.
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 la base de datos y reiniciarla como estaba antes.
Paso 5: reinicie el servidor de la base de datos normalmente
El tutorial entra en algunos pasos adicionales para reiniciar la base de datos, pero la única pieza que usé fue esta:
Para MySQL, use:
$ sudo systemctl start mysql
Para MariaDB, use:
$ sudo systemctl start mariadb
Ahora puede confirmar que la nueva contraseña se ha aplicado correctamente ejecutando:
$ mysql -u root -p
El comando ahora debe solicitar la contraseña recién asignada. Introdúzcalo y debería obtener acceso a la solicitud de la base de datos como se esperaba.
Conclusión
Ahora tiene acceso administrativo al servidor MySQL o MariaDB restaurado. Asegúrese de que la nueva contraseña de root que elija sea segura y segura y manténgala en un lugar seguro.