Guía de contraseña root de MySQL: ver, cambiar y recuperar

目次

1. Cómo verificar la contraseña root de MySQL

La contraseña root de MySQL es un elemento muy importante en la administración de bases de datos. Sin embargo, especialmente para los principiantes, pueden surgir dudas como “no sé la contraseña” o “¿dónde está la contraseña inicial?”. En esta sección se explican los métodos concretos para verificar la contraseña root de MySQL.

Método para verificar la contraseña inicial

A partir de MySQL 5.7, la contraseña inicial del usuario root se genera automáticamente y se registra en el archivo de registro durante la instalación. Los pasos para verificar esta contraseña inicial son los siguientes.

Pasos

  1. Abra la terminal (o el símbolo del sistema) para revisar el archivo de registro de MySQL.
  2. Ejecute el siguiente comando.
sudo grep 'temporary password' /var/log/mysqld.log
  1. La salida del comando contiene algo como lo siguiente.
[Note] A temporary password is generated for root@localhost: EaGapdplN0*m
  1. En este caso, EaGapdplN0*m es la contraseña inicial del usuario root.

Consideraciones

  • La contraseña inicial solo se puede usar una vez, por lo que debe cambiarse rápidamente después de iniciar sesión.
  • Si no se encuentra el archivo de registro o se produce un error de permisos, ejecute el comando con privilegios de administrador.

Método para verificar la contraseña actual

Si desea verificar la contraseña root existente, por razones de seguridad no se proporciona ningún comando o método directo para hacerlo. Por lo tanto, si no conoce la contraseña actual, consulte la sección “Cómo proceder si se olvida la contraseña root” que se describe a continuación y considere restablecer la contraseña.

2. Cómo cambiar la contraseña root de MySQL

Cambiar periódicamente la contraseña root de MySQL es importante para mantener la seguridad. En esta sección se explica detalladamente cómo cambiar la contraseña usando la contraseña root actual.

Procedimiento básico para cambiar la contraseña

Los pasos para iniciar sesión en MySQL y establecer una nueva contraseña son los siguientes.

Pasos

  1. Abra la terminal o el símbolo del sistema y escriba el siguiente comando para iniciar sesión en MySQL.
   mysql -u root -p
  • -u root indica que el nombre de usuario es root.
  • Al agregar -p, se solicitará la contraseña al iniciar sesión.
  1. Para cambiar la contraseña, ejecute el siguiente comando SQL.
   ALTER USER 'root'@'localhost' IDENTIFIED BY 'nueva_contraseña';
  1. Para recargar la información de privilegios, ejecute el siguiente comando.
   FLUSH PRIVILEGES;
  1. Después de ejecutar el comando correctamente, cierre la sesión de MySQL.
   exit

