J'essaie de changer le mot de passe root MySql.
Ce que j'ai fait est ci-dessous.
mysqld_safe --skip-grant
update user set password=password('1111') where user='root';
et vous recevez un message d'erreur -> ERROR 1054 (42S22): Unknown column 'password' in 'field list'
.Pour votre information, j'ai use mysql;
. J'ai donc sélectionné la requête sur la table utilisateur et trouvé que la colonne mot de passe n'existe pas.
C'est très bizarre. Est-il possible que la table utilisateur d'origine n'ait pas de colonne mot de passe?
Comment puis-je changer le mot de passe, qui n'existe pas?
Merci pour votre réponse: D
Dans MySQL 5.7, le champ mot de passe de la table mysql.user a été supprimé. Le nom du champ est maintenant 'authentication_string'.
Choisissez d'abord la base de données:
mysql>use mysql;
Et puis montrez les tables:
mysql>show tables;
Vous trouverez la table utilisateur, voyons maintenant ses champs:
mysql> describe user;
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Host | char(60) | NO | PRI | | |
| User | char(16) | NO | PRI | | |
| Select_priv | enum('N','Y') | NO | | N | |
| Insert_priv | enum('N','Y') | NO | | N | |
| Update_priv | enum('N','Y') | NO | | N | |
| Delete_priv | enum('N','Y') | NO | | N | |
| Create_priv | enum('N','Y') | NO | | N | |
| Drop_priv | enum('N','Y') | NO | | N | |
| Reload_priv | enum('N','Y') | NO | | N | |
| Shutdown_priv | enum('N','Y') | NO | | N | |
| Process_priv | enum('N','Y') | NO | | N | |
| File_priv | enum('N','Y') | NO | | N | |
| Grant_priv | enum('N','Y') | NO | | N | |
| References_priv | enum('N','Y') | NO | | N | |
| Index_priv | enum('N','Y') | NO | | N | |
| Alter_priv | enum('N','Y') | NO | | N | |
| Show_db_priv | enum('N','Y') | NO | | N | |
| Super_priv | enum('N','Y') | NO | | N | |
| Create_tmp_table_priv | enum('N','Y') | NO | | N | |
| Lock_tables_priv | enum('N','Y') | NO | | N | |
| Execute_priv | enum('N','Y') | NO | | N | |
| Repl_slave_priv | enum('N','Y') | NO | | N | |
| Repl_client_priv | enum('N','Y') | NO | | N | |
| Create_view_priv | enum('N','Y') | NO | | N | |
| Show_view_priv | enum('N','Y') | NO | | N | |
| Create_routine_priv | enum('N','Y') | NO | | N | |
| Alter_routine_priv | enum('N','Y') | NO | | N | |
| Create_user_priv | enum('N','Y') | NO | | N | |
| Event_priv | enum('N','Y') | NO | | N | |
| Trigger_priv | enum('N','Y') | NO | | N | |
| Create_tablespace_priv | enum('N','Y') | NO | | N | |
| ssl_type | enum('','ANY','X509','SPECIFIED') | NO | | | |
| ssl_cipher | blob | NO | | NULL | |
| x509_issuer | blob | NO | | NULL | |
| x509_subject | blob | NO | | NULL | |
| max_questions | int(11) unsigned | NO | | 0 | |
| max_updates | int(11) unsigned | NO | | 0 | |
| max_connections | int(11) unsigned | NO | | 0 | |
| max_user_connections | int(11) unsigned | NO | | 0 | |
| plugin | char(64) | NO | | mysql_native_password | |
| authentication_string | text | YES | | NULL | |
| password_expired | enum('N','Y') | NO | | N | |
| password_last_changed | timestamp | YES | | NULL | |
| password_lifetime | smallint(5) unsigned | YES | | NULL | |
| account_locked | enum('N','Y') | NO | | N | |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
45 rows in set (0.00 sec)
Surprise! Il n'y a pas de champ nommé 'mot de passe', le champ de mot de passe s'appelle 'authentication_string'. Alors, faites ceci:
update user set authentication_string=password('1111') where user='root';
Maintenant, tout ira bien.
Par rapport à MySQL 5.6, les modifications sont assez importantes: Nouveautés de MySQL 5.7
Utilisez la commande ALTER USER
plutôt que d'essayer de mettre à jour une ligne USER
. N'oubliez pas qu'il peut y avoir plus d'un utilisateur 'root' car les entités utilisateur sont également qualifiées par la machine à laquelle elles se connectent.
https://dev.mysql.com/doc/refman/5.7/en/alter-user.html
Par exemple.
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new-password'
ALTER USER 'root'@'*' IDENTIFIED BY 'new-password'
Cette erreur se produit si vous n'avez pas défini le mot de passe lors de l'installation, dans ce cas le mysql utilisant le plugin unix-socket .
Mais si supprimer le lien de plugin de paramètres (table mysql.user) sera un autre problème. Cela ne résout pas le problème et crée un autre problème. Pour réparer le lien supprimé et définir le mot de passe ("PWD"), procédez comme suit:
1) Exécutez avec --skip-grant-tables
comme indiqué ci-dessus.
Si cela ne fonctionne pas, ajoutez la chaîne skip-grant-tables
dans la section [mysqld]
de /etc/mysql/mysql.conf.d/mysqld.cnf
. Ensuite, faites Sudo service mysql restart
.
2) Exécutez mysql -u root -p
, puis (changez "PWD"):
update mysql.user
set authentication_string=PASSWORD("PWD"), plugin="mysql_native_password"
where User='root' and Host='localhost';
flush privileges;
quit
alors Sudo service mysql restart
. Vérifier: mysql -u root -p
.
Avant restart
, supprimez cette chaîne du fichier mysqld.cnf, si vous la définissez ici.
Merci de votre aide. Juste au cas où les gens ont toujours des problèmes, essayez ceci.
Pour MySQL version 5.6 et inférieure
Vous avez oublié votre mot de passe 'ROOT' pour Mac OS X et vous devez le réinitialiser? Suivez ces 4 étapes simples:
Sudo /usr/local/mysql/bin/mysqld_safe --skip-grant-tables
Sudo /usr/local/mysql/bin/mysql -u root
UPDATE mysql.user SET Password=PASSWORD('NewPassword') WHERE User='root';
FLUSH PRIVILEGES;
\q
Pour MySQL version 5.7 et supérieure
'System Prefrences' > MySQL > 'Stop MySQL Server'
Sudo /usr/local/mysql/bin/mysqld_safe --skip-grant-tables
Sudo /usr/local/mysql/bin/mysql -u root
UPDATE mysql.user SET authentication_string=PASSWORD('NewPassword') WHERE User='root';
FLUSH PRIVILEGES;
\q
Cela ne fonctionnait avec moi que lorsque je "vidais" après les commandes mentionnées ici. Voici la liste complète des commandes que j'ai utilisées:
Les réponses précédentes pourraient ne pas fonctionner pour les versions ultérieures de mysql. Essayez ces étapes si les réponses précédentes ne vous ont pas aidé:
1- Cliquez sur l'icône wamp> mysql> mysql console
2- écrire les commandes suivantes, une par une
use mysql;
update user set authentication_string=password('your_password') where user='root';
FLUSH PRIVILEGES;
quit
Pour ce problème, j’ai utilisé une méthode simple et grossière, renommer le nom du champ en mot de passe. La raison en est que j’utilise le logiciel mac navicat premium dans l’erreur de fonctionnement visuel: colonne inconnue le logiciel lui-même utilise un mot de passe pour que je ne puisse pas facilement utiliser . Par conséquent, je suis en ligne de commande dans la base de données, puis
Use mysql;
Et puis modifiez le nom du champ:
ALTER TABLE user CHANGE authentication_string password text;
Après tout normal.
rappelez-vous que le mot de passe doit être défini même après le redémarrage de mysql
SET PASSWORD = PASSWORD('root');
Cause racine: root ne possède pas de mot de passe et votre déclaration python connect devrait en tenir compte.
Pour résoudre l'erreur 1698, remplacez le mot de passe de votre connexion python par ''.
remarque: la mise à jour manuelle du mot de passe de l'utilisateur ne résoudra pas le problème, mais bien toujours avoir l'erreur 1698