Ubuntu 18.04 で MySQL 8 で root パスワードを忘れたときの再設定方法

結論

1. 動いている MySQL を止めます

$ sudo service mysql stop

2. mysqld_safe コマンドを用いてセーフモードで MySQL を起動します

  • このとき、--skip-grant-tables オプションを付与することが重要です
  • 起動すると、実行状態のままでターミナルが止まります
$ sudo mysqld_safe --skip-grant-tables

3. 別のターミナルウィンドウから mysql コマンドでログインする

「2.」のとおりに起動できたら、mysql コマンドを用いてログインします。引数は不要です。

$ mysql

4. root のパスワードを一時的に NULL と設定する

以下のコマンドを実行し、root のパスワードを一時的に NULL と設定します*1

mysql> UPDATE mysql.user SET authentication_string=NULL WHERE user='root';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

無事実行し終えたら、mysql から抜けます。

5. mysqld_safe を kill する

以下のコマンドを実行することで、mysqld_safe を kill します*2

$ sudo pkill -f mysql

6. MySQL を普通に起動する

MySQL を普通に起動します。

$ sudo service mysql start

7. sudo mysql -u root でログインできる

普通に起動された MySQL に対し、mysql コマンドでログインすることができます。sudo を付ける必要があるでしょう*3。パスワードは「4.」にて NULL と設定しましたので、不要です。

$ sudo mysql -u root

8. ALTER コマンドで root のパスワードを変更する

普通に起動された MySQL 上での操作なので、ALTER コマンドが使えます。ALTER コマンドを使い、root のパスワードを変更します。

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YOUR_PASSWORD';

IDENTIFIED WITH mysql_native_password のところが MySQL 8 でのポイントです。これで、root ユーザのパスワードが YOUR_PASSWORD に設定されました。

9. ログアウトしてから、設定したパスワードを用いて改めてログインしてみる

設定したパスワードにより正しくログインできるかを確認しましょう。ログアウトし、以下のコマンドを実行して、パスワードを入力します。

$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 8.0.18 MySQL Community Server - GPL

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

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

mysql> 

\(^o^)/

補足

mysqld_safe Directory '/var/run/mysqld' for UNIX socket file don't exists. というエラーメッセージが出た場合は、以下の記事を参照して下さい。

obel.hatenablog.jp

*1:なお、--skip-grant-tables オプションを付けて mysqld_safe を実行しているので、ALTER コマンドは実行しようとしても怒られます

*2:コマンドが少々雑で、他の mysql 関係のプロセスも kill する可能性もありますが、root パスワードを再設定するような状況ならば問題ないと思います。気になる場合は厳密に kill します

*3:確信が持てないので、ややあいまいな言い方です

Powered by はてなブログ