Clave de root de MySQL o MariaDB: cómo cambiarla y recuperarla
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';"| Sistema | Motor del repositorio oficial | Cómo queda root al instalar |
|---|---|---|
| Debian 12 | MariaDB 10.11 | Por socket, sin clave |
| Debian 13 | MariaDB 11.8 | Por socket, sin clave |
| Ubuntu 24.04 | MySQL 8.0 o MariaDB 10.11, según el paquete | Por socket, en los dos casos |
| AlmaLinux 9 | MariaDB 10.5 o MySQL 8.0 | MariaDB, por socket; MySQL, sin clave hasta que corras mysql_secure_installation |
| AlmaLinux 10 | MariaDB 10.11 o MySQL 8.4 | Igual 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 BYreemplaza 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_passwordviene desactivado y el método por defecto escaching_sha2_password. Si una guía vieja te diceIDENTIFIED WITH mysql_native_password, en 8.4 va a fallar: dejá el método por defecto. root@localhostyroot@127.0.0.1son dos cuentas distintas para el motor. Si existen las dos, cambiá la clave en cada una; la lista completa sale conSELECT user, host FROM mysql.user;.- Escribí
-psin 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 motor | Archivo temporal | Servicio |
|---|---|---|
| Debian o Ubuntu con MariaDB | /etc/mysql/mariadb.conf.d/99-rescate.cnf | mariadb |
| Ubuntu con MySQL | /etc/mysql/mysql.conf.d/99-rescate.cnf | mysql |
| AlmaLinux con MariaDB | /etc/my.cnf.d/99-rescate.cnf | mariadb |
| AlmaLinux con MySQL | /etc/my.cnf.d/99-rescate.cnf | mysqld |
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- 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. - Conectate con
sudo mysqly ejecutá primeroFLUSH PRIVILEGES;. Sin las tablas de permisos cargadas, el motor no aceptaALTER USER, y esa orden las vuelve a leer. - Ahora sí,
ALTER USERcomo más arriba, yexit. - 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.
- 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
Clave de root: cómo cambiarla y cómo recuperarla si la perdiste
Con acceso, alcanza un comando. Sin acceso, se recupera desde la consola del servidor frenando GRUB. Paso a paso para Debian, Ubuntu y AlmaLinux.
6 min de lectura
Importar una base MySQL o MariaDB grande por consola sin que se corte
Cómo llevar un volcado de varios GB al VPS, importarlo por consola con avance, acelerar la carga y resolver los errores que la frenan a mitad de camino.
7 min de lectura
Cómo crear una base de datos MySQL en DirectAdmin
Crear la base y el usuario en DirectAdmin, entender el prefijo, cargar los datos en WordPress u otro CMS, usar phpMyAdmin y resolver los errores típicos.
6 min de lectura
