Instale MySQL para Windows desde .zip y restablezca la contraseña de root

8

Quería tener en mi PC (con Windows 8.1 x64) solo el servidor MySQL, sin Workbench o algo así. Así que descargué el .ziparchivo de dev.mysql.com/downloads . Es una descarga para Win64 en x86_64 versión 5.7.9 (MySQL Community Server (GPL)).

Lo instalé como un servicio de Windows, pero no había una mysqlbase de datos, solo information_schema. Entonces ejecuté esto:

mysql_upgrade.exe --upgrade-system-tables

Y mysqlse crearon bases de datos. Pero junto con esto sucedió algo con el usuario root, porque ya no podía acceder mysql.

Así que decidí restablecer esta contraseña que apareció de repente (porque no la tenía antes). Fundé la siguiente solución en el manual oficial, comencé el servidor de esta manera:

mysqld.exe --skip-grant-tables --console

Luego abrí mysqlsin contraseña:

mysql.exe u root

Y luego trató de restablecer la contraseña de root:

SET PASSWORD FOR 'root'@'localhost' = PASSWORD(‘passhere');

Pero recibí este error:

ERROR 1131 (42000): está utilizando MySQL como usuario anónimo y los usuarios anónimos no pueden cambiar las contraseñas ".

¿Que es esto? ¿Cómo soy anónimo? Todos los comandos se ejecutaron cmd.exebajo el Administrador.

¿Qué debo hacer para restablecer la contraseña de root en esta situación?

Actualización 1: Traté de verificar el usuario actual:

SELECT USER(), CURRENT_USER();

Eso da:

+--------+----------------+
| USER() | CURRENT_USER() |
+--------+----------------+
| root@  | @              |
+--------+----------------+

Eso es raro, porque lo empecé así mysql.exe -u root.

Luego verifiqué la tabla de usuarios:

SELECT user FROM mysql.user;

Eso da:

+-----------+
| user      |
+-----------+
| mysql.sys |
+-----------+

Eso es aún más raro. Además no hay campo de contraseña:

SELECT user, password FROM mysql.user;

ERROR 1054 (42S22): columna desconocida 'contraseña' en 'lista de campos'

Entonces no puedo cambiar su contraseña.

Y no puedo crear un nuevo usuario:

CREATE USER 'root'@'localhost' IDENTIFIED BY 'passhere';

ERROR 1290 (HY000): el servidor MySQL se está ejecutando con la --skip-grant-tablesopción, por lo que no puede ejecutar esta declaración

Ahora estoy perdido

Actualización 2: supongo que hice todo mal desde el principio. Aparentemente, me perdí una mysqld.exe --initializeorden de alguna manera.

Entonces, así es como instalé MySQL desde .zip-archive, gracias a @RolandoMySQLDBA :

  1. Descomprima el archivo, prepárese my.ini.
  2. Ejecute mysqld.exe --initialize, obtenga una contraseña temporal del .errarchivo.
  3. Instale MySQL como un servicio y ejecútelo

    mysqld --install MySQL --defaults-file="d:/path/to/mysql/my.ini"
  4. Conéctese mysql -u root -pcon una contraseña temporal.

  5. Cambiar la contraseña temporal:

    ALTER USER 'root'@'localhost' IDENTIFIED BY 'NEWPASSWORD';
retif
fuente

Respuestas:

6

Desde que comenzó mysqldcon --skip-grant-tables , no puede ejecutar ningún comando GRANT , REVOKE o SET PASSWORD estándar . No obstante, puede cambiar la contraseña de la root@localhostsiguiente manera:

UPDATE mysql.user SET password=PASSWORD(‘passhere') WHERE user='root' and host='localhost';

Luego, reinicie mysqld y volverá al negocio.

En cuanto a que eres anónimo, si inicias sesión ahora y corres

SELECT USER() HowYouAttemptedToLogin,CURRENT_USER() HowYouWereAllowedToLogin;

Notará que HowYouWereAllowedToLogintendrá un nombre de usuario en blanco y algún host.

DARLE UNA OPORTUNIDAD !!!

ACTUALIZACIÓN 2015-11-17 16:24 EST

La columna conocida como passworden mysql.userya no existe en MySQL 5.7.

Fue renombrado authentication_string.

Enfoque adecuado

Lo que deberías haber hecho es correr

mysqld --initialize

Eso crearía la carpeta de datos para usted.

Al root @ localhost se le asignó una contraseña temporal, que es visible en el archivo de error que comienza con la siguiente fecha y hora y cadena

2015-11-17T20:56:02.175980Z 1 [Note] A temporary password is generated for root@localhost:

Puede iniciar sesión con él y luego ejecutar ALTER USER

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

Consulte la documentación de MySQL 5.7 en SET PASSWORD

RolandoMySQLDBA
fuente
Gracias por tu respuesta. Sí, estoy al tanto de tales restricciones. Pero estos son los pasos del manual de MySQL. Y traté de seguir tus instrucciones, mira mi pregunta editada.
retif
Ya no hay una columna de contraseña en mysql.user, por lo que este método nunca volverá a funcionar. Sin embargo, actualmente también los otros métodos (a través de --skip-grant-tables y --init-file) están rotos, por lo que no puede restablecer las contraseñas en 5.7.9 atm.
Mike Lischke
@ MikeLischke Gracias. Necesito eliminar esta respuesta
RolandoMySQLDBA
@MikeLischke Me acabo de dar cuenta de que la passwordcolumna fue renombrada authentication_string.
RolandoMySQLDBA
Bueno, modificar la tabla de usuario directamente es cosa del pasado y desaparecerá, pero incluso el uso de comandos estándar (como alter user) no funciona porque actualmente son rechazados porque se considera un usuario anónimo que no está permitido para emitir esos comandos (si inició el servidor con --skip-grant-tables o --init-file). Sin embargo, la opción --initialize es la forma correcta de restablecer el pw raíz.
Mike Lischke