Qiitaに書こうと思ったが無数に類似した記事が出てきたので、自分のはてなブログに書く程度に収めておくこととする。(なぜハッカソンで急いで探しているときには発見ができないのか。これがわからない)
下記、Qiitaように書いたため若干丁寧になっているが自分用のメモとして公開しておく。
MySQL5.7系限定かもしれない。ハッカソン中にMySQLへのパスワード忘れて、リセットしようとして… 5.5系の記事を踏んでまんまとひっかかりました。これは私のローカルの環境の問題ですが、実運用とかではまず忘れるということ自体やばいので避けましょう。。。
ちなみにhomebrewで入れたものなので、もしそれ以外の方法で入れている場合は見に行く設定パスが違う可能性が高いです。 which mysql.server
等で探してください。
手順概要
mysql.server
停止--skip-grant-tables
付きでリスタート- 別のterminalでMySQLに入る
- パスワードをアップデートする(今回は適当に
password
にリセットする。本当はちゃんとしたパスワードにしておくべきだが…。) mysql.server
をリスタート
ざっくりいうとこの手順です。
MySQL5.7 の場合は、 mysql.userのauthentication_string
がパスワードになっています。このパスワードはハッシュ化されているので、普通に書き換えると失敗します。
実行手順
mysql.server
停止
mysql.server stop
--skip-grant-tables
付きでリスタート
mysql.server stop
別のterminalでMySQLに入る
terminalを起動するか別のタブに移動して
mysql -u root
パスワードをアップデートする
update mysql.user set authentication_string = PASSWORD('password') where user = 'root';
確認はこれで。ユーザーパスワードにハッシュが入ってたら成功。のはず。
select host, user, authentication_string from mysql.user;
設定し終わったら念の為MySQLから出る。
exit
mysql.server
をリスタート
mysql.server restart
これで mysql -u root -p
でmysqlにログインしようとした際、 password
でログインできるようになる。
ハマった感想
業務ではMySQLガンガン使っているものの、パスワード設定とか根本的なものをやったことはあまりなかったので良い勉強になった。が、ハッカソン中にこれをやってしまうとメンバーへの影響が大きいので… 環境構築は事前にしておこうね!