En entornos de desarrollo o estaciones de trabajo suele ocurrir que "rompemos" (rompen ustedes, developers) la instalación de MySQL. Puede ocurrir por varias razones, típicamente porque hicimos lío con los permisos a nivel filesystem, restauramos un dump pisando bases de sistema (mysql, information_schema, etc.) o simplemente llenamos el sistema de archivos donde está alojado el datadir de MySQL:

Como sea, don't panic, a veces es posible reparar la instalación (como he explicado en otros artículos) pero otras no conviene perder tiempo y se desea simplemente iniciar nuevamente con una instalación fresca, perdiendo todas las bases de datos que había en el motor (al fin y al cabo, se trata de un entorno de desarrollo).

Este artículo explica cómo reinicializar el directorio de datos (datadir) de MySQL para comenzar con una instalación fresca y funcionando de un motor MySQL.

ADVERTENCIA: Se perderán absolutamente todos los datos y metadatos alojados en la instancia.

En sistemas Debian y derivados, el paquete mysql-server inicializa el datadir en el directorio /var/lib/mysql. Comenzar eliminando dicho directorio y creándolo nuevamente vacío:

$ sudo su
# rm -fr /var/lib/mysql
# mkdir -p /var/lib/mysql/data
# chown -R mysql:mysql /var/lib/mysql

Luego reinicializar el datadir para conseguir una instalación fresca y limpia de MySQL:

# mysqld --initialize --user=mysql --basedir=/var/lib/mysql --datadir=/var/lib/mysql/data

Este comando genera una clave aleatoria para "root" por salida estándar, la cual deberá ser cambiada luego. Buscar una línea similar a la siguiente:

2021-04-09T14:32:15.291022Z 1 [Note] A temporary password is generated for root@localhost: ****

En lugar de asteriscos habrá una contraseña aleatoria.

Si la salida de --initialize es nula (no hay ninguna línea en la salida), significa que ha sido enviada al log de errores de MySQL. Buscar la una línea como la mostrada anteriormente en el archivo /var/log/mysql/error.log.

Copiar la contraseña temporal, iniciar MySQL y conectarse al motor como "root":

# systemctl start mysql
# mysql -u root -h localhost -p

Loguearse con la contraseña temporal generada por --initialize.

Cambiar la contraseña de "root" con el siguiente comando:

> ALTER USER 'root'@'localhost' IDENTIFIED BY '12345678';

Eso es todo, ya tenemos nuestro motor MySQL listo para comenzar a trabajar.

Compartí este artículo