MySQL の管理者パスワードを忘れたときの復活方法

連休中に自宅サーバーのメンテをしようかな、と久しぶりにコンソールを立ち上げたら、MySQL のパスワード覚えてねーとなったので備忘録的に MySQL の管理者パスワードを忘れたときのリカバリー方法を書いておきます。

MySQL をセーフモードで起動する

MySQLサービスの停止 以下のコマンドを実行して、デーモンを停止する。

1
$ sudo systemctl stop mariadb

パスワード無しでログイン出来るように MySQL をセーフモードで起動する。

1
$ sudo mysqld_safe --skip-grant-tables

パスワードを変更する

ターミナルをもう1つ起動させ、以下のコマンドで MySQL に接続する。

1
2
3
4
5
6
7
8
9
10
>mysql -u root mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 37
Server version: 10.3.23-MariaDB-0+deb10u1 Debian 10

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

パスワードを変更する。パスワードを変更するユーザーを指定するために、where 句で条件を指定している。

1
2
3
mysql>update user set password=PASSWORD('password') where user='root' and host='localhost';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

INSERT、UPDATE、DELETEで権限情報を変更した場合は、サーバーの再起動かテーブルの再読込を権限情報を更新する。

1
mysql>FLUSH PRIVILEGES;