Consideraciones

  • Utilice una contraseña robusta
  • Se recomienda que la nueva contraseña incluya los siguientes elementos:
    • Mayúsculas y minúsculas
    • Números
    • Símbolos (por ejemplo: @, #, $, !, etc.)
    • Una longitud de al menos 12 caracteres
    Ejemplo: MyS3cure!2025
  • Preste atención a la sesión
  • Si cambia la contraseña durante una sesión de MySQL, es posible que deba volver a conectarse.
  • Verificación de privilegios
  • Asegúrese de que el usuario root tenga los privilegios adecuados. Si por alguna razón no puede realizar el cambio, consulte al administrador del sistema.

Problemas comunes al cambiar la contraseña

No se puede iniciar sesión después de cambiar la contraseña

  • Causa: Es posible que no haya ejecutado el comando FLUSH PRIVILEGES.
  • Solución: Inicie sesión nuevamente y ejecute FLUSH PRIVILEGES;.

La nueva contraseña no cumple con la política de seguridad

  • Causa: En la configuración de MySQL, la política de contraseñas (criterios de fortaleza) puede estar establecida de forma estricta.
  • Solución: Establezca una contraseña que cumpla con los requisitos de fortaleza o, si es necesario, relaje la política.

3. Qué hacer si olvidas la contraseña root

Si olvidas la contraseña root de MySQL, no podrás acceder mediante los métodos de inicio de sesión habituales. Sin embargo, desactivando temporalmente las funciones de seguridad de MySQL, es posible restablecer la contraseña. En esta sección se explican los pasos concretos.

Procedimiento para restablecer la contraseña root

1. Detener el servicio MySQL

Deteniendo el servicio MySQL se suspende temporalmente la base de datos. Utiliza el siguiente comando.
sudo systemctl stop mysqld
  • Si el comando se ejecuta correctamente, el servicio MySQL se detendrá.

2. Iniciar MySQL desactivando la autenticación

Para desactivar la función de autenticación de MySQL, inícialo con la opción --skip-grant-tables.
sudo mysqld_safe --skip-grant-tables &
  • Este comando inicia MySQL omitiendo la autenticación.
  • Nota: En este estado la seguridad se reduce, por lo que debes hacerlo cuando ningún otro usuario pueda acceder al sistema.

3. Restablecer la contraseña root

Inicia sesión en MySQL con la autenticación omitida y restablece la contraseña.
  1. Inicia sesión en MySQL.
   mysql -u root
  1. Con el siguiente comando, establece una nueva contraseña root.
   ALTER USER 'root'@'localhost' IDENTIFIED BY 'nueva_contraseña';
  1. Recarga la información de privilegios.
   FLUSH PRIVILEGES;
  1. Una vez completado, cierra la sesión de MySQL.
   exit

4. Reiniciar el servicio MySQL

Para volver a habilitar la autenticación normal, reinicia el servicio MySQL.
sudo systemctl restart mysqld
Después del reinicio, inicia sesión en MySQL usando la contraseña recién establecida.

Consideraciones

  • Garantizar la seguridad
  • Mientras se usa la opción --skip-grant-tables, MySQL queda completamente indefenso. Realiza esta operación rápidamente y evita riesgos innecesarios.
  • Impacto en usuarios que no son root
  • Este método es exclusivo para la cuenta root. Asegúrate de que no afecte a otros usuarios.

Solución de problemas

mysqld_safe comando no encontrado

  • Causa: En algunas distribuciones de Linux, mysqld_safe puede no estar instalado.
  • Solución: Puedes iniciar MySQL directamente de la siguiente manera.
  sudo mysqld --skip-grant-tables &

No se puede iniciar sesión después de cambiar la contraseña

  • Causa: MySQL podría no haber reflejado la información después del cambio.
  • Solución: Vuelve a iniciar sesión y ejecuta FLUSH PRIVILEGES;.

4. Mejores prácticas para reforzar la seguridad de MySQL

Gestionar adecuadamente la contraseña root de MySQL es importante, pero no es suficiente. Para operar la base de datos de forma segura, es necesario implementar medidas de seguridad adicionales. En esta sección se presentan métodos concretos para reforzar la seguridad de MySQL.

Establecer contraseñas robustas

La seguridad de la base de datos depende en gran medida de la fortaleza de la contraseña. Al establecer una contraseña robusta, siga las siguientes directrices.

Directrices para crear contraseñas

  • Longitud: 12 caracteres o más
  • Tipos de caracteres: combinar mayúsculas, minúsculas, números y símbolos
  • Ejemplo: 2#SecureMySQL_2025!

Aplicación de políticas de seguridad

MySQL ofrece una opción para establecer una política de contraseñas. Use el siguiente comando para verificar la política actual y cambiarla si es necesario.
SHOW VARIABLES LIKE 'validate_password%';
Si desea modificar la política, configúrela de la siguiente manera.
SET GLOBAL validate_password_policy = 'MEDIUM';
SET GLOBAL validate_password_length = 12;

Eliminar cuentas y datos innecesarios

Verificar y eliminar cuentas innecesarias

MySQL puede crear cuentas de prueba predeterminadas o usuarios anónimos durante la instalación. Estos pueden representar riesgos de seguridad, por lo que debe eliminar las cuentas innecesarias.
  1. Verifique la lista de usuarios actual.
   SELECT user, host FROM mysql.user;
  1. Elimine los usuarios innecesarios.
   DROP USER 'nombre_de_usuario'@'nombre_de_host';

Eliminar la base de datos de prueba

También elimine la base de datos de prueba creada durante la instalación.
DROP DATABASE test;

Restricción de acceso a la cuenta root

Limitar al máximo el acceso a la cuenta root puede reforzar la seguridad.

Restringir solo al acceso local

Por defecto, la cuenta root puede estar configurada para permitir conexiones remotas. Limítela solo al acceso local.
UPDATE mysql.user SET host = 'localhost' WHERE user = 'root';
FLUSH PRIVILEGES;

Crear una cuenta administrativa alternativa

En lugar de usar directamente la cuenta root, se recomienda crear una cuenta administrativa dedicada a tareas específicas.
CREATE USER 'admin'@'localhost' IDENTIFIED BY 'contraseña_fuerte';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;

Minimizar privilegios

Asignar a cada usuario solo los privilegios necesarios mejora la seguridad.

Verificar privilegios

Verifique los privilegios de los usuarios existentes.
SHOW GRANTS FOR 'nombre_de_usuario'@'nombre_de_host';

Revocar privilegios

Elimine los privilegios innecesarios.
REVOKE ALL PRIVILEGES ON nombre_de_base_de_datos.* FROM 'nombre_de_usuario'@'nombre_de_host';

Automatizar la configuración de seguridad de MySQL

MySQL incluye el comando mysql_secure_installation que permite aplicar fácilmente configuraciones de seguridad. Al ejecutar este comando, se pueden realizar fácilmente los siguientes ajustes.
  • Eliminación de cuentas y bases de datos de prueba
  • Desactivación del acceso remoto a la cuenta root
  • Aplicación de la política de seguridad

Comando de ejecución

sudo mysql_secure_installation

Copias de seguridad periódicas

Por último, como parte del refuerzo de la seguridad, se recomienda realizar copias de seguridad periódicas de la base de datos. Así, los datos podrán restaurarse en caso de incidentes.

Ejemplo de obtención de copias de seguridad

  1. Respaldar todas las bases de datos
   mysqldump -u root -p --all-databases > backup.sql
  1. Respaldar solo una base de datos específica
   mysqldump -u root -p nombre_de_base_de_datos > nombre_de_base_de_datos_backup.sql

5. Preguntas frecuentes (FAQ)

Hemos recopilado a continuación preguntas frecuentes y sus respuestas sobre la gestión de la contraseña root de MySQL y la configuración de seguridad. Úselo para solucionar problemas y resolver dudas adicionales.

Q1. No encuentro la contraseña inicial de MySQL en los registros. ¿Qué debo hacer?

A1: A partir de MySQL 5.7, la contraseña inicial se registra en el archivo de registro (normalmente /var/log/mysqld.log). Sin embargo, si no encuentra el registro o ha sido eliminado, pruebe los siguientes métodos.
  1. Al reinstalar MySQL, se genera una contraseña inicial.
  2. Si aún no puede iniciar sesión, consulte la “Guía de recuperación de contraseña root” y restablezca la contraseña.

Q2. ¿Pueden los usuarios que no son root cambiar la contraseña siguiendo los mismos pasos?

A2: Sí, los usuarios que no son root pueden cambiar la contraseña con los mismos pasos. Sin embargo, se requieren privilegios de administración para ese usuario. Ejecute el siguiente comando para cambiar la contraseña.
ALTER USER 'usuario'@'host' IDENTIFIED BY 'nueva_contraseña';

Q3. No se encuentra el comando mysqld_safe. ¿Qué debo hacer?

A3: En algunas distribuciones de Linux, mysqld_safe puede no estar instalado. En ese caso, puede iniciar mysqld con la opción --skip-grant-tables.
sudo mysqld --skip-grant-tables &
Sin embargo, este método también desactiva la autenticación, por lo que se requieren las mismas precauciones.

Q4. Cambié la contraseña pero no puedo iniciar sesión. ¿Por qué?

A4: Se pueden considerar las siguientes causas.
  1. Información de privilegios no actualizada: Después de cambiar la contraseña, ejecute el siguiente comando para actualizar la información de privilegios.
   FLUSH PRIVILEGES;
  1. Error de entrada: Al ingresar la nueva contraseña, verifique que no haya errores en mayúsculas/minúsculas o caracteres especiales.
  2. Problema de política de seguridad: La configuración de MySQL puede rechazar contraseñas débiles. Revise la política y establezca una contraseña robusta.

Q5. ¿Existe una forma de reforzar la seguridad de MySQL de manera integral?

A5: Se recomienda usar el comando mysql_secure_installation para configurar la seguridad de MySQL de forma eficiente. Este comando realiza automáticamente los siguientes ajustes:
  • Eliminación de usuarios y bases de datos de prueba
  • Desactivación del acceso remoto a la cuenta root
  • Aplicación de una política de contraseñas robusta
El método de ejecución es el siguiente.
sudo mysql_secure_installation

Q6. ¿Varía el método gestión de contraseñas según la versión de MySQL?

A6: Sí, la forma de gestionar la contraseña root puede variar según la versión de MySQL. Las principales diferencias son:
  • MySQL 5.7 y posteriores: La contraseña inicial se genera automáticamente y se registra en el archivo de registro.
  • MySQL 5.6 y anteriores: La contraseña inicial puede estar vacía (sin contraseña).
Para verificar la versión de MySQL que está usando, ejecute el siguiente comando:
mysql --version

Q7. ¿Cómo permitir el acceso remoto para el usuario root?

A7: Por motivos de seguridad, el acceso remoto no se recomienda, pero si es necesario, puede habilitarlo con el siguiente comando.
  1. Configure la autorización para conexiones remotas.
   UPDATE mysql.user SET host = '%' WHERE user = 'root';
  1. Actualice la información de privilegios.
   FLUSH PRIVILEGES;
Nota: Si habilita el acceso remoto, asegúrese de aplicar medidas de seguridad adicionales, como firewall y restricciones de IP.

Q8. ¿Podría explicar brevemente el procedimiento para restablecer la contraseña root si se olvida?

A8:
  1. Detenga el servicio MySQL.
   stop mysqld
  1. Inicie MySQL desactivando la autenticación.
   sudo mysqld_safe --skip-grant-tables &
  1. Restablezca la contraseña.
   ALTER USER 'root'@'localhost' IDENTIFIED BY 'nueva_contraseña';
   FLUSH PRIVILEGES;
  1. Reinicie el servicio.
   sudo systemctl restart mysqld