Wie ändere ich das MySQL-Root-Passwort mit MySQL v5.7?

14

Aktuelles Umfeld:

mysql> show variables like "%version%";
+-------------------------+------------------------------+
| Variable_name           | Value                        |
+-------------------------+------------------------------+
| innodb_version          | 5.7.13                       |
| protocol_version        | 10                           |
| slave_type_conversions  |                              |
| tls_version             | TLSv1,TLSv1.1                |
| version                 | 5.7.13                       |
| version_comment         | MySQL Community Server (GPL) |
| version_compile_machine | x86_64                       |
| version_compile_os      | Linux                        |
+-------------------------+------------------------------+
8 rows in set (0.01 sec)

Kennwortänderungsbefehl Benutzer:

mysql> update user set password=PASSWORD("XXXX") where user="root";
ERROR 1054 (42S22): Unknown column 'password' in 'field list'

Vermisse ich etwas?

Shivu RH
quelle
versuchen Sie, mysqlim abgesicherten Modus zu starten . dann können Sie das root-Passwort ändern
Mongrel
Für jeden, der diesen Thread liest. MySQL 5.7 hat wesentliche Änderungen unter der Haube. Bitte lesen Sie diese Informationen, bevor Sie ein Upgrade durchführen.
Rui F Ribeiro

Antworten:

24

In MySQL 5.7 ist das passwordFeld inmysql.user Tabellenfeld entfernt, jetzt lautet der Feldname authentication_string.

Wählen Sie zuerst die Datenbank:

mysql> use mysql;

Und dann zeige die Tabellen:

mysql> show tables;

Sie finden die userTabelle und sehen ihre Felder:

mysql> describe user;

Sie werden feststellen, dass es kein benanntes passwordFeld gibt, das Passwortfeld heißt authentication_string. Also mach einfach folgendes:

update user set authentication_string=password('XXXX') where user='root';

Wie von @Rui F Ribeiro vorgeschlagen, können Sie alternativ Folgendes ausführen:

mysql> SET PASSWORD FOR 'root' = PASSWORD('new_password');
Rahul
quelle
1
+1 für die Referenz "authentication_string". Ich habe es auch kürzlich erfahren, nachdem ich auf 5.7
Rui F Ribeiro am
4
Eine andere Alternative für 5.7 istSET PASSWORD FOR 'root' = PASSWORD('new_password');
Rui F Ribeiro
1
@RuiFRibeiro danke, aktualisiert meine Antwort
Rahul
1
Rahul Ursprünglich habe ich den Thread auf eine spätere Version als 5.7 bearbeitet, ihn dann jedoch auf MySQL 5.7 geändert, um dem Geist der Frage besser gerecht zu werden. zB @Shivu wusste nicht, dass es sich um eine Änderung in 5.7 handelt.
Rui F Ribeiro
1
Es ist eine Art, die Frage zu formulieren. Wir bearbeiten Fragen und Antworten nicht nur zum Nutzen des OP, sondern auch für andere später.
Rui F Ribeiro
2

Die MySQL-Methode zum Ändern des Passworts lautet SET PASSWORD

SET PASSWORD FOR 'root' = PASSWORD('new_password');

siehe MySQL 5.7 Referenzhandbuch / ... / SET PASSWORD Syntax

Die Anweisung SET PASSWORD weist einem MySQL-Benutzerkonto ein Kennwort zu, das entweder als Klartext (unverschlüsselt) oder als verschlüsselter Wert angegeben wird:

'auth_string' represents a cleartext password.

'hash_string' represents an encrypted password.

Die akzeptierte Antwort von Rahul zeigt, wie das Passwort mit DMLAnweisung aktualisiert wird .

update user set authentication_string=password('XXXX') where user='root';

Achtung: Das ist nicht der offizielle und unterstützte Weg. Es kann Probleme verursachen, wenn Sie nicht wissen, was Sie tun. Nicht vergessenFLUSH PRIVILEGES .

Bei den meisten Vorgängen, wie dem Erstellen eines Benutzers, dem Ändern seiner Berechtigungen oder dem Ändern seines Kennworts, möchten Sie die allgemeinen Anweisungen verwenden. Sie sind nicht nur einfacher zu bedienen und mit einer größeren Anzahl von MySQL-Versionen kompatibel, sondern verhindern auch, dass Sie Fehler machen (denken Sie natürlich daran, den SQL-Modus „NO_AUTO_CREATE_USER“ einzurichten). Sie funktionieren sogar normalerweise in einer MyISAM-feindlichen Umgebung wie einem Galera-Cluster.

Verwenden Sie FLUSH PRIVILEGES nicht mehr

Bitte verwenden GRANT, REVOKE, SET PASSWORD, oderRENAME USER und nicht direkt DML - Anweisungen.

Update: SET PASSWORD ... = PASSWORD-Syntax ('auth_string') ist seit MySQL 5.7.6 veraltet und wird in einer zukünftigen MySQL-Version entfernt.

Ivanov
quelle
1

mysqladmin -u user-name password -p "oldpassword" "newpass"

Wenn Sie sich anmelden können, ""versuchen Sie es mit einem ''einfachen Anführungszeichen

update user set password=PASSWORD("newpass") where User='ENTER-USER-NAME-HERE';

Mischling
quelle
Während ich die mysqladmin-Antwort bevorzuge, sehe ich Rahuls Antwort. Ihre SQL-Abfrage ist veraltet. Ich habe den mysqladmin korrigiert, bei dir fehlte die Passwort-Direktive.
Rui F Ribeiro
1
Danke Ribeiro. Ich habe es verpasstauthentication_string
Mongrel
0

In meinem Fall

mysql.server start
$ mysql -uroot
mysql> update user set authentication_string=password('123456') where User='root';
mysql> exit;
mysql.server restart (if you not restart , connection will not work.)

Ich denke, Ihr Update-Befehl ist richtig, aber Sie müssen Ihren MySQL-Server neu starten.

Jack LI
quelle
-1

Für dieses Problem habe ich eine einfache und unhöfliche Methode verwendet, den Feldnamen in Passwort umzubenennen, der Grund dafür ist, dass ich die mac navicat premium Software bei der visuellen Fehlbedienung verwende: Unbekannte Spalte 'Passwort' in 'Feldliste', die Software selbst verwendet Passwort, so dass ich nicht einfach bedienen kann. Deshalb root ich in der Datenbank-Kommandozeile, laufe

Use mysql;

Und ändern Sie dann den Feldnamen:

ALTER TABLE user CHANGE authentication_string password text;

Immerhin normal.

luyishisi
quelle