Paso 1: Identificar la versión de la base de datos. Puedes utilizar la siguiente orden para identificar la versión de la base de datos que estás utilizando
mysql --version
Verás la siguiente salida en consola, varía en función de la versión
Si se trata de MYSQL
mysql Ver 14.14 Distrib 5.7.16, for Linux (x86_64) using EditLine wrapper
Si se trata de MariaDB
mysql Ver 15.1 Distrib 5.5.52-MariaDB, for Linux (x86_64) using readline 5.1
Acuérdate de la versión que estás utilizando, luego tendrás que aplicar unos comandos u otros
Paso 2: Parar el servidor de base de datos
En el caso de MYSQL
sudo systemctl stop mysql
En el caso de MariaDB
sudo systemctl stop mariadb
Paso 3: Reiniciar el servidor de base de datos sin chequeo de permisos
Arranca el servidor en modo safe sin tabla de verificación de permisos con la siguiente orden.
sudo mysqld_safe --skip-grant-tables --skip-networking &
El carácter & sirve para ejecutar el comando anterior en background.
Ahora te conectas al servidor como root sin contraseña
mysql -u root
Ahora tiene que salir la consola de MySQL
MySQL prompt
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
MariaDB prompt
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
Now that you have root access, you can change the root password.
Paso 4: Cambiar la clave de root
Una simple manera de cambiar la clave de root para versiones modernas de MYSQL is usar el comando ALTER USER. Pero no va a funcionar, porque la tabla GRANT no está cargada.
Vamos a pedir al servidor que recargue las tablas GRANT con el siguiente comando
FLUSH PRIVILEGES;
Ahora podemos cambiar la clave
Para MySQL 5.7.6 y versiones posteriores así como MariaDB 10.1.20 y versiones posteriores, usar el siguiente comando:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'nueva_clave';
Para MySQL 5.7.5 y versiones anteriores así como MariaDB 10.1.20 y versiones anteriores, usar el siguiente comando:
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('nueva_clave');
Tienes que reemplazar donde pone nueva_clave,
Si ALTER USER no funciona, prueba el siguiente comando:
UPDATE mysql.user SET authentication_string = PASSWORD('nueva_clave') WHERE User = 'root' AND Host = 'localhost';
FLUSH PRIVILEGES; (si no ha funcionado la primera vez)
Si todo ha ido bien, veremos el resultado en la consola
Output
Query OK, 0 rows affected (0.00 sec)
La clave ha sido cambiada
Paso 5. Arrancar la base de datos manualmente
En MySQL,
sudo kill `cat /var/run/mysqld/mysqld.pid`
sudo systemctl start mysql
En MariaDB,
sudo kill `/var/run/mariadb/mariadb.pid`
sudo systemctl start mariadb
Ahora prueba loggear en mysql con la nueva clave que has metido
mysql -u root -p