Gratis Te mudamos el sitio y los correos sin cortes ni costo

0810 345 6377 ESEN, cambiar a inglés
InHosting
ESEN, cambiar a inglés

Servidores Linux

Clave de root de MySQL o MariaDB: cómo cambiarla y recuperarla

Por el equipo técnico de InHosting6 min de lectura

En pocas palabras

Lo primero es averiguar cómo se autentica root. En Debian y Ubuntu, MariaDB lo deja entrar por el socket del sistema operativo, sin clave, así que sudo mysql alcanza. Estando adentro, la orden que sirve tanto en MySQL 8 como en MariaDB es ALTER USER 'root'@'localhost' IDENTIFIED BY '...';: las guías que editan la tabla de usuarios con PASSWORD() quedaron viejas. Si la clave se perdió, se arranca el motor con skip-grant-tables y skip-networking, se recargan los permisos con FLUSH PRIVILEGES;, se cambia la clave y se vuelve a arrancar normal. Con DirectAdmin en el VPS, el superusuario es da_admin y su clave está en un archivo del panel.

Antes que nada: qué motor tenés y cómo entra root

El procedimiento cambia según el motor y según cómo se autentica root. Para lo primero, mysql --version responde con el número de versión, y si es MariaDB lo dice ahí mismo. Lo segundo lo muestra la consulta de abajo, si ya podés entrar: la columna plugin dice unix_socket o auth_socket cuando root entra por el socket, y mysql_native_password o caching_sha2_password cuando usa clave.

mysql --version
sudo mysql -e "SELECT user, host, plugin FROM mysql.user WHERE user = 'root';"
SistemaMotor del repositorio oficialCómo queda root al instalar
Debian 12MariaDB 10.11Por socket, sin clave
Debian 13MariaDB 11.8Por socket, sin clave
Ubuntu 24.04MySQL 8.0 o MariaDB 10.11, según el paquetePor socket, en los dos casos
AlmaLinux 9MariaDB 10.5 o MySQL 8.0MariaDB, por socket; MySQL, sin clave hasta que corras mysql_secure_installation
AlmaLinux 10MariaDB 10.11 o MySQL 8.4Igual que en AlmaLinux 9

Si instalaste desde los repositorios de Oracle o de la fundación MariaDB, las versiones son otras. El paquete de Oracle para AlmaLinux genera una clave temporal y la deja en /var/log/mysqld.log.

Si entrás: cambiar la clave con una sola orden

Si root entra por socket, abrí la consola con sudo mysql; si ya tiene clave, con mysql -u root -p. Adentro:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'Una-frase-larga-que-no-uses-en-otro-lado';
  • No hace falta reiniciar el servicio ni recargar permisos: rige desde la próxima conexión.
  • En los dos motores, IDENTIFIED BY reemplaza el acceso por socket: desde ahí root entra solo con la clave, también desde la consola del sistema.
  • En MariaDB se puede que el root del sistema siga entrando sin clave y que cualquier otro acceso la pida: ALTER USER 'root'@'localhost' IDENTIFIED VIA unix_socket OR mysql_native_password USING PASSWORD('...');.
  • En MySQL 8.4, mysql_native_password viene desactivado y el método por defecto es caching_sha2_password. Si una guía vieja te dice IDENTIFIED WITH mysql_native_password, en 8.4 va a fallar: dejá el método por defecto.
  • root@localhost y root@127.0.0.1 son dos cuentas distintas para el motor. Si existen las dos, cambiá la clave en cada una; la lista completa sale con SELECT user, host FROM mysql.user;.
  • Escribí -p sin nada pegado: el cliente te pide la clave y no la deja guardada en el historial del shell.

Si perdiste la clave: arrancar sin control de accesos

Sin la clave, la salida es arrancar el motor un rato sin verificar usuarios, cambiarla y volver a la normalidad. Dos opciones hacen eso: skip-grant-tables desactiva el control de accesos y skip-networking cierra el puerto, así nadie se conecta desde afuera mientras dura. En MySQL 8 la segunda se activa sola al usar la primera, pero ponerla no molesta. Cada reinicio deja a los sitios unos segundos sin base: elegí un horario tranquilo.

El método más prolijo, y el mismo para los dos motores, es un archivo de configuración temporal. Va en la carpeta que corresponde a tu sistema:

