¿Cómo recupero mi nombre de usuario y contraseña de MySQL?

158

Perdí mi nombre de usuario y contraseña de MySQL. ¿Cómo lo recupero?

Marcel
fuente

Respuestas:

186

Detenga el proceso de MySQL.

Inicie el proceso MySQL con la opción --skip-grant-tables.

Inicie el cliente de consola MySQL con la opción raíz -u.

Lista de todos los usuarios;

SELECT * FROM mysql.user;

Restablecer la contraseña;

UPDATE mysql.user SET Password=PASSWORD('[password]') WHERE User='[username]';

Pero NO OLVIDES a

Detener el proceso de MySQL

Inicie el proceso MySQL normalmente (es decir, sin la opción --skip-grant-tables)

Cuando termines. De lo contrario, la seguridad de su base de datos podría verse comprometida.

Xenph Yan
fuente
77
Cree que no necesita reiniciar el demonio para restablecer usuarios normales. solo "PRIVILEGIOS DE LAVADO"; después de actualizar la contraseña del usuario. --skip-grant-tables solo se requiere para restablecer la contraseña del usuario root. Esto generalmente no se recomienda para un restablecimiento de usuario estándar.
Amos Folarin
¿Cuál es el significado de usar el dpkg-reconfigure mysql-server-5.5comando para restablecer la contraseña de MySQL raíz?
phillipsK
@ Xenph, ¿por qué dice " Inicie el cliente de consola MySQL con la opción raíz -u "? No tiene sentido hacerlo, ya que -use ignora cuando se inicia el servidor --skip-grant-tables.
Pacerier
15
En MySQL 5.7. *, No hay una columna mysql.userllamada password, use authentication_stringen su lugar.
Adib Aroui
3
Encontré esto + stackoverflow.com/a/35277160/1604601 muy útil
Alien Life Form
42

Lamentablemente, su contraseña de usuario es irrecuperable. Se ha procesado con un hash unidireccional que, si no lo sabe, es irreversible. Recomiendo ir con Xenph Yan arriba y simplemente crear uno nuevo.

También puede usar el siguiente procedimiento del manual para restablecer la contraseña de cualquier cuenta raíz MySQL en Windows:

  1. Inicie sesión en su sistema como administrador.
  2. Detenga el servidor MySQL si se está ejecutando. Para un servidor que se ejecuta como un servicio de Windows, vaya al administrador de Servicios:

Menú Inicio -> Panel de control -> Herramientas administrativas -> Servicios

Luego encuentre el servicio MySQL en la lista y deténgalo. Si su servidor no se está ejecutando como un servicio, es posible que deba usar el Administrador de tareas para forzarlo a detenerse.

  1. Cree un archivo de texto y coloque las siguientes declaraciones en él. Reemplace la contraseña con la contraseña que desea usar.

    UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root';
    FLUSH PRIVILEGES;

    Las declaraciones UPDATE y FLUSH deben escribirse en una sola línea. La instrucción UPDATE restablece la contraseña para todas las cuentas raíz existentes, y FLUSH instrucción le dice al servidor que vuelva a cargar las tablas de concesión en la memoria.

  2. Guarda el archivo. Para este ejemplo, el archivo se llamará C: \ mysql-init.txt.
  3. Abra una ventana de consola para acceder al símbolo del sistema:

    Menú de inicio -> Ejecutar -> cmd

  4. Inicie el servidor MySQL con la opción especial --init-file :

    C:\> C:\mysql\bin\mysqld-nt --init-file = C:\mysql-init.txt

    Si instaló MySQL en una ubicación que no sea C: \ mysql , ajuste el comando en consecuencia.

    El servidor ejecuta el contenido del archivo nombrado por la opción --init-file al inicio, cambiando cada raíz contraseña de cuenta .

    También puede agregar la --consola opción al comando si desea que la salida del servidor aparezca en la ventana de la consola en lugar de en un archivo de registro.

    Si instaló MySQL utilizando el Asistente de instalación de MySQL, es posible que deba especificar una opción --defaults-file :

    C:\> "C:\Program Files\MySQL\MySQL Server 5.0\bin\mysqld-nt.exe" --defaults-file="C:\Program Files\MySQL\MySQL Server 5.0\my.ini" --init-file=C:\mysql-init.txt

    La configuración adecuada del archivo predeterminado se puede encontrar utilizando el Administrador de servicios:

    Menú Inicio -> Panel de control -> Herramientas administrativas -> Servicios

    Busque el servicio MySQL en la lista, haga clic derecho sobre él y elija la opción Propiedades. La ruta al campo ejecutable contiene el archivo --defaults .

  5. Después de que el servidor se haya iniciado correctamente, elimine C: \ mysql-init.txt .
  6. Detenga el servidor MySQL, luego reinícielo en modo normal nuevamente. Si ejecuta el servidor como un servicio, inícielo desde la ventana Servicios de Windows. Si inicia el servidor manualmente, use cualquier comando que use normalmente.

