Installez MySQL pour Windows à partir de .zip et réinitialisez le mot de passe root


8

Je voulais avoir sur mon PC (avec Windows 8.1 x64) le serveur MySQL uniquement, sans Workbench ou quelque chose. J'ai donc téléchargé l' .ziparchive sur dev.mysql.com/downloads . Il s'agit d'un téléchargement pour Win64 sur x86_64 version 5.7.9 (MySQL Community Server (GPL)).

Je l'ai installé en tant que service Windows, mais il n'y avait pas de mysqlbase de données seulement information_schema. J'ai donc exécuté ceci:

mysql_upgrade.exe --upgrade-system-tables

Et des mysqlbases de données ont été créées. Mais en même temps, quelque chose s'est produit avec l'utilisateur root, car je ne pouvais plus y accéder mysql.

J'ai donc décidé de réinitialiser ce mot de passe apparu soudainement (car je ne l'avais pas avant cela). J'ai fondé la solution suivante dans le manuel officiel, j'ai démarré le serveur comme ceci:

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

Puis j'ai ouvert mysqlsans mot de passe:

mysql.exe u root

Et puis essayé de réinitialiser le mot de passe root:

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

Mais j'ai eu cette erreur:

ERREUR 1131 (42000): vous utilisez MySQL en tant qu'utilisateur anonyme et les utilisateurs anonymes ne sont pas autorisés à modifier les mots de passe ".

Qu'est-ce que c'est? Comment suis-je anonyme? Toutes les commandes ont été exécutées cmd.exesous l'administrateur.

Que dois-je faire pour réinitialiser le mot de passe root dans cette situation?

Mise à jour 1: j'ai essayé de vérifier l'utilisateur actuel:

SELECT USER(), CURRENT_USER();

Ça donne:

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

C'est bizarre, parce que j'ai commencé comme ça mysql.exe -u root.

Ensuite, j'ai vérifié le tableau des utilisateurs:

SELECT user FROM mysql.user;

Ça donne:

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

C'est encore plus bizarre. Il n'y a pas non plus de champ de mot de passe:

SELECT user, password FROM mysql.user;

ERREUR 1054 (42S22): colonne «mot de passe» inconnue dans «liste de champs»

Je ne peux donc pas changer son mot de passe.

Et je ne peux pas créer un nouvel utilisateur:

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

ERREUR 1290 (HY000): le serveur MySQL fonctionne avec l' --skip-grant-tablesoption, il ne peut donc pas exécuter cette instruction

Maintenant je suis perdu.

Mise à jour 2: je suppose que j'ai tout fait de travers depuis le début. Apparemment, j'ai en mysqld.exe --initializequelque sorte manqué une commande.

Voilà donc comment j'ai installé MySQL à partir de .zip-archive, grâce à @RolandoMySQLDBA :

  1. Déballez l'archive, préparez-vous my.ini.
  2. Exécutez mysqld.exe --initialize, obtenez un mot de passe temporaire à partir du .errfichier.
  3. Installer MySQL en tant que service et l'exécuter

    mysqld --install MySQL --defaults-file="d:/path/to/mysql/my.ini"
  4. Connectez-vous mysql -u root -pavec un mot de passe temporaire.

  5. Modifiez le mot de passe temporaire:

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

Réponses:


6

Depuis que vous avez commencé mysqldavec --skip-grant-tables , vous ne pouvez exécuter aucune commande GRANT , REVOKE ou SET PASSWORD standard. Nonobstant, vous pouvez modifier le mot de passe root@localhostcomme suit:

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

Ensuite, redémarrez mysqld et vous êtes de retour aux affaires.

Quant à votre anonymat, si vous vous connectez maintenant et exécutez

SELECT USER() HowYouAttemptedToLogin,CURRENT_USER() HowYouWereAllowedToLogin;

Vous remarquerez que le HowYouWereAllowedToLoginaura un nom d'utilisateur vide et un hôte.

ESSAIE !!!

MISE À JOUR 2015-11-17 16:24 EST

La colonne appelée passwordin mysql.usern'existe plus dans MySQL 5.7.

Il a été renommé authentication_string.

Approche appropriée

Ce que vous auriez dû faire c'est courir

mysqld --initialize

Cela créerait le dossier de données pour vous.

Le root @ localhost s'est vu attribuer un mot de passe temporaire, qui est visible dans le fichier d'erreur commençant par la date et la chaîne suivantes

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

Vous pouvez vous connecter avec lui, puis exécuter ALTER USER

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

Voir la documentation MySQL 5.7 sur SET PASSWORD


Merci de votre réponse. Oui, je connais de telles restrictions. Mais ce sont les étapes du manuel de MySQL. Et j'ai essayé de suivre vos instructions, veuillez voir ma question modifiée.
retif

Il n'y a plus de colonne de mot de passe dans mysql.user, donc cette méthode ne fonctionnera plus jamais. Cependant, actuellement, les autres méthodes (via --skip-grant-tables et --init-file) sont cassées, vous ne pouvez donc pas réinitialiser les mots de passe dans 5.7.9 atm.
Mike Lischke

@MikeLischke Merci. Je dois supprimer cette réponse
RolandoMySQLDBA

@MikeLischke Je viens de réaliser que la passwordcolonne a été renommée authentication_string.
RolandoMySQLDBA

Eh bien, la modification directe de la table des utilisateurs appartient au passé et disparaîtra, mais même l'utilisation de commandes standard (comme alter user) ne fonctionne pas car elles sont actuellement refusées car vous êtes considéré comme un utilisateur anonyme, ce qui n'est pas autorisé pour lancer ces commandes (si vous avez démarré le serveur avec --skip-grant-tables ou --init-file). L'option --initialize est cependant la bonne façon de réinitialiser la racine pw.
Mike Lischke
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.