症状
WSL2にMicrosoftの指示に従ってMySQLを入れると
mysql -u root -p
でいくらやってもrootuserでmysqlにログイン出来ない。(パスワードが使えないよぅとか言ってくる。インスコ時に入れたくね!?って思うんやけど)
ただし、
sudo mysql
ならば、ログインできる。
原因
とりまログインした状態で
mysql> select user,host, plugin FROM mysql.user;
をすると、
+------------------+-----------+-----------------------+
| user | host | plugin |
+------------------+-----------+-----------------------+
| iroiro | localhost | caching_sha2_password |
| root | localhost | auth_socket |
+------------------+-----------+-----------------------+
みたいな表示が出てくる。で、調べたところによるとmysql-community-server
のインストール時にrootのパスワードをUNIX socketベースの認証をすることができるらしく、それをやってしまっているためにLinux側でrootユーザーならMySQLもrootユーザーという認証の仕方になってしまっている。
なので、いくら
SET PASSWORD
だのなんだのやっても、パスワードが変更したり出来ない。
解決方法
rootでログインした状態で以下のコマンドを実行する。
mysql>ALTER USER root@localhost IDENTIFIED WITH caching_sha2_password BY 'hogehoge';
hogehogeにはパスワードを入れる。終わり。
感想
今どきの人はみんなDocker使うから設定時点で多分パスワードとか入れるので、こんなこと起きないのかなぁと思いながら、またいつか自分が引っかかったときのために残しておくことにした。
追記
僕はNode.jsでMySQLを使うおうとして、このエラーにあたったわけだが
npm install mysql
でインストールされるmysqlを使うと今度はcaching_sha2_password
がサポートされていない。
ので、
npm install mysql2
をして、mysql2を使うと良い。
参考文献