WampServer

Apache, PHP, MySQL on Windows 

 
  • Accueil forum
  • Retour à WampServer
  • presentation
  • Download
  • Addons
  • Formations
  • Alter Way

 
Voir le sujet: Précédent•Suivant
Aller à : Liste des Forums•Liste des messages•Nouvelle discussion•Recherche•Connexion•Imprimer la vue
[topo] Réinitialisation du mot de passe root MySQL sous Windows
Envoyé par: Otomatic (---.fbx.proxad.net)
Date: 16 January 2009 à 10:57

Réinitialisation du mot de passe root MySQL sous Windows

Malgré toutes les opérations que vous avez effectuées, vous n'arrivez plus à vous connecter à MySQL (et PhpMyAdmin) en tant que root@localhost, avec ou sans mot de passe ou vous avez oublié votre mot de passe.
La procédure ci-dessous vous permettra de mettre un autre mot de passe pour tous les comptes root. Le nouveau mot de passe choisi doit être simple et surtout, comme la procédure utilise la ligne de commande, ne pas comporter de caractères accentués ni « exotiques ». Vous pourrez le modifier une fois que les connexions MySQL seront possibles via PhpMyAdmin.
Il est même souhaitable d'utiliser un mot de passe dont on connait le cryptage tel qui'il sera écrit dans la table user de la base mysql qui, depuis MySQL 4.1, sont toujours constitués d'un astérisque suivi de 40 chiffres hexadécimaux. Ainsi, pour MySQL le mot de passe "secret" est codé "*14E65567ABDB5135DOCFD9A7083032C179A49EE7".
Dans les exemples suivants, wampserver est supposé avoir été installé dans G:\wamp. Il vous faudra adapter vos chemins en fonction de votre propre installation.

--- Prérequis ---
- a - Tout d'abord, vous devez être connecté en tant qu'administrateur, si ce n'est pas le cas, redémarrer Windows pour ouvrir une session Administrateur.
- b - Connaître comment lancer une fenêtre de commande : Démarrer, Exécuter, taper cmd puis Entrée.
- c - Connaître quelques commandes de la ligne de commande comme cd, dir ; si vous ne savez pas, une fois la fenêtre de commande ouverte, taper help puis Entrée vous donnera la liste de toutes les commandes puis le nom d'une commande suivi de /? par exemple cd /? vous donnera la syntaxe et les paramètres de la commande cd Changer de dossier.
- d - Savoir et noter où est situé le fichier mysqld.exe de la version de MySQL utilisée. En principe, pour Wampserver G:\wamp\bin\mysql\mysql5.1.30\bin\mysqld.exe
- e - Savoir et noter où est situé le fichier my.ini de configuration de la version de MySQL utilisée. En principe, pour Wampserver G:\wamp\bin\mysql\mysql5.1.30\my.ini

--- Procédure ---
1. Quitter Wampserser si il était actif et vérifier dans le gestionnaire de tâches qu'aucun service ou tâche wampmysql ou mysqld.exe n'est activé.
Si une tâche mysqld.exe est activée, il faut l'arrêter par :
- Menu Démarrer -> Panneau de configuration -> Outils d'administration -> Services
Puis, trouver le service MySQL dans la liste, et l'arrêter.
Si la tâche MySQL ne fonctionnait pas comme un service, il faut utiliser le Gestionnaire des tâches pour la forcer à arrêter par Terminer le processus ou Fin de tâche

2. Créez un fichier texte, par exemple avec notepad et placez les déclarations suivantes dans celui-ci. Éventuellement, remplacer secret par le mot de passe que vous souhaitez utiliser, mais vous pourrez le changer après que la connexion à MySQL et PhpMyAdmin sera possible.

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

Les commandes UPDATE et FLUSH doivent être écrites chacune sur une seule ligne, commencer au début de la ligne et se terminer par un saut à la ligne.
UPDATE réinitialise le mot de passe pour tous les comptes root et FLUSH indique au serveur de recharger les tables en mémoire.

3. Enregistrez le fichier. Pour cet exemple, le fichier sera nommé C:\mysql-init.txt.

4. Ouvrez une fenêtre de commande pour accéder à l'invite de commande : Menu Démarrer -> Exécuter -> cmd

5. Par la commande cd placez vous dans le dossier noté qui contient mysqld.exe. Par exemple : cd /d "G:\wamp\bin\mysql\mysql5.1.30\bin\"

6. Démarrez le serveur MySQL avec les options :
--defaults-file pour le fichier my.ini de configuration
--init-file pour le fichier de commande
--console pour que les commandes apparaissent dans la fenêtre de commande plutôt que dans un fichier journal, ce qui permettra de voir les erreurs éventuelles
par la commande :

mysqld.exe --defaults-file="G:\wamp\bin\mysql\mysql5.1.30\my.ini" --init-file="C:\mysql-init.txt" --console

Si vous avez sauvegardé le fichier mysql-init.txt à un endroit autre que C:\ modifiez la commande en conséquence.
Le serveur exécute le contenu du fichier désigné par l'option --init-file lors du démarrage : changement de mot de passe du compte root.

7. Quittez la console de commande MySql par Ctrl-C puis la fenêtre de commande par la commande exit.

9. Vérifier, via le gestionnaire de tâches, qu'il n'existe plus de processus mysqld, sinon Terminer la processus.

Vous pouvez supprimer le fichier C:\mysql-init.txt.

Vous devriez maintenant être en mesure de se connecter à MySQL en tant que root en utilisant le nouveau mot de passe.

Remarque :
Comme pour toutes les contributions que j'écrit (Sauf indication contraire dûment explicitée), cette procédure a été essayée en grandeur réelle sous :
- Windows XP Home SP3 [à jour]
- Wampserver 2.0
- Apache 2.2.11
- PHP 5.2.8 (Modifié client MySQL 5.1.30)
- MySQL 5.1.30
- PhpMyAdmin 3.1.1.
Mon mot de passe root@localhost a bien été remplacé par "secret" sans que j'ai eu besoin de donner le mot de passe qui existait avant.



Modifie 1 fois. Derniere modification le 16/01/2009 à 15:43 par Otomatic.

Options: Répondre•Citer ce Message
Re: [topo] Réinitialisation du mot de passe root MySQL sous Windows
Envoyé par: alain (---.fbx.proxad.net)
Date: 21 January 2009 à 21:52

Merci pour cette procédure parfaitement claire.

Malheureusement à la fin de cette procédue, la console de commande MySql me renvoie un message d'erreur :
[ERROR] Can't open and lock privilege tables: Table 'mysql.servers' doesn't exist.
ERROR: 1146 Table 'mysql.servers' doesn't exist
Suit une dizaine de ligne décrivant les colonnes attendues pour la table mysql.event, puis
[ERROR] Event scheduler (qui à ce stade ne me semble pas anormal)
L'Event Scheduler est alors désactivé
et le rapport d'erreur se termine par : mysqld.exe: ready for connections.

Merci pour tout complément de procédure qui me permettra de réinitialiser le mot de passe.

Alain

Options: Répondre•Citer ce Message
Re: [topo] Réinitialisation du mot de passe root MySQL sous Windows
Envoyé par: Otomatic (---.fbx.proxad.net)
Date: 22 January 2009 à 09:54

Bonjour,

La table mysql.servers fait intégralement partie de l'installation de Wampserser 2.0f elle est située dans le dossier wamp\bin\mysql\mysql5.1.30\data\mysql sous la forme de trois fichiers servers.frm, servers.MYD et servers.MYI.

Si ces trois fichiers ne sont pas présents, c'est que l'installation ne s'est pas effectuée correctement.

Voir les procédures de ré-installation sans perte de données déjà décrites sur ces pages.

Options: Répondre•Citer ce Message
Re: [topo] Réinitialisation du mot de passe root MySQL sous Windows
Envoyé par: alain (---.fbx.proxad.net)
Date: 22 January 2009 à 14:09

Bonjour,

Merci pour cette réponse.
Avant de désinstaller et réinstaller, j'ai fait un test et j'ai installé WampServer sur une autre machine.
WampServer fonctionne sur cette autre machine. Pour autant les 3 fichiers servers .xxx ne se trouvent pas dans le dossier ...data/mysql !
Est-ce que j'ai loupé quelque chose ?

Il semblerait donc qu'une réinstallation ne créera pas ces 3 fichiers...
Vous me voyez perplexe...

Merci pour toute explication complémentaire

Cordialement

Alain

Options: Répondre•Citer ce Message
Re: [topo] Réinitialisation du mot de passe root MySQL sous Windows
Envoyé par: Otomatic (---.fbx.proxad.net)
Date: 22 January 2009 à 14:40