Ahora debería poder conectarse a MySQL como root utilizando la nueva contraseña.

jake
fuente
55
@Jake: gracias por la respuesta. Quería darle el visto bueno, pero por alguna razón stackoverflow no me permite hacerlo debido a los puntos de reputación. su explicación "desafortunadamente su contraseña de usuario es irrecuperable. Se ha cifrado con un hash unidireccional que si no sabe es irreversible" fue la clave para entender por qué todo lo demás que leí en Google SOLO me dio instrucciones para cambiar mi contraseña. Las buenas explicaciones son más perspicaces que las instrucciones solas.
dsdsdsdsd
1
@jake no puedo encontrar mysql en la lista de servicios ¿Dime qué hacer?
1
¿Por qué es tuyo en mysqld-ntlugar de mysqld?
Pacerier
Por cierto, ¿hay una opción sin archivo --init-file? (Algo similar al comando de mysql.exe --execute.)
Pacerier
34

Una mejora a la respuesta más útil aquí:

1] No es necesario reiniciar el servidor mysql
2] Problema de seguridad para un servidor MySQL conectado a una red

No es necesario reiniciar el servidor MySQL.

use FLUSH PRIVILEGES;después de la actualización de la declaración mysql.user para el cambio de contraseña.

La instrucción FLUSH le dice al servidor que vuelva a cargar las tablas de concesión en la memoria para que note el cambio de contraseña.

El --skip-grant-optionspermite que cualquiera pueda realizar una conexión sin contraseña y con todos los privilegios. Debido a que esto es inseguro, es posible que desee

use --skip-grant-tables junto con --skip-networking para evitar que se conecten clientes remotos.

de: referencia: resetting-permissions-generic

PensandoMonkey
fuente
@ThinkingMonkey, ¿No supone esto que el usuario conectado actualmente tiene privilegios para modificar mysql.user? Sin embargo, a menudo, ese no es el caso.
Pacerier
6

Si bien no puede recuperar directamente una contraseña de MySQL sin fuerza bruta, puede haber otra forma: si ha utilizado MySQL Workbench para conectarse a la base de datos y ha guardado las credenciales en la "bóveda", es oro.

En Windows, las credenciales se almacenan en % APPDATA% \ MySQL \ Workbench \ workbench_user_data.dat , cifradas con CryptProtectData (sin ninguna entropía adicional). El descifrado es fácil:

std::vector<unsigned char> decrypt(BYTE *input, size_t length) {
    DATA_BLOB inblob { length, input };
    DATA_BLOB outblob;

    if (!CryptUnprotectData(&inblob, NULL, NULL, NULL, NULL, CRYPTPROTECT_UI_FORBIDDEN, &outblob)) {
            throw std::runtime_error("Couldn't decrypt");
    }

    std::vector<unsigned char> output(length);
    memcpy(&output[0], outblob.pbData, outblob.cbData);

    return output;
}

O puede consultar este hilo de DonationCoder para obtener el código fuente + ejecutable de una implementación rápida y sucia.

snemarch
fuente
2
Esto fue perfecto. Hay un exe con código fuente en el hilo snemarch mencionado para recuperar la contraseña de mi cuenta de usuario almacenada en mi bóveda de MySQL Workbench. Aunque estos otros métodos probablemente también funcionarían si tuviera derechos para leer o actualizar la tabla de usuario.
RobbZ
Pero relativamente hablando, muy poca gente está usando Workbench.
Pacerier
Aquí hay otra implementación que se puede ejecutar después de compilar
bnp887
6

Hazlo sin tiempo de inactividad

Ejecute el siguiente comando en la Terminal para conectarse al DBMS (necesita acceso root):

sudo mysql -u root -p;

ejecutar la contraseña de actualización del usuario objetivo (para mi ejemplo, el nombre de usuario es mousaviy su contraseña debe ser 123456):

UPDATE mysql.user SET authentication_string=PASSWORD('123456') WHERE user='mousavi';  

en este punto, necesita hacer una descarga para aplicar los cambios:

FLUSH PRIVILEGES;

¡Hecho! Lo hizo sin detener o reiniciar el servicio mysql.

SMMousavi
fuente
5

Si tiene acceso root al servidor donde se ejecuta mysql, debe detener el servidor mysql con este comando

sudo service mysql stop

Ahora inicie mysql usando este comando

sudo /usr/sbin/mysqld --skip-grant-tables  --skip-networking &

Ahora puede iniciar sesión en mysql usando

sudo mysql
FLUSH PRIVILEGES;
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');

Las instrucciones completas se pueden encontrar aquí http://www.techmatterz.com/recover-mysql-root-password/

Sajjad Ashraf
fuente
3

Inicie sesión en MySql desde el cmd de Windows con el usuario existente:

mysql -u nombre de usuario -p
Ingrese la contraseña: ****

Luego ejecute el siguiente comando:

mysql> SELECT * FROM mysql.user;

Después de eso, copie la contraseña md5 cifrada para el usuario correspondiente y hay varias aplicaciones descifradas de contraseña en línea disponibles en la web. Usando esta contraseña de descifrado y úsala para iniciar sesión la próxima vez. o actualizar la contraseña de usuario usando el comando que fluye:

mysql> UPDATE mysql.user SET Password=PASSWORD('[password]') WHERE User='[username]';

Luego, inicie sesión con la nueva contraseña y usuario.

Islam syeful
fuente
0

Si tiene configurado ODBC, puede obtener la contraseña del archivo de configuración ODBC. Esto se encuentra en /etc/odbc.ini para Linux y en la carpeta Software / ODBC en el registro de Windows (hay varios, puede tomar algo de búsqueda)

samplesize1
fuente
0

Guarda el archivo. Para este ejemplo, el archivo se llamará C: \ mysql-init.txt. solicita permisos administrativos para guardar el archivo

usuario12261119
fuente
-1

Aunque una interpretación estricta, lógica e informática de la pregunta del operador sería requerir tanto "¿Cómo recupero mi nombre de usuario MySQL" como "contraseña"? Pensé que podría ser útil para alguien que también aborde el OR interpretación . En otras palabras ...

1) ¿Cómo recupero mi nombre de usuario MySQL?

O

2) contraseña

Parece que esta última condición ya se ha abordado ampliamente, por lo que no me molestaré. La siguiente es una solución para el caso "¿Cómo puedo recuperar mi nombre de usuario MySQL" solo? Hola

Para encontrar su nombre de usuario mysql ejecute los siguientes comandos desde el shell mysql ...

SELECCIONAR Usuario DESDE mysql.user;

imprimirá una tabla de todos los usuarios de mysql.

brillar
fuente
1
Esta es una respuesta tardía y debe publicarla solo si su solución es claramente diferente de la publicada o aceptada. No es en este caso, especialmente cuando su respuesta duplica una respuesta aceptada.
m.cekiera