MySQL v5.7を使用してMySQLの「root」パスワードを変更する方法


14

現在の環境:

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)

パスワード変更コマンドユーザー:

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

何か不足していますか?


mysqlセーフモードで起動してみてください。その後、ルートパスワードを変更できます
Mongrel

このスレッドを読んでいる人に。MySQL 5.7には、内部で大幅な変更があります。アップグレードする前にそれらについて読んでください。
ルイFリベイロ

回答:


24

MySQLの5.7では、passwordフィールドmysql.userテーブルのフィールドは現在、フィールド名は、削除されましたauthentication_string

最初にデータベースを選択します。

mysql> use mysql;

そして、テーブルを表示します。

mysql> show tables;

userテーブルが見つかり、そのフィールドが表示されます。

mysql> describe user;

あなたは名前のフィールドがないことに気付くでしょうpassword、パスワードフィールドの名前はauthentication_string。したがって、これを行うだけです:

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

@Rui F Ribeiroが示唆するように、代わりに次のコマンドを実行できます。

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

1
authentication_string参照の場合は+1。また、最近5.7にアップグレードした後、それについて知りました
ルイFリベイロ

4
それがこの回答に完全に送られていないが、5.7のための別の代替があるSET PASSWORD FOR 'root' = PASSWORD('new_password');
ルイF・リベイロ

1
@RuiFRibeiroおかげで、私の答えを更新しました
ラーフル

1
Rahul最初はスレッドを5.7以降に編集しましたが、質問の精神をさらに保つために、MySQL 5.7を使用するように変更しました。たとえば、@ Shivuは5.7の変更であることを知りませんでした。
ルイFリベイロ

1
それは質問を組み立てる方法です。私たちは、OPの利益のためだけでなく、後で他の人のためにも質問と回答を編集しています。
ルイFリベイロ

2

パスワードを変更するMySQLの方法は SET PASSWORD

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

MySQL 5.7リファレンスマニュアルを参照してください/ ... / SET PASSWORD構文

SET PASSWORDステートメントは、クリアテキスト(暗号化されていない)または暗号化された値として指定されたパスワードをMySQLユーザーアカウントに割り当てます。

'auth_string' represents a cleartext password.

'hash_string' represents an encrypted password.

Rahulから受け入れられた回答は、DML声明でパスワードを更新する方法を示しています。

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

警告:これは公式でサポートされている方法ではありません。何をしているのかわからない場合、トラブルを引き起こす可能性があります。忘れないでFLUSH PRIVILEGES

ユーザーの作成、権限の変更、パスワードの変更など、ほとんどの操作では、高レベルのステートメントを使用する必要があります。使いやすく、多数のMySQLバージョンと互換性があるだけでなく、間違いを防ぐこともできます(もちろん、「NO_AUTO_CREATE_USER」SQLモードを設定することを忘れないでください)。それらは通常、GaleraクラスタのようなMyISAMに敵対する環境でもうまく機能します。

FLUSH PRIVILEGESの使用をやめる

使用してくださいGRANTREVOKESET PASSWORD、またはRENAME USER直接DMLステートメントをしていません。

更新:SET PASSWORD ... = PASSWORD( 'auth_string')構文はMySQL 5.7.6で非推奨になり、将来のMySQLリリースで削除される予定です。


1

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

ログインできる場合は、この""機能を試してみてください''一重引用符を試してください

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


私はmysqladminの回答を好みますが、Rahulの回答をご覧ください。SQLクエリが古くなっています。mysqladminを修正しましたが、パスワードディレクティブがありませんでした。
ルイFリベイロ

1
リベイロに感謝します。逃したauthentication_string
雑種

0

私の場合

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.)

したがって、更新コマンドは正しいと思いますが、mysqlサーバーを再起動する必要があります。


-1

この問題では、シンプルで無礼な方法を使用し、フィールド名をパスワードに変更しました。これは、視覚的な操作エラーでmac navicatプレミアムソフトウェアを使用しているためです。ソフトウェア自体はパスワードを使用するため、簡単に操作することはできません。したがって、私はデータベースのコマンドラインにルートし、実行します

Use mysql;

そして、フィールド名を変更します。

ALTER TABLE user CHANGE authentication_string password text;

やっぱり普通。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.