MySQLのrootパスワードを忘れた!ってときの対処法(Windows)


まえがき

日頃から使っていればいいんですが、たまに思い出したように使うので
その都度rootパスワードを忘れてMySQLにログインできない。
そんな私のような人向けというか私のための記事です。

環境など

  • Windows 10(64bit)
  • MySQL 5.7
  • サービスで実行

コマンドラインでmysql --versionと入力すれば
こんな感じでお使いのバージョンが表示されるはず。

mysql Ver 14.14 Distrib 5.7.17, for Win64 (x86_64)

サービスで動いているMySQLの息の根を止める

サービスマネージャーを起動して
MySQLの上で右クリックして停止を選択すれば止まります。

コマンドラインなら

net stop MySQL57

この方法でもよし。

パスワードなしで使えるモードでMySQLを起動

コマンドプロンプトを管理者権限で実行。
基本はこのコマンドで実行できる(がしかし)

mysqld --skip-grant-tables

mysqld: Can't change dir to 'C:\Program Files\MySQL\MySQL Server 5.7\data\' (Errcode: 2 - No such file or directory)

インストール時に設定いじってるとこんな感じでうまくいかないことも
私はこのパティーンでした。

サービスのプロパティを確認

サービスマネージャーのMySQLを右クリック、プロパティを選択。
ここから実行時に指定している引数などを確認できるのでそれをパクってくる。

後ろのサービス名MySQL57のところはいらない。

MySQLを起動

"C:\Program Files\MySQL\MySQL Server 5.7\bin\mysqld.exe" --defaults-file="C:\ProgramData\MySQL\MySQL Server 5.7\my.ini" --skip-grant-tables

パスは各自読み替えてね。
これを実行するとコマンドプロンプトは反応が返ってこなくなる、だがそれでいい。
裏でMySQLが動いている状態になる。

rootパスワードを変更する

新たにコマンドプロンプトを立ち上げてmysqlにアクセス。

mysql -u root mysql

これでmysql databaseを指定した状態で入れるはず。

Update SQLでuserテーブルの中身を更新

mysql > update user set authentication_string =PASSWORD('新しいパスワード') where user = 'root'
mysql > FLUSH PRIVILEGES;
mysql > exit;

公式ページではPasswordカラムを更新するようになっていたが
MySQL5.7にはそんなカラムはありませんでした。
authentication_stringが正解です。

コマンド実行してMySQLから抜けたら、コマンドプロンプトを閉じます。

後処理

もう1つ開いていたコマンドプロンプトも閉じます。
ただMySQLが裏で実行された状態のままになっているので
タスクマネージャーを開いて、mysqld.exeを強制終了します。

後は通常通りサービスでMySQLを開始し、コマンドプロンプトから

mysql -u root -p

Enter Password:

再設定したパスワードでMySQLに入れる(はず)