mysqlのインストールが思った通りにいかなかった、という経験はないだろうか。
その場合mysqlを一旦消し、再インストールすることになる。
だがここで問題が生じる。
二回目に再インストールを行った場合、/var/log/mysqlに初回ランダムパスワードが載らないのだ。
当方の場合は一回目からランダムパスワード入れても下記のメッセージがでて、入れなかったけれど…
1 |
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) |
こういう場合はパスワードを強制的に変更するしかない。
パスワード初期化
初期化というか強制変更?
CetOS7では、service系のコマンドが使えなくなっているので注意しよう。
まずは–skip-grant-tablesオプションでmysqlを起動する。
1 |
systemctl set-environment MYSQLD_OPTS="--skip-grant-tables" |
--skip-grant-tables
このオプションにより、サーバーは権限システムをまったく使用せずに開始され、サーバーへのアクセス権を持つすべてのユーザーにすべてのデータベースに対する無制限アクセス権が与えられます。
これでmysqlにパスワードなしでログインできるようになった。
1 |
mysql -u root |
任意のパスワードを設定しよう。
1 |
update user set authentication_string=password("設定するパスワード") where user='root'; |
権限テーブルの再読み込みを行う。
1 |
flush privileges; |
mysqlを再起動して終了だが、ここで–skip-grant-tablesオプションを解除しておくこと。
1 2 3 4 5 |
systemctl stop mysqld systemctl set-environment MYSQLD_OPTS="" systemctl start mysqld |
これでmysqlに設定したパスワードでログインできるようになった。
おまけ:簡単なパスワードを許可する
最近の、というかmysql 5.7以降は、セキュリティがうんたらかんたらで、やたら厳しいパスワード設定を求められる。
うっかり適当なパスワードを設定すると下記のように怒られる。
1 2 |
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements (あなたのパスワードは最新のポリシー要求を満たしてないよ!) |
だが個人使用なのでそこまで難解なパスワードは必要ない。
そういう方はパスワードレベルを下げておこう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
SET GLOBAL validate_password_length=4; SET GLOBAL validate_password_policy=LOW; mysql> SHOW VARIABLES LIKE 'validate_password%'; +--------------------------------------+-------+ | Variable_name | Value | +--------------------------------------+-------+ | validate_password_check_user_name | OFF | | 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 | +--------------------------------------+-------+ 7 rows in set (0.00 sec) |
これで4文字以上ならどんなものでもパスワードとして認められるようになった。
・簡単なパスワードでのユーザー作成。
1 2 |
CREATE USER 'user'@'localhost' IDENTIFIED BY '適当なパスワード'; Query OK, 0 rows affected (0.00 sec) |
・rootユーザーのパスワードを変更。
1 2 |
use mysql Database changed |
1 2 3 |
UPDATE user SET authentication_string=password('変更パスワード') WHERE user='root'; Query OK, 1 row affected, 1 warning (0.01 sec) Rows matched: 1 Changed: 1 Warnings: 1 |
1 |
flush privileges; |