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

  • 84
    Like
  • 2
    Comment
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のパスワード変更ができない!!!