Help us understand the problem. What is going on with this article?

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

More than 3 years have 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のパスワード変更ができない!!!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした