MySQL

mysql5.7でパスワードを変更する

More than 1 year has passed since last update.


環境

CentOS7.1 (Vagrant)

MySQL 5.7.13

インストールはこっち


問題

MySQLをインストールして、$ mysql -uroot -proot で入ろうとしたら以下のエラー

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

MySQL5.7では初期パスワード(ランダム文字列)が発行されているらしい。面倒くさいので、rootユーザーのパスワードをrootに変更したい。


手順

初期パスワードは/var/log/mysqld.logに出力されている。

[vagrant@localhost ~]$ sudo cat /var/log/mysqld.log | grep "temporary password"

...
..temporary password is generated for root@localhost: ********
...

このパスワードを利用してrootでmysqlに入る。

mysql> SHOW VARIABLES LIKE 'validate_password%'; # パスワードの設定を確認

ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

と思ったら、先にパスワード変更を求められるので、

mysql> set password for root@localhost=password('root');

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

とするとこれも怒られる。どうも、ここによれば、validate_password_policyの初期値はMEDIUMで、パスワード設定に必要な条件は


MEDIUM ポリシーは、パスワードが最低 1 つの数値文字を含み、1 つの小文字および大文字を含み、1 つの特殊文字 (英数字以外) を含む必要があるという条件を追加します。


らしい。ので、適当な文字列を作成して、

mysql> set password for root@localhost=password('passwordPASSWORD@999');

Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> SHOW VARIABLES LIKE 'validate_password%'; # 再度パスワードの設定を確認
+--------------------------------------+--------+
| Variable_name | Value |
+--------------------------------------+--------+
| validate_password_dictionary_file | |
| validate_password_length | 8 |
| validate_password_mixed_case_count | 1 |
| validate_password_number_count | 1 |
| validate_password_policy | MEDIUM |
| validate_password_special_char_count | 1 |
+--------------------------------------+--------+
6 rows in set (0.01 sec)

パスワードをrootにするには、validate_password_length = 4 に、validate_password_policy = LOW にする。

mysql> SET GLOBAL validate_password_length=4;

mysql> SET GLOBAL validate_password_policy=LOW;
mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+-------+
| Variable_name | Value |
+--------------------------------------+-------+
| validate_password_dictionary_file | |
| validate_password_length | 4 |
| validate_password_mixed_case_count | 1 |
| validate_password_number_count | 1 |
| validate_password_policy | LOW |
| validate_password_special_char_count | 1 |
+--------------------------------------+-------+
6 rows in set (0.00 sec)
mysql> set password for root@localhost=password('root');

これで、rootに変更!

参考リンク:

MySQL 5.7 をインストールしたら最初に行うセットアップ

mysqlのパスワード変更ができない!!!