結論
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.
というエラーメッセージが出た場合は、以下の記事を参照して下さい。