MySQL8でrootのパスワードを忘れたとき

投稿者: | 2020年7月14日

自分の場合、忘れたというかパスワードの方式がいつのまにか書き換えられてたような感じでした。
その際に対応した手順を残しておきます。

まず my.cnf の [mysqld]に「skip-grant-tables」を追記します。
これはログイン時にパスワードの認証を行わなくするためのものです。

[mysqld]
(中略)
skip-grant-tables

設定を反映させるためmysqldを再起動します。

systemctl restart mysqld

パスワードの入力無しでmysqlのコンソールに入ります。
ここで次のようにパスワードを空っぽにするSQLを実行します。
これはこの状態のときalter userが使えないのと、MySQL8ではpassword関数が存在しないためです。

mysql> update mysql.user set authentication_string = null where User = 'root';

その後、my.cnfからskip-grant-tablesの記述を除き、再びmysqldを再起動します。
これでrootはパスワード無しでmysqlのコンソールに入れるようになりましたので、いつも通りにパスワードを設定します。

mysql> alter user root@localhost identified by 'パスワード';

以上で新しく設定したパスワードでログインできるようになります。