はじめに
MySQLのパスワードを紛失しました :))))))
公式のやりかたでうまく行きませんでした
MySQL公式によると次のやり方で出来るそうで下がうまく行きませんでした。
MySQL 5.7.6 and later:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
MySQL 5.7.5 and earlier:
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');
http://dev.mysql.com/doc/refman/5.7/en/resetting-permissions.html
要約するとmysql起動時に特定のSQLを実行するようにしてパスワードをリセットしましょう、ということでした。
Mac OS Xのbrewではmysql.server
という起動スクリプトで色々とできるのでそちらから設定しました。
$ mysql.server --init-file=/path/to/init.sql
しかしながら動きません :(
データベースのクリア
しょうが無いのでデータベースを飛ばしてでもリセットすることに染ました。
以前はデータDIR(datadir)を消してmysql_install_db
を実行すれば良かったのですが、最近はうまく行かないようです。
$ rm -rf /usr/local/var/mysql
$ mysql_install_db
2016-06-09 14:46:02 [WARNING] mysql_install_db is deprecated. Please consider switching to mysqld --initialize
2016-06-09 14:46:02 [ERROR] The data directory needs to be specified.
どうやら最近はmysqld --initialize
を利用するようです。
$ mysqld --initialize ⏎ master
中略
2016-06-09T05:46:11.831427Z 1 [Note] A temporary password is generated for root@localhost: 0tPB.HpR6+++
ちゃんとうまく行きました。
しかしながらここで発行されるパスワードは一般に使うことが出来ず、必ずリセットしなければ成らないようです。(MySQLWorkbenchなどでこのパスワードで接続をしようとすると弾かれちゃいます)
$ mysql -u root -p
Enter Password:
mysql > alter user 'root'@'localhost' identified by 'password';
ここで新しいパスワードを設定するとうまくいけました。
やったね!