WSLなら普通にLinuxだから簡単なはず!と思っていましたが・・・
MySQLバージョン、LinuxディストリビューションやWSLかどうかで意外と細かいところが変わるようで、いくつか記事を読みながら進める必要がありました。今回の記事では最終的な手順をまとめました。
systemdを有効化
WSL上でsystemdが有効になっていない場合、先に WSLのsystemdを動作させる(今は設定だけでOK!) の内容を実行しておいてください。
systemdが動いていれば後は普通に入ります。
$ sudo apt update
$ sudo apt install mysql-server
$ systemctl status mysql
● mysql.service - MySQL Community Server
Loaded: loaded
セキュリティスクリプトを実行
MySQLインストール後、セキュリティスクリプト(mysql_secure_installation)を実行しようとしましたが、インストール直後は下記のとおりrootの認証Pluginがauth_socketになっているようです。
※出力は無関係な行は省いています
$ sudo mysql
mysql> SELECT User, Host, Plugin FROM mysql.user;
+------------------+-----------+-----------------------+
| User | Host | Plugin |
+------------------+-----------+-----------------------+
| root | localhost | auth_socket |
+------------------+-----------+-----------------------+
私の場合、このままだと下記のエラーが出てmysql_secure_installationが実行できませんでした。
SET PASSWORD has no significance for user 'root'@'localhost' as the authentication method used doesn't store authentication data in the MySQL server.
socket_authは(MySQLサーバー上で動作しているときに)OSのユーザー名がMySQLのユーザー名と一致しているかチェックする方式ですが、この方式だとパスワードを設定することに意味がないので、エラーが返されているようです。
そのため、下記で一時的に認証プラグインを変更します。
$ sudo mysql
mysql> USE mysql;
mysql> UPDATE user SET plugin='caching_sha2_password' WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> exit;
その後、mysql_secure_installationを実行したら通過できました。
sudo mysql_secure_installation
実行後の流れは下記のとおりでした。
- anonymous userを削除するか?と尋ねられます。
プライベートの開発環境ではあるのですが特に存在する必要もないと思ったのでyesで通しました。 - 次にrootユーザーをlocalhostのみでログイン可能にするかと尋ねられます。
これもyesで通しました。 - testデータベースを消すかと尋ねられます。
特にいらないのでyes - Privilegeテーブルを再読み込みするかと尋ねられます。
これもyes
最後に下記を実行してrootの認証方式を戻しておきました。
※クライアント接続するためのユーザーは別途作成しました。
mysql> UPDATE user SET plugin='auth_socket' WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> exit;
なにやらいろいろ途中でこけて結構時間がかかったのですが、結果的に今まであまり理解していなかった細かいところを把握することができました。
おまけ:カジュアルトークを受け付けています!
Musubiteというプラットフォームで、エンジニアのカジュアルトークを受け付けております。
プラットフォーム自体、エンジニアの方にとってとても魅力的なものだと感じていますので、よろしければぜひのぞいてみてください!