web-dev-qa-db-ja.com

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

現在の環境:

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'

何か不足していますか?

14
Shivu RH

MySQL 5.7では、mysql.userテーブルフィールドのpasswordフィールドが削除され、フィールド名は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');
24
Rahul

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の使用を停止する

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

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

2
Ivanov

_mysqladmin -u user-name password -p "oldpassword" "newpass"_

ログインできる場合は、これを試してください_""_動作しません_''_単一引用符を試してください

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

1
Mongrel

私の場合

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サーバーを再起動する必要があります。

0
Jack LI