Sistema y motorArchivo temporalServicio
Debian o Ubuntu con MariaDB/etc/mysql/mariadb.conf.d/99-rescate.cnfmariadb
Ubuntu con MySQL/etc/mysql/mysql.conf.d/99-rescate.cnfmysql
AlmaLinux con MariaDB/etc/my.cnf.d/99-rescate.cnfmariadb
AlmaLinux con MySQL/etc/my.cnf.d/99-rescate.cnfmysqld

La recuperación, paso a paso

printf '[mysqld]\nskip-grant-tables\nskip-networking\n' | sudo tee /etc/mysql/mariadb.conf.d/99-rescate.cnf
sudo systemctl restart mariadb
sudo mysql
  1. Creá el archivo con esas dos opciones bajo [mysqld] y reiniciá el servicio. El ejemplo de arriba es para Debian con MariaDB; cambiá la ruta y el nombre del servicio según la tabla.
  2. Conectate con sudo mysql y ejecutá primero FLUSH PRIVILEGES;. Sin las tablas de permisos cargadas, el motor no acepta ALTER USER, y esa orden las vuelve a leer.
  3. Ahora sí, ALTER USER como más arriba, y exit.
  4. Eliminá el archivo temporal y volvé a reiniciar el motor. No te saltees este paso: mientras el archivo exista, cualquiera con acceso a la consola del servidor entra a todas las bases sin clave.
  5. Comprobá que entra con la clave nueva: mysql -u root -p.

El caso DirectAdmin: da_admin

Con una licencia de DirectAdmin en tu VPS o servidor, el panel no maneja MySQL con root sino con una cuenta propia, da_admin, cuya clave lee de /usr/local/directadmin/conf/mysql.conf y de my.cnf, en la misma carpeta. Si necesitás privilegios totales sobre el motor, esa clave ya la tenés ahí.

Cambiar la clave de da_admin sin editar esos archivos deja al panel sin poder hablar con el motor: fallan el alta de bases y usuarios y los respaldos de cada cuenta. Si la cambiás, actualizá los dos archivos en el mismo momento.

Después: que ninguna aplicación use root

Root es para administrar. Cada aplicación debería tener su propio usuario, limitado a su propia base: si esa clave se filtra por un plugin vulnerable, el daño queda encerrado ahí. Para una base llamada catalogo:

CREATE USER 'catalogo'@'localhost' IDENTIFIED BY 'otra-frase-larga';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, INDEX, DROP ON catalogo.* TO 'catalogo'@'localhost';
  • Si recién instalaste el motor, corré mysql_secure_installation (en MariaDB 11, mariadb-secure-installation): borra los usuarios anónimos y la base de prueba.
  • Si lo que perdiste es la clave de root del sistema operativo, y no la de la base, el procedimiento es otro: cambiar o recuperar la clave de root.

Preguntas frecuentes

¿Por qué phpMyAdmin no me deja entrar como root?

Porque root entra por socket, y ese método solo acepta al root del sistema operativo. phpMyAdmin se conecta como el usuario del servidor web, con usuario y clave. La salida más segura es crear un usuario administrador aparte, con clave, y usar ese en phpMyAdmin.

Me aparece ERROR 1290 al cambiar la clave, ¿qué hago?

Es el aviso de que el motor corre con skip-grant-tables y no puede ejecutar esa orden. Corré FLUSH PRIVILEGES; para que recargue las tablas de usuarios y después repetí el ALTER USER.

¿Cambiar la clave de root corta los sitios?

No, siempre que ningún sitio use root para conectarse. Lo que corta el servicio es la recuperación, por los reinicios. Antes de cambiarla, revisá los archivos de configuración de tus aplicaciones, como el wp-config.php de WordPress.

¿Cómo sé qué aplicaciones se conectan con root?

Mirá las conexiones activas con SHOW PROCESSLIST; durante un rato de uso normal: la columna User dice con qué cuenta entra cada una. Y revisá el usuario de la base en la configuración de cada sitio.

¿Y en un hosting compartido?

En un plan de hosting no tenés acceso a root: cada base tiene uno o más usuarios propios, y la clave de cada uno se cambia desde DirectAdmin, en la gestión de MySQL. Poné la clave nueva en el archivo de configuración del sitio, o deja de conectarse. El paso a paso está en crear una base de datos MySQL en DirectAdmin.

Seguí leyendo

¿Preferís que lo veamos juntos? Te atiende una persona.

Si la guía no alcanza para tu caso, contanos qué necesitás: te ayudamos a elegir el plan, a migrar o a configurar tu servidor.

Hablar con un técnico