Ich versuche, das MySql-Root-Passwort zu ändern.
Was ich getan habe, ist unten.
mysqld_safe --skip-grant
update user set password=password('1111') where user='root';
aus und Sie erhalten eine Fehlermeldung -> ERROR 1054 (42S22): Unknown column 'password' in 'field list'
.Zu Ihrer Information, ich habe use mysql;
. Also habe ich Abfrage auf Benutzertabelle ausgewählt und gefunden, dass die Passwortspalte tatsächlich nicht existiert.
Es ist sehr komisch. Ist es möglich, dass die ursprüngliche Benutzertabelle keine Kennwortspalte enthält?
Wie kann ich ein Passwort ändern, das nicht existiert?
Danke für deine Antwort: D
In MySQL 5.7 wurde das Kennwortfeld im Tabellenfeld mysql.user entfernt. Der Feldname lautet nun 'authentication_string'.
Wählen Sie zuerst die Datenbank aus:
mysql>use mysql;
Und dann zeigen Sie die Tabellen:
mysql>show tables;
Sie finden die Benutzertabelle, nun sehen wir ihre Felder:
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)
Überraschung! Es gibt kein Feld mit dem Namen 'password', das Passwortfeld heißt 'authentication_string'. Also einfach das tun:
update user set authentication_string=password('1111') where user='root';
Nun wird alles in Ordnung sein.
Im Vergleich zu MySQL 5.6 sind die Änderungen recht umfangreich: Was ist neu in MySQL 5.7
Eine Falle, in die ich geraten bin, ist, dass es eine gibt kein Passwortfeld jetzt wurde es so umbenannt:
update user set password=PASSWORD("YOURPASSWORDHERE") where user='root';
Sollte jetzt sein:
update user set authentication_string=password('YOURPASSWORDHERE') where user='root';
Dieser Fehler tritt auf, wenn Sie das Kennwort bei der Installation nicht festgelegt haben, in diesem Fall mysql using unix-socket plugin .
Aber wenn Sie den Plugin-Link aus den Einstellungen (Tabelle mysql.user) löschen, tritt ein anderes Problem auf. Dies behebt das Problem nicht und führt zu einem weiteren Problem. Um den gelöschten Link zu reparieren und das Passwort ("PWD") festzulegen, gehen Sie wie folgt vor:
1) Führen Sie mit --skip-grant-tables
wie oben gesagt.
Wenn es nicht funktioniert, fügen Sie den String skip-grant-tables
im Abschnitt [mysqld]
von /etc/mysql/mysql.conf.d/mysqld.cnf
. Dann mach Sudo service mysql restart
.
2) Führen Sie mysql -u root -p
, dann (ändere "PWD"):
update mysql.user
set authentication_string=PASSWORD("PWD"), plugin="mysql_native_password"
where User='root' and Host='localhost';
flush privileges;
quit
dann Sudo service mysql restart
. Prüfen: mysql -u root -p
.
Entfernen Sie vor restart
diesen String aus der Datei mysqld.cnf, wenn Sie ihn dort setzen.
Verwenden Sie den Befehl ALTER USER
, anstatt zu versuchen, eine Zeile USER
zu aktualisieren. Beachten Sie, dass es möglicherweise mehr als einen 'root'-Benutzer gibt, da Benutzerentitäten auch von dem Computer qualifiziert werden, von dem aus sie eine Verbindung herstellen
https://dev.mysql.com/doc/refman/5.7/de/alter-user.html
Zum Beispiel.
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new-password'
ALTER USER 'root'@'*' IDENTIFIED BY 'new-password'
Danke für deine Hilfe. Für den Fall, dass die Leute immer noch Probleme haben, probieren Sie es aus.
Für MySQL Version 5.6 und darunter
Haben Sie Ihr ROOT-Passwort für Mac OS X vergessen und müssen es zurücksetzen? Folge diesen 4 einfachen Schritten:
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
Für MySQL Version 5.7 und höher
'System Prefrences' > MySQL > 'Stop MySQL Server'
aus erfolgen.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
Es funktionierte nur bei mir, wenn ich nach den hier genannten Befehlen "spülte". Hier ist die vollständige Liste der von mir verwendeten Befehle:
Vorherige Antworten funktionieren möglicherweise nicht für spätere MySQL-Versionen. Führen Sie die folgenden Schritte aus, wenn die vorherigen Antworten nicht für Sie geeignet waren:
1- Klicken Sie auf das Wamp-Symbol> MySQL> MySQL-Konsole
2- Schreiben Sie nacheinander die folgenden Befehle
use mysql;
update user set authentication_string=password('your_password') where user='root';
FLUSH PRIVILEGES;
quit
Für dieses Problem habe ich eine einfache und unhöfliche Methode verwendet, den Feldnamen in Kennwort umbenannt. Der Grund dafür ist, dass ich die Mac Navicat Premium-Software im visuellen Bedienungsfehler verwende: Unbekannte Spalte 'Kennwort' in 'Feldliste', die Software selbst benutzt Passwort, damit ich nicht einfach bedienen kann ..__ Daher verwende ich mich in die Datenbank-Kommandozeile, laufe
Use mysql;
Und ändern Sie dann den Feldnamen:
ALTER TABLE user CHANGE authentication_string password text;
Immerhin normal.
denken Sie daran, dass das Kennwort auch nach dem Neustart von mysql wie folgt festgelegt werden muss
SET PASSWORD = PASSWORD('root');
Root Cause: root hat kein Passwort, und Ihre Python-Connect-Anweisung sollte dies widerspiegeln.
Um den Fehler 1698 zu beheben, ändern Sie Ihr Python-Verbindungskennwort in ''.
hinweis: Wenn Sie das Kennwort des Benutzers manuell aktualisieren, wird das Problem nicht behoben. noch Fehler 1698 erhalten