環境
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のパスワード変更ができない!!!