Bonjour,

Vous me voyez également perplexe puisque, tu du moins sur ma machine, la table mysql.servers existe mais est ... vide !
Voici sa structure :

DROP TABLE IF EXISTS `servers`;
CREATE TABLE IF NOT EXISTS `servers` (
`Server_name` char(64) NOT NULL DEFAULT '',
`Host` char(64) NOT NULL DEFAULT '',
`Db` char(64) NOT NULL DEFAULT '',
`Username` char(64) NOT NULL DEFAULT '',
`Password` char(64) NOT NULL DEFAULT '',
`Port` int(4) NOT NULL DEFAULT '0',
`Socket` char(64) NOT NULL DEFAULT '',
`Wrapper` char(64) NOT NULL DEFAULT '',
`Owner` char(64) NOT NULL DEFAULT '',
PRIMARY KEY (`Server_name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='MySQL Foreign Servers table';

Ce que vous pouvez faire est de créer cette table, par import via PhpMyAdmin sur la machine qui fonctionne puis de recopier les trois fichiers créés servers.xxx sur la machine qui ne « fonctionne » pas avant de recommencer la procédure de réinitialisation du mot de passe.

Vous pouvez également (Je l'ai déjà fait) copier les 3 fichiers users.xxx de la machine qui fonctionne vers celle qui ne fonctionne pas. Ces fichiers correspondent à la table users de la base mysql. C'est la table qui contient les utilisateurs, les mots de passe et les privilèges.

Options: Répondre•Citer ce Message
Re: [topo] Réinitialisation du mot de passe root MySQL sous Windows
Envoyé par: alain (---.fbx.proxad.net)
Date: 22 January 2009 à 15:32

Bonjour Otomatic,

Merci pour cette réponse rapide. J'ai toujours une grosse hésitation avant de désinstaller/réinstaller. C'est pourquoi je cherche à comprendre et ne vais vers cette solution qu'en dernier ressort.

1) Vous proposez une solution d'import via PhpMyAdmin sur la machine qui fonctionne puis de recopier les trois fichiers créés servers.xxx sur la machine qui ne « fonctionne » pas.
A partir d'où puis-je importer ces fichiers sur la machine qui fonctionne ?

2) J'ai contourné la solution de copie des trois fichiers (qui ne mettrait pas de mot de passe) en modifiant dans le fichier C:\wamp\apps\phpmyadmin3.1.1\config.inc.php
la ligne
$cfg['Servers'][$i]['password'] = '';
où j'ai remplacé '' par mon mot de passe entre quotes.

Et.... ça marche !

Je ne sais pas si cette solution est très orthodoxe, mais elle a le mérite, à moindre manipulations, de me permettre d'accéder de nouveau à ma base de données.

Qu'en pensez-vous ?
Y a-t-il des incidences néfastes que je ne soupçonne pas ?

Merci encore pour vos analyses et conseils.

Alain

Options: Répondre•Citer ce Message
Re: [topo] Réinitialisation du mot de passe root MySQL sous Windows
Envoyé par: Otomatic (---.fbx.proxad.net)
Date: 22 January 2009 à 17:29

Bonjour,

Rien que de très « normal » !

Lorsque vous mettez un mot de passe à root (Ou a un autre utilisateur), comme tout un chacun, vous le faites via PhpMyAdmin et, comme tout le monde (ou presque) vous croyez que maintenant, PhpMyAdmin connaît ledit mot de passe. Or, il n'en est rien.

Quand un utilisateur se connecte à phpMyAdmin, son nom d'utilisateur et son mot de passe éventuel sont passés directement à MySQL. phpMyAdmin ne fait pas de gestion d'utilisateurs par lui-même (autre que de permettre la manipulation de l'information du compte utilisateur MySQL) ; tous les utilisateurs doivent être des utilisateurs MySQL valides et phpMyAdmin doit être en mesure d'obtenir le mot de passe éventuel.

Il faut donc dire à phpMyAdmin quel est le mot de passe ou alors configurer phpMyAdmin pour qu'il demande lui-même le mot de passe et, bien sûr, comme vous l'avez fait, cela se passe dans le fichier wamp\apps\phpmyadmin3.1.1\config.inc.php et principalement aux lignes 71 à 73 :

- 1 - Solution de connexion automatique, en disant à phpMyAdmin de se connecter directement à MySQL en lui donnant le mot de passe :

$cfg['Servers'][$i]['auth_type'] = 'config';
$cfg['Servers'][$i]['user'] = 'root';
$cfg['Servers'][$i]['password'] = 'mot_de_passe';

- 2 - Solution de connexion avec demande utilisateur et mot de passe :

$cfg['Servers'][$i]['auth_type'] = 'http';
$cfg['Servers'][$i]['user'] = '';
$cfg['Servers'][$i]['password'] = '';

Personnellement, je préfère la solution - 2 - déjà, parce que le mot de passe ne paraîtra pas, en clair, dans un fichier ; ensuite parce que on peut alors se connecter à phpMyAdmin avec un autre utilisateur que root pour, par exemple, vérifier que les privilèges donnés à cet utilisateur sont bons.

Options: Répondre•Citer ce Message
Re: [topo] Réinitialisation du mot de passe root MySQL sous Windows
Envoyé par: alain (---.fbx.proxad.net)
Date: 23 January 2009 à 14:27

Bonjour Otomatic,

Bien ! Selon vos bons conseils :
1) J'ai copié les 3 fichiers users.xxx de la machine "valide" vers la "malade". Ok
2) Je suis revenu à la solution 2 que vous préconisez pour le fichier config.inc.php; Ok

Je suis donc revenu à ma config de base sans avoir eu besoin de désinstaller / réinstaller. Je n'ai plus de problème d'accès à phpMyAdmin. Super !

Merci beaucoup pour les tuyaux.

Reste à régler la question des fichiers manquants qui posent problème pour gérer les mots de passe :
servers.frm, servers.MYD et servers.MYI.

Je comprends que ces fichiers constituent la table mysql.servers et que je peux créer cette table par import de la structure que vous avez décrite plus haut.

Merci de confirmer la procédure suivante :

1) Je dois copier/coller cette structure, en respectant les retours à la ligne, dans un fichier txt (le nom de txt n'a pas d'importance)
2) Je dois importer via PhpMyAdmin ce txt afin de créer la table mysql.servers

Cette import créera les trois fichiers "servers" manquants et permettra de gérer les mots de passe.


Désolé de faire du pas à pas, mais j'ai l'impression que cette procédure pourra servir à d'autres. Donc autant qu'elle soit le plus précise possible.

Merci encore pour votre aide.

Alain

Options: Répondre•Citer ce Message
Re: [topo] Réinitialisation du mot de passe root MySQL sous Windows
Envoyé par: Otomatic (---.fbx.proxad.net)
Date: 23 January 2009 à 16:47

Bonjour,

Lancer Wampserver
Lancer PhpMyAdmin
Sélectionner, dans la partie gauche, la base mysql

Choisir dans la partie droite l'onglet SQL et, dans le cadre "Exécuter une ou des requêtes sur la base mysql", coller le texte suivant :

DROP TABLE IF EXISTS `servers`;
CREATE TABLE IF NOT EXISTS `servers` (
`Server_name` char(64) NOT NULL DEFAULT '',
`Host` char(64) NOT NULL DEFAULT '',
`Db` char(64) NOT NULL DEFAULT '',
`Username` char(64) NOT NULL DEFAULT '',
`Password` char(64) NOT NULL DEFAULT '',
`Port` int(4) NOT NULL DEFAULT '0',
`Socket` char(64) NOT NULL DEFAULT '',
`Wrapper` char(64) NOT NULL DEFAULT '',
`Owner` char(64) NOT NULL DEFAULT '',
PRIMARY KEY (`Server_name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='MySQL Foreign Servers table';

puis bouton Exécuter.

Un confirmation vous sera demandée, valider OK.

La table mysql.servers sera créée.

Nota : Je viens de le faire après avoir supprimé les trois fichiers servers.xxx

Options: Répondre•Citer ce Message
Re: [topo] Réinitialisation du mot de passe root MySQL sous Windows
Envoyé par: Otomatic (---.fbx.proxad.net)
Date: 23 January 2009 à 19:34

Bonsoir,

Suite sur le sujet :

[résolu] Erreur : Table 'mysql.servers' doesn't exist

Options: Répondre•Citer ce Message


Aller à : Liste des Forums•Liste des messages•Recherche•Connexion
Désolé, seuls les utilisateurs connectés peuvent envoyer des messages dans ce forum.
Cliquer ici pour se connecter

design by jidePowered by Alter Way get firefoxget